mysql拆分库⽅法_数据库拆分的⼏种⽅式
数据库做拆分的⼏种⽅式:1.按功能划分(垂直切分)
将不同功能相关的表放到不同的数据库中,这样做的好处是⾮常直观。但当某⼀部分的功能其数据量或性能要求超出了可控的范围,就需要继续对其进⾏深⼊的再切分。
2.按表中某⼀字段值的范围划分(⽔平切分)
当伴随着某⼀个表的数据量越来越⼤,以⾄于不能承受的时候,就需要对它进⾏进⼀步的切分。⼀种选择是根据key 的范围来做切分,譬如ID 为 1-10000的放到A上,ID 为10000~20000的放到B。这样的扩展就是可预见的。另⼀种是根据某⼀字段值来划分,譬如根据⽤户名的⾸字母,如果是A-D,就属于A,E-H就属于B。这样做也存在不均衡性,当某个范围超出了单点所能承受的范围就需要继续切分。还有按⽇期切分等等。mysql数据库的方法
优点:单表⼤⼩可控,天然⽔平扩展
缺点:⽆法解决集中写⼊瓶颈的问题
3.基于hash的切分
⼀般采⽤mod来切分,⼀开始确定切分数据库的个数,通过hash取模来决定使⽤哪台。这种⽅法能够平均地来分配数据,但是伴随着数据量的增⼤,需要进⾏扩展的时候,这种⽅式⽆法做到在线扩容。每增加节点的时候,就需要对hash 算法重新运算。
所以采⽤这种⽅法推荐采⽤mod 2^n这种⼀致性哈希
以点评统⼀订单库为例,分库分表的⽅案是32*32的,即通过userId后四位mod 32分到32个库中,同时再将userId后四位div 32 mod 32将每个库分为32个表,共计分为1024张表。其线上部署情况为8个集(主从),每个集4个库
4.基于路由表的切分
前⾯的⼏种⽅式都是根据应⽤的数据来决定操作的,基于路由表的切分是⼀种更加松散的⽅法。它单独维护⼀张路由表,根据⽤户的某⼀属性来查路由表决定使⽤哪个数据库,这种⽅式是⼀种更加通⽤的⽅案
优点:id和库的mapping算法可以随意更改
缺点:可能引⼊额外的单点

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。