articleList

09-海量数据处理之Mysql数据库分库分表总结

2025/03/13 posted in  ShardingJDBC
Tags: 

  • 技术负责人前瞻性思维

    • 需要提前考虑系统一年到两年左右的业务增长情况
    • 对数据库服务器的QPS、连接数、容量等做合理评估和规划
    • 很多人觉得“分库分表”是宜早不宜迟
  • 常规开发里面单表建议1千万内,推荐是百万级别单表存储,常规sql和索引优化先行,然后结合缓存+异步+nosql+mq

  • 垂直角度(表结构不一样)

    • 垂直分表: 将一个表字段拆分多个表,每个表存储部分字段
      • 好处: 避免IO时锁表的次数,分离热点字段和非热点字段,避免大字段IO导致性能下降
      • 原则:业务经常组合查询的字段一个表;不常用字段一个表;text、blob类型字段作为附属表
    • 垂直分库:根据业务将表分类,放到不同的数据库服务器上
      • 好处:避免表之间竞争同个物理机的资源,比如CPU/内存/硬盘/网络IO
      • 原则:根据业务相关性进行划分,领域模型,微服务划分一般就是垂直分库
  • 水平角度(表结构一样)

    • 水平分库:把同个表的数据按照一定规则分到不同的数据库中,数据库在不同的服务器上
      • 好处: 多个数据库,降低了系统的IO和CPU压力
      • 原则
        • 选择合适的分片键和分片策略,和业务场景配合
        • 避免数据热点和访问不均衡、避免二次扩容难度大
    • 水平分表:同个数据库内,把一个表的数据按照一定规则拆分到多个表中,对数据进行拆分,不影响表结构
      • 单个表的数据量少了,业务SQL执行效率高,降低了系统的IO和CPU压力
      • 原则
        • 选择合适的分片键和分片策略,和业务场景配合
        • 避免数据热点和访问不均衡、避免二次扩容难度大
  • 互联网公司实际使用和跳槽面试

    • 公司业务稳定发展,多数情况是为了解决【单库单表】数据量过多问题
    • 重点是水平角度的【分库分表】