博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库拆分的几种方式
阅读量:5886 次
发布时间:2019-06-19

本文共 786 字,大约阅读时间需要 2 分钟。

数据库做拆分的几种方式:
1.按功能划分(垂直切分)

将不同功能相关的表放到不同的数据库中,这样做的好处是非常直观。但当某一部分的功能其数据量或性能要求超出了可控的范围,就需要继续对其进行深入的再切分。

2.按表中某一字段值的范围划分(水平切分)

当伴随着某一个表的数据量越来越大,以至于不能承受的时候,就需要对它进行进一步的切分。一种选择是根据key 的范围来做切分,譬如ID 为 1-10000的放到A上,ID 为10000~20000的放到B。这样的扩展就是可预见的。另一种是根据某一字段值来划分,譬如根据用户名的首字母,如果是A-D,就属于A,E-H就属于B。这样做也存在不均衡性,当某个范围超出了单点所能承受的范围就需要继续切分。还有按日期切分等等。

优点:单表大小可控,天然水平扩展

缺点:无法解决集中写入瓶颈的问题

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算法可以随意更改

缺点:可能引入额外的单点

转载地址:http://ntmix.baihongyu.com/

你可能感兴趣的文章
数学之美笔记(二十一)
查看>>
网站运维的心得
查看>>
jenkins+sonar5.6 审查php环境
查看>>
Sql Server 2008 r2 链接 sql server 2014 索引超出界限
查看>>
我的友情链接
查看>>
[UX] window.onbeforeunload 页面卸载事件
查看>>
centOS_5.4_安装Open×××
查看>>
Spring Security OAuth2 开发指南
查看>>
TCP
查看>>
参观迅达云成公司有感
查看>>
mount挂载NTFS失败
查看>>
CentOS6.5安装MariaDB10.0.15编译安装和多实例管理配置
查看>>
lua 自定义lib
查看>>
U盘安装centos6.5
查看>>
protobuf消息的自动派发
查看>>
openssl
查看>>
Mybatis多个参数映射
查看>>
ubuntu不能登陆死循环问题解决
查看>>
exchange 2016 安装开源垃圾邮件网关
查看>>
javascript鼠标事件【部分】
查看>>