分库分表:

分库分表的目的:

  • 高并发
  • 海量数据存储

单表数据量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+数各个节点有链表,查询效率更高