分库分表是怎么分的?

分库分表主要是有水平拆分和垂直拆分,具体又分为分库和分表:

水平拆分

水平拆分又包含水平分库和水平分表。

水平分库:
  • 水平分库指的就是把把一个表中的数据根据分片策略分派到不同服务器上,每个库存储部分数据,所以库的数据之和才是全量数据。简单来说就是把数据进行拆分,一个地方放一点数据。水平分库的策略有很多,例如可以根据id进行范围分片,或者取模分片,或者枚举分片,日期分片或者自然月分片等等,水平分库用得很多。
    • 适用场景:
      • 单库数据量过大,磁盘或性能达到瓶颈。
      • 高并发读写,需分散压力。
    • 优点:
      • 数据分散存储,降低单库负载。
      • 支持水平扩展,提升并发能力。
    • 缺点:
      • 跨库查询需聚合结果,复杂度高。
      • 分布式事务处理复杂。

水平分表:
  • 水平分表指的是把一个表中的数据拆分到几个表中,比如【1<id<=100万】的数据分到table1,【100万<id<=200万】的数据分到table2,【200万<id<=300万】的数据分到table3,所有表合起来的数据才是完整的全量数据。
    • 适用场景:
      • 单表数据量过大,影响查询效率。
      • 无需跨库事务,但需分散单表压力。
    • 优点:
      • 减少单表数据量,提升查询性能。
      • 避免单表锁竞争。
    • 缺点:
      • 需修改 SQL 语句指定表名(如 table${id%4})。
      • 分表后仍需处理单库性能瓶颈。

垂直拆分

垂直拆分又包含垂直分库和垂直分表。

垂直分库:
  • 垂直分库是按业务把数据库中的表拆分到不同的库当中,比如有10个表,其中需要分到3个服务器上,可以根据业务把4个表分到服务器1上,3个分到服务器2上,另外3个分到服务器3上。注意,这里并不是说垂直分库就是要平均分的意思,而是要尽可能根据业务进行均衡的分片,把数据均衡分配到多台服务器上。
    • 适用场景:
      • 业务模块耦合度低,需独立管理。
      • 不同业务数据量差异大,需资源隔离。
    • 优点:
      • 业务解耦,提升系统可维护性。
      • 按业务分配资源,优化硬件使用。
    • 缺点:
      • 跨库 JOIN 需应用层处理。
      • 分布式事务管理复杂。

垂直分表:
  • 垂直分表就是把一个表里的字段进行拆分,例如一个表很庞大,有100个字段,这时候可以考虑把其中一部分字段拿出来新建一个表,通过id进行关联即可,一般是把高频访问的字段和低频字段分开,提高查询效率。
    • 适用场景:
      • 单表字段过多,存在大字段(如 BLOB、TEXT)。
      • 高频查询仅需部分字段。
    • 优点:
      • 减少单表宽度,提升查询效率。
      • 分离冷热数据,优化存储。
    • 缺点:
      • 查询需多次 JOIN 或应用层合并数据。
      • 事务一致性需额外处理。

四者的核心区别对比

维度水平分库水平分表垂直分库垂直分表
拆分层次库级别表级别库级别表级别
拆分方式按行分布到不同库按行分布到同库不同表按业务模块分布到不同库按字段分布到不同表
主要目标解决单库容量和性能瓶颈解决单表数据量过大问题业务解耦与资源隔离优化单表结构,提升查询效率
数据分布数据行分散到多个库数据行分散到多个表不同表分散到多个库表字段分散到多个表
典型场景高并发电商订单表用户表按ID哈希分表用户、订单、商品独立成库用户基础信息与详情分离
事务处理跨库事务复杂单库事务简单跨库事务复杂单库事务简单
查询影响跨库查询需聚合需路由到具体表跨库 JOIN 困难需多次查询或 JOIN
扩展性支持动态扩容库内扩展有限按业务扩展库表结构固定,扩展性低
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值