分库分表是怎么分的?

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

水平拆分

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

水平分库:

  • 水平分库指的就是把把一个表中的数据根据分片策略分派到不同服务器上,每个库存储部分数据,所以库的数据之和才是全量数据。简单来说就是把数据进行拆分,一个地方放一点数据。水平分库的策略有很多,例如可以根据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
扩展性 支持动态扩容 库内扩展有限 按业务扩展库 表结构固定,扩展性低
#正在实习的你,几点下班##稳定和高薪机械人更看重哪个?##面试等了一周没回复,还有戏吗#
全部评论

相关推荐

首先讲三个故事,关于牛客的事件一:2024年,牛客上有一对高学历情侣,求职方向与我当时一致,都是嵌入式方向。他们恰好是我的朋友,专业能力和学历背景都很扎实,也因此拿到了不少优质offer。和很多求职者一样,他们把offer情况整理后发在平台上,本意是记录与交流,但很快引发了争议。有声音指责他们“集邮”“不释放名额”,认为这种展示本身就是一种炫耀。最终讨论失控,当事人删除内容,事件也很快被遗忘。事件二:小红书评论区,一条评价获得了不少共鸣:“感觉牛客就是当年那群做题区毕业了开始找工作还收不住那股味,颇有一种从年级第一掉到年纪第二后抱怨考不上大学的味道”,这条评论被水印里这个同学转发到牛客后,评论...
小型域名服务器:当看到别人比自己强的时候,即便这是对方应得的,很多人会也下意识的歪曲解构对方的意图,来消解自己在这本就不存在的比较中输掉的自信,从而平白制造出很多无谓的争论。比如你会在空余时间来写优质好文,而我回家只会暗区突围,那么我就可以作为键盘侠在这里评论你是不是XXXXXXXX。即便我自己都知道这是假的,但只要这没那么容易证伪,那么当你开始回应的时候,脏水就已经泼出去了,后面可能会有更多的人带着情绪来给我点赞,而毫不关注你写的文章内容本身是啥了。
SAGIMA牛马咖啡
点赞 评论 收藏
分享
评论
2
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务