跳至主要內容

MySQL分库分表

知识库数据库MySQLMySQL大约 1 分钟

一旦数据量朝着千万以上趋势增长,其他优化效果已经不是太明显了,为了减少数据库的负担,提升数据库响应速度,缩短查询时间,这时候就需要进行分库分表

如何分库分表

  • 垂直(纵向)切分

    优点:
        业务间解耦,不同业务的数据进行独立的维护、监控、扩展
        在高并发场景下,一定程度上缓解了数据库的压力
    缺点:
        提升了开发的复杂度,由于业务的隔离性,很多表无法直接访问,必须通过接口方式聚合数据,
        分布式事务管理难度增加
        数据库还是存在单表数据量过大的问题,并未根本上解决,需要配合水平切分
    
  • 水平(横向)切分

    优点:
        解决高并发时单库数据量过大的问题,提升系统稳定性和负载能力
        业务系统改造的工作量不是很大
    缺点:
        跨分片的事务一致性难以保证
        跨库的join关联查询性能较差
        扩容的难度和维护量较大,(拆分成几千张子表想想都恐怖)
    

分库分表工具?

自己开发分库分表工具的工作量是巨大的,好在业界已经有了很多比较成熟的分库分表中间件,我们可以将更多的时间放在业务实现上

Sharding JDBC