分库分表

时机

  • 前提,项目业务数据越来越多,或者业务发展比较迅速(单表的数据量达1000W10G以后)

  • 优化已经解决不了性能问题(主从读写分离、查询索引…)

  • IO瓶颈(磁盘IO、网络IO)、CPU瓶颈(聚合查询、连接数太多)

拆分策略

  • 垂直
    • 垂直分库
    • 垂直分表
  • 水平
    • 水平分库
    • 水平分表

垂直分库

以表为依据,根据业务将不同表拆分到不同库中

特点:

  • 按业务对数据分级管理、维护、监控、扩展
  • 在高并发下,提高磁盘IO和数据量连接数

垂直分表

以字段为依据,根据字段属性将不同字段拆分到不同表中。

特点:

  • 冷热数据分离
  • 减少IO过度争抢,两表互不影响

水平分库

将一个库的数据拆分到多个库中

特点:

  • 解决了单库大数量,高并发的性能瓶颈问题
  • 提高了系统的稳定性和可用性

那么一个Java应用如何知道是哪个库呢?

这时候就需要路由

  • 根据ID结点取模
  • 按ID范围路由,节点1(1-100W),节点2(100W-200W)

水平分表

将一个表的数据拆分到多个表中(可以在同一个库内)

特点:

  • 优化单一表数据量过大而产生的性能问题
  • 避免IO争抢并减少锁表的几率

新技术带来的新问题

中间件:mycat、sharding-sphere


分库分表
http://example.com/2023/09/07/分库分表/
Author
Posted on
September 7, 2023
Licensed under