`
zhouguiping2008
  • 浏览: 5010 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

分库分表

 
阅读更多
     项目发展的初期,项目小,数据量小,业务简单,用户使用较少,往往将所有表设计到一个
数据库中,也就是说所有表都在一个表空间下,或者在多个表空间下,即单库单表。

     当系统用户越来越多时,对查询需求要求越来越多时,往往就会将数据库架构改为主从结构
利用这种结构的特性,将操作数据库读和写分开,即读写分离,写请求发往master数据库,master再将数据同步到slave节点,读操作全部从slave读,而且slave节点可以有多个,这样就可以线性增大Qps,即提高查询处理能力。

      当系统用户越来越多后,比如用户达到1亿用户,全部数据都放到一张表中,即使读写已经分离了,但是一张表的数据还是会很大,这个时候对读写性能会减弱,影响到整个数据库,这个时候就会将数据进行水平分表,即将一张表进行按照某些特性进行分区,如按照时间分区为多个表,按照hash分为多个表按照范围分为多个表,这样一个表的数据就会减少,可以减少查询的性能,如oracle的表分区就是解决这种问题的,这时候的架构为即单库多表

      当系统业务越来越庞大,数据越来越大的时候,一个数据库存储不下这些数据时,数据库支持的连接也不够时,整体性能会下降很厉害,这个时候往往需要对数据进行水平,垂直分割,
即将独立业务的数据垂直分割到一个独立的数据库中,这样减少单台数据局的存储问题,也解决了连接不够的问题,解决了并发的问题等,同样的垂直分离出去后,一个数据库可能也存储不了一个独立业务的数据,那么这个时候就会将数据进行水平分区,比如用户数据达到5亿后,一个数据库存储不下,就可以根据用户名进行hash,水平分区到多个用户库中,这个时候的分区表是物理不同的库中的表,到这个阶段后,就需要有个路由服务,需要将用户的请求路由到具体的水平分区表中去,新增数据时也是根据路由新增到具体的分区表中。现在的数据库架构为多库多表结构,为了提高读写性能,任何一个独立库都会设计为主备结构,往往还有双机备份,以免数据丢失。

分库分表规则
分库分表后需要有一套分库分表规则,通过分库分表规则将数据插入到对应的库和表中,通过分库分表规则查询对应的库和表,这个功能就叫做路由。

一主多备
在实际应用中往往都是读多写少的场景,像mysql提供了读写分离的机制,写请求全部到master节点,读可以在master,slave节点,master和slave结构完全一样,一个master可以有多个slave节点,通过这种方式可以提高数据库的Qps,因为所有的写操作都在master上面,然后异步同步数据到salve节点上面,而读操作都在slave节点上面,当然缺点是同步有一定的延
迟,slave节点数量越多,延迟越厉害,因为要有数据同步
因为所有的写操作都在master上面,master往往就成为集群的性能拼劲,当写操作过多,会严重影响master的稳定性,如果master挂掉,整个集群将不能工作,这个时候一般需要将master做成双机,所以如果读压力大时,往往采用主备架构,通过多添加slave节点来线性扩展Qps,但是当slave节点过多时就需要考虑分库了,同样的当写压力过大时需要考虑分库。


由于集群中的机器配置可能不一样,这个时候可以通过程序控制每台机器的读写权重,以达到负载均衡。

     

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics