分库分表:
分库分表的目的:
- 高并发
- 海量数据存储
单表数据量200W以内。
单库并发量2000以内,尽量在1000。
分库分表中间件:
- 代理层中间件:Mycat、Sharding-proxy
- 客户端分库分表: Sharding-jdbc
如何选择:
- 客户端分库分表优点是:不需要代理层二次转发,性能高,不需要部署运维,缺点是升级时候耦合比较高
- proxy方式的话缺点是需要部署,有运维成本,好处是升级时客户端不需要进行处理
拆分规则:
- range拆分,比如ID在某个范围的拆分到一张表,或者时间在某个段内的拆分到一张表,缺点是很容易产生热点问题,大流量都打到最新的数据上了,但是这种方式扩容比较简单
- 某个字段hash拆分,可以平均分配每个库数据请求压力,坏处是扩容比较麻烦,数据迁移时需要重新计算hash并进行数据迁移。
如何实现分库分表:
B树和B+树的区别:
B+树只有叶子节点才存储数据
- B+树查询效率更稳定
- B+树阶数更大,深度更深,B+树比B树更矮胖, 查询所需要的磁盘 I/O 也会更少,查询效率更高
- B+树在范围查询上性能更好,因为B树得通过中序遍历才能完成,但是B+数各个节点有链表,查询效率更高
