MySQL分库分表
大约 2 分钟
一旦数据量朝着千万以上趋势增长,其他优化效果已经不是太明显了,为了减少数据库的负担,提升数据库响应速度,缩短查询时间,这时候就需要进行分库分表
。
如何分库分表
垂直(纵向)切分
优点: 业务间解耦,不同业务的数据进行独立的维护、监控、扩展 在高并发场景下,一定程度上缓解了数据库的压力 缺点: 提升了开发的复杂度,由于业务的隔离性,很多表无法直接访问,必须通过接口方式聚合数据, 分布式事务管理难度增加 数据库还是存在单表数据量过大的问题,并未根本上解决,需要配合水平切分
水平(横向)切分
优点: 解决高并发时单库数据量过大的问题,提升系统稳定性和负载能力 业务系统改造的工作量不是很大 缺点: 跨分片的事务一致性难以保证 跨库的join关联查询性能较差 扩容的难度和维护量较大,(拆分成几千张子表想想都恐怖)
分库分表工具?
自己开发分库分表工具的工作量是巨大的,好在业界已经有了很多比较成熟的分库分表中间件,我们可以将更多的时间放在业务实现上
- sharding-jdbc(当当):http://shardingsphere.apache.org/index_zh.html
- TSharding(蘑菇街)
- Atlas(奇虎 360)
- Cobar(阿里巴巴)
- MyCAT(基于 Cobar)
- Oceanus(58 同城)
- Vitess(谷歌)