何时分库分表
MySQL单表(innoDB)可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW以下是最佳状态,因为这时它的BTREE索引树高在3~5之间。
参考阿里开发手册建议:
1.单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表;如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。
2.实际情况受mysql机器配置等多方面影响,可能数据量很大但性能依旧不错,但考虑后续发展一定要进行分库分表考虑。
如何分库分表
设置合适的分片数量
根据实际的业务场景选择合适的分片数据,参考如下:
- 满足当前数据平均后的数据量在一个合理的范围(<=100w)
- 预估未来5年的数据量发展情况,数据量在一个合理的范围(500w左右,有合理的归档备份机制)
选择合适的分片字段
根据实际的业务场景选择适当的分片字段,要达到如下要求:
- 字段类型常规
- 字段不易过多
- 字段应该是业务场景大多数都会被使用的
设计合理的分片规则
分表数量和分表字段确定后,要设计一个合理的分表规则,良好的分表规则要达到如下条件:
- 规则计算高效,逻辑清晰
- 规则计算后,分片数据均匀
- 方便后续扩容分片
如何保证分片数据均匀,参考ÿ