返回顶部
首页 > 资讯 > 数据库 >实现数据库水平切分的两个思路
  • 350
分享到

实现数据库水平切分的两个思路

2024-04-02 19:04:59 350人浏览 独家记忆
摘要

引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分

引言

随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。

  • 水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失;
  • 负载均衡策略:可以降低单台机器的访问负载,降低宕机的可能性;
  • 集群方案:解决了数据库宕机带来的单点数据库不能访问的问题;
  • 读写分离策略:最大限度了提高了应用中读取数据的速度和并发量;

为什么要数据切分

上面对什么是数据切分做了个概要的描述和解释,读者可能会疑问,为什么需要数据切分呢?像oracle这样成熟稳定的数据库,足以支撑海量数据的存储与查询了?为什么还需要数据切片呢?

的确,Oracle的DB确实很成熟很稳定,但是高昂的使用费用和高端的硬件支撑不是每一个公司能支付的起的。试想一下一年几千万的使用费用和动辄上千万元的小型机作为硬件支撑,这是一般公司能支付的起的吗?即使就是能支付的起,假如有更好的方案,有更廉价且水平扩展性能更好的方案,我们为什么不选择呢?

我们知道每台机器无论配置多么好它都有自身的物理上限,所以当我们应用已经能触及或远远超出单台机器的某个上限的时候,我们惟有寻找别的机器的帮助或者继续升级的我们的硬件,但常见的方案还是横向扩展,通过添加更多的机器来共同承担压力。我们还得考虑当我们的业务逻辑不断增长,我们的机器能不能通过线性增长就能满足需求?Sharding可以轻松的将计算,存储,I/O并行分发到多台机器上,这样可以充分利用多台机器各种处理能力,同时可以避免单点失败,提供系统的可用性,进行很好的错误隔离。

综合以上因素,数据切分是很有必要的。 我们用免费的Mysql和廉价的Server甚至是PC做集群,达到小型机+大型商业DB的效果,减少大量的资金投入,降低运营成本,何乐而不为呢?

在大中型项目中,在数据库设计的时候,考虑到数据库最大承受数据量,通常会把数据库或者数据表水平切分,以降低单个库,单个表的压力。这里介绍两个项目中常用的数据表切分方法。当然这些方法都是在程序中?使用一定的技巧来路由到具体的表的。首先我们要确认根据什么来水平切分?在我们的系统(SNS)中,用户的UID贯穿系统,唯一自增长,根据这个字段分表,再好不过。

方法一:使用MD5哈希

做法是对UID进行md5加密,然后取前几位(我们这里取前两位),然后就可以将不同的UID哈希到不同的用户表(user_xx)中了。


function getTable( $uid ){
 $ext = substr ( md5($uid) ,0 ,2 );
 return "user_".$ext;
}
您可能感兴趣的文档:

--结束END--

本文标题: 实现数据库水平切分的两个思路

本文链接: https://lsjlt.com/news/52030.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 实现数据库水平切分的两个思路
    引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分...
    99+
    2024-04-02
  • MySQL数据库中怎么实现水平切分
    MySQL数据库中怎么实现水平切分,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 随着互联网应用的广泛普及,海量数据的存储和...
    99+
    2024-04-02
  • 数据库水平分割:实现数据存储与计算分离的法宝
    数据库水平分割是一种将数据库中的数据分布在多个节点上的技术,它可以实现数据存储与计算的分离,提高数据库的性能和可用性。 水平分割通常用于以下场景: 数据量非常大,无法存储在单个节点上。 数据访问模式存在明显的局部性,即某些数据经常被一...
    99+
    2024-02-24
    数据库 水平分割 数据存储 计算 性能 可用性
  • mysql数据水平拆分怎么实现
    MySQL的数据水平拆分可以通过以下几种方式来实现: 分区(Partitioning):MySQL支持分区表,可以将表的数据按照...
    99+
    2023-10-27
    mysql
  • 使用sharding-jdbc实现水平分库+水平分表的示例代码
    前面的文章使用sharding-jdbc实现水平分表中详细记录了如何使用sharding-jdbc实现水平分表,即根据相应的策略,将一部分数据存入到表1中,一部分数据存入到表2中,...
    99+
    2024-04-02
  • 数据库中的水平拆分是什么
    数据库中的水平拆分是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。垂直拆分后遇到单机瓶颈,可以使用水平拆分。相对于垂直拆分...
    99+
    2024-04-02
  • Mysql实现水平分库的示例代码
    目录前言:讲解:第一种方式的水平分库:mysql水平分库数据查询合并MySQL水平分库插入数据前言: 平时开发中,可能会遇见数据量越来越大的情况,一般数据量过千万级别,就必须考虑分库分表的情况了,来减少io 服务器压力,...
    99+
    2023-06-08
    Mysql 水平分库
  • python3实现并发访问水平切分表的方法
    这篇文章给大家分享的是有关python3实现并发访问水平切分表的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。场景说明假设有一个mysql表被水平切分,分散到多个host中,...
    99+
    2024-04-02
  • 如何在AmazonAurora中实现数据库的水平扩展
    在 Amazon Aurora 中实现数据库的水平扩展,可以通过创建和连接多个数据库实例来实现。以下是实现数据库水平扩展的一般步骤:...
    99+
    2024-04-02
  • Android实现换肤的两种思路分析
    本文分析了Android实现换肤的两种思路。分享给大家供大家参考,具体如下: 这里来了解换肤实现及不同方案的差异和使用场合。 一、从功能上划分 1) 软件内置多个皮肤,用户不能...
    99+
    2022-06-06
    Android
  • 数据库水平分割的最佳实践:避免常见陷阱
    数据库水平分割、性能优化、分片策略、数据一致性 导言 数据库水平分割是一种将数据分布在多个物理节点或分片的技术。它可以通过缩小数据量和减少查询等待时间来提高查询性能。然而,水平分割也带来了潜在的陷阱,如果不加以处理,这些陷阱可能会损害性能...
    99+
    2024-02-17
    数据库水平分割可以提高查询性能 但它也带来了潜在的陷阱。了解这些陷阱并采取措施避免它们 至关重要。
  • vue实现主题切换的多种思路分享
    目录动态改变主题 第一种办法:动态组件 第二种办法,路由隔离 总结 额外补充基于css的两种方法方法一 多套css方法二 scss动态切换变量 动态改变主题 首先需要解决的是如何知...
    99+
    2024-04-02
  • 数据库水平分割与垂直分割的区别:深入解析两种分区分区策略
    一、数据库水平分割与垂直分割概述 1. 水平分割 水平分割是指将同一张表中的数据按照某个字段值进行划分,将不同范围的数据存储在不同的数据表或磁盘分区中。水平分割可以有效地减小数据表的大小,提高查询速度,同时可以方便地对不同分区的数据进行...
    99+
    2024-02-23
    数据库 水平分割 垂直分割 性能优化 数据管理
  • 如何在PostgreSQL中实现数据分片和水平扩展
    在PostgreSQL中实现数据分片和水平扩展通常可以通过以下几种方法来实现: 使用表分区:PostgreSQL支持使用表分区来...
    99+
    2024-04-02
  • 使用水平分割优化海量数据库的秘诀
    在处理海量数据时,数据库的性能和可靠性至关重要。水平分割是一种优化技术的集合,可以通过将数据逻辑地划分为多个更小的子集来显着提高数据库的性能和数据完整性。 水平分割的优点 提高查询性能:通过将数据水平分割为多个较小的子集,可以减少表...
    99+
    2024-02-17
    水平分割 数据库优化 数据完整性 查询性能
  • 回收数据库表空间的一个思路
      有些项目比较小,硬盘空间也只有40多G,加上无人维护,久而久之就出现了硬盘空间告警的问题。经过查看之后,发现有些数据文件一开始就设置成2G,但实际可能就只使用了100M左右。为了解决硬盘空间告...
    99+
    2024-04-02
  • 数据库水平分割详解:理解概念、实现方法和应用场景
    数据库水平分割是一种将数据存储在多台服务器上的技术,以便在多个位置访问数据。水平分割的一个主要优点是它可以提高查询性能,因为查询可以分布在多个服务器上进行处理。水平分割还提供了更高的可用性,因为如果其中一台服务器出现故障,其他服务器仍然可...
    99+
    2024-02-24
    数据库 水平分割 分库分表 负载均衡 查询性能 管理
  • thinkphp如何实现两个数据库之间的查询
    本篇内容介绍了“thinkphp如何实现两个数据库之间的查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!配置数据库在 thinkphp 框...
    99+
    2023-07-05
  • mysql实现数据切分的方法
    这篇文章主要介绍了mysql实现数据切分的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql实现数据切分的方法:1、使用数据的垂直切分...
    99+
    2024-04-02
  • 数据库水平分割实战指南:从入门到精通的完整教程
    数据库水平分割概述 数据库水平分割是指将一个大型数据库拆分为多个较小的数据库,每个数据库负责存储不同的数据子集。水平分割可以带来以下好处: 提高查询性能:通过将数据分散到多个数据库,可以减少单台数据库上的查询负载,从而提高查询性能。 ...
    99+
    2024-02-24
    数据库 水平分割 分库 分表 性能优化 可扩展性
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作