分库分表常见问题参考答案(收录25年至今的牛客面经)

分库分表的常用中间件有哪些?
有哪些问题中间件无法提供帮助、只能改写业务代码的场景?
使用了什么中间件?
分库分表的实现场景和方式有哪些?
分表之后,要查询两个表的数据要怎么查?
分库分表的优缺点是什么?
分库分表业界有哪些替代方案?(提示:分布式文件系统,因为分库分表会出现降低QPS,比如range查询失效)
为什么做了分库分表后分页比较困难了?
如果10亿数据要分表,要怎么分?业务怎么切?
分库分表怎么保证数据一致性?
选的什么分片键?什么分片算法?
分库分表后的分布式ID怎么做?
(2025年目前为止的牛客面经关于分库分表的问题收集)


总结:
分布式事务一致性问题
跨节点关联查询JOIN问题(解决方案:1.全局表 2.冗余字段 3.建立1:1的ER实体关系分片)
非分片键的查询问题(1.创建映射表 2.  前缀分片法  3.使用ES搜索引擎(最后才说要抬高立意)
全局分布式ID问题(1.UUID 2.雪花算法 3.mysql/Redis 4.美团Leaf(1.Leaf-segment 2.Leaf-snowflake)
跨库跨节点分页查询问题(不会)

与朋友合作的开源Go KV项目
路过可以的话帮我们点个star✨🌟
https://github.com/FinnTew/FincasKV

参考面试回答:(吟唱)
<strong>面试官:分库分表后、如何解决跨节点JOIN查询问题</strong>
<span> <code>&amp;lt;参考回答:&amp;gt;</code></span>
  分库分表后、跨节点 JOIN 查询会带来性能问题。 为了解决这个问题主要有以下几种方案:
  1. 全局表: 如果是一些数据量小、变动不频繁的基础数据(比如权限表、配置表、商品分类表)可以将它们复制到每个数据库节点。 这样查询时可以直接在本地 JOIN、避免跨库。 但需要保证全局表的数据同步。
  2. 冗余字段: 如果经常需要 JOIN 某些字段、可以将这些字段冗余存储到需要查询的表中。 比如在订单表中冗余存储用户的姓名和地址。 这样查询订单信息时、就不用 JOIN 用户表了。 但需要保证冗余字段的数据一致性。
  3. ER 分片: 如果表之间存在很强的关联关系、比如订单表和订单详情表、可以按照相同的规则进行分片、保证它们在同一个数据库节点上。 这样就可以避免跨库 JOIN。
(ER: 例如将订单表 和订单详情表按照 订单ID进行分片)
使用一致性哈希算法、将 订单ID映射到不同的数据库节点上。
关键: 保证具有相同 订单ID 的订单表记录和订单详情表记录、始终被分配到同一个数据库节点上。)


<strong>面试官:非分片键的字段如何查询问题</strong>
<span> <code>&amp;lt;参考回答:&amp;gt;</code></span>
问题背景:我们选择分片键的时候都是选用查询场景最多的字段来做分片键、但是可能需要查询非分片键下的所有所有数据。例如电商用(订单ID) 做分片但是我们可能会查询订单类型、这些数据可能被分到了不同的库、我们需要聚合所有库的查询、然后返回给前端。导致效率低下
回答参考方案:
<strong>1.关系映射表:映射关系表就是存储待查询字段和分片键映射关系的一张表、当要使用非分片键查询的时候、先到映射关系表中查询字段所对应的所有分片键、再根据分片键查询所有信息。</strong>
(例如创建一个额外的映射表Map、包含 订单ID 和 订单类型 的对应关系。当插入新订单时、同时更新这个映射表。查询时先查映射表获取所有的 订单ID、再根据 订单ID列表查询分片表。总结一下就是用映射去查询我们就可以得到了 缺点是要维护新的Map 适用于对实时性要求不高的情况)
<strong>2.  前缀分片法:利用(订单ID)的某些特征来决定数据存储在哪个分片上,并将这个嵌入到主键中。 这样既可以通过主键进行分片、又可以通过UID进行分片。</strong>
(例如在生成 订单时,嵌入 用户ID 的某些特征 例如 用户ID的最后一位。然后使用包含这个 订单ID进行分片。这样既可以通过 订单分片,也可以通过 用户ID的特征进行路由。优点不需要额外的存储空间 缺点是可能会产生如果 用户ID分布不均匀、可能会导致数据倾斜)
<strong>3.ES: 将所有订单数据同步到ES中、利用 ES 的全文检索和聚合分析能力、进行多条件查询</strong>


<strong>面试官:分库分表后的分布式ID怎么做?</strong>
<span> <code>&amp;lt;参考回答:&amp;gt;</code></span>
问题背景:分库分表后需要一个唯一ID来标识一条数据或消息。
回答参考方案:说一下各大方案及优缺点就行。
1. UUID(优点本地生成、缺点是16字节128位存储成本高以及会产生页分裂问题
2.雪花算法(优点生成性能高、可以根据业务特征分配Bit位、缺点是依赖强时间回钟)
3.MySQL自增主键和Redis的Incr命令(不做探讨)
3. 分布式ID生成服务、如美团的leaf算法(Leaf-segment和Leaf-snowflake)
大家这里可以去看美团技术文章 这里引导一下思路就好


<strong>面试官:如果要你选择一个分布式ID生成方案你会选什么</strong>
<span> <code>&amp;lt;参考回答:&amp;gt;</code></span>
1.如果 对 ID 的有序性有要求、且需要高性能的 ID 生成服务、我会优先选择雪花或者 Leaf-snowflake 。 雪花的优点是生成速度快、ID 趋势递增、有利于数据库索引的性能优化。Leaf-snowflake 在雪花的基础上、对时钟回拨问题进行了优化
2.如果 对 ID 的有序性没有要求、且可以容忍一定的存储空间浪费、我会选择 UUID。 优点是本地生成、不需要依赖外部服务、生成速度快。
3.如果 业务规模较大、对 ID 的全局唯一性、高性能和可扩展性有较高要求、我会选择构建一个专门的分布式 ID 生成服、例如使用 Leaf-segment 算法。 的优点是统一管理、方便维护和扩展、可以根据业务需求定制 ID 生成规则。

更新一下CSDN: https://blog.csdn.net/wy990880?type=blog
大家copy内容背诵就好了
在我看来这个就是点到为止说出自己能知道多少就说多少 不要一点不知道 说多少都是缘分
而且我觉得面试官自己也没做过分库分表
具体的技术深度大家看看别的
全部评论
分库分表总结得很全面
3 回复 分享
发布于 2025-03-17 15:38 上海
mark
点赞 回复 分享
发布于 2025-06-27 15:42 上海
分库分表
点赞 回复 分享
发布于 2025-04-12 16:26 吉林
我喜欢,能不能继续更新这种系列
点赞 回复 分享
发布于 2025-03-19 11:12 北京
m
点赞 回复 分享
发布于 2025-03-19 09:42 湖南
我擦,神
点赞 回复 分享
发布于 2025-03-18 23:05 福建
已老实
点赞 回复 分享
发布于 2025-03-18 15:59 北京
点赞 回复 分享
发布于 2025-03-18 15:37 安徽
分库分表场景很全
点赞 回复 分享
发布于 2025-03-18 15:31 福建
点赞 回复 分享
发布于 2025-03-18 14:54 山东
点赞 回复 分享
发布于 2025-03-18 14:13 江苏
接好运
点赞 回复 分享
发布于 2025-03-18 14:07 福建
点赞 回复 分享
发布于 2025-03-18 12:15 重庆
mark分布式ID方案
点赞 回复 分享
发布于 2025-03-18 11:33 山东
无敌了宇哥
点赞 回复 分享
发布于 2025-03-18 10:48 湖南
点赞 回复 分享
发布于 2025-03-18 10:48 北京
分库分表后join怎么处理
点赞 回复 分享
发布于 2025-03-17 23:31 湖南
mark
点赞 回复 分享
发布于 2025-03-17 22:29 江苏
分库分表真复杂
点赞 回复 分享
发布于 2025-03-17 21:03 辽宁
分库分表真复杂
点赞 回复 分享
发布于 2025-03-17 21:03 北京

相关推荐

01-23 10:37
已编辑
门头沟学院 C++
25.07&nbsp;xxx有限公司,上位机视觉软件开发,实习转正岗(等年后才会出hc)25.12凌云光技术有限公司,应用软件开发工程师,业务面过(拒,要出国)25.12&nbsp;CVTE,嵌入式Linux软件开发,技术面过,HR面十分钟解决战斗(挂,感觉是kpi)25.12库犸科技,应用软件开发,一面挂25.12白日梦游戏,服务端开发,笔试挂,至今没回音25.12睿联技术,g26.1.4&nbsp;软牛科技,C++逆向开发,(1.9面试)26.1.5&nbsp;广电运通集团股份有限公司,初筛中26.1.5&nbsp;新凯来,初筛中26.1.5&nbsp;金域医疗,初筛中26.1.5&nbsp;舜宇集团有限公司,初筛中26.1.6&nbsp;多益网络,等笔试中...笔试预期(公司差评太多了,没时间不想写了)--------------1.6最新------------26.1.6收到高新兴科技集团面试(c++音视频方向),非常突然,18.40约我19.00面试,刚下班到家就开始视频面试了,技术初面问的问题:1.自我介绍2.信号和槽几种连接方式3.问项目,停车系统的自动识别是如何实现的4.qt线程的实现5.虚函数和多态的关系6.list和vector的区别7.vector怎么扩容的8.问实习,qt界面是如何做的9.TCP和UDP的区别10.问项目11.c++模板12.函数重写和函数重载的区别13.公司产品有了解吗(我回答不太了解,然后面试官开始介绍,聊了会)技术初面大概就这些问题,还有测评和复试,26.1.7早九点,技术初面应该过了,发测评了--------------1.8最新------------26.1.7移远通信(自动化测试工具开发)&nbsp;发来一面通知26.1.8高新兴科技集团(c++音视频方向),测评,技术面复试(主要问项目,介绍产品了解你的状况)通过,下周入职1.9号还有两场面试(软牛科技和移远通信),先面试吧锻炼一下,个人感觉这两家没有高新兴科技好--------------1.9最新------------1.朝歌科技(嵌入式软件开发):面向对象特性抽象类的特性?C和C++中Struct的区别C和C++中static的区别C语言中怎么去使用C++的面向对象思想为什么会出现数据竞争,底层是什么线程数据同步?进程传递数据?环形缓存?深拷贝主要是解决什么问题常量指针和指针常量友元函数虚函数实现原理Linux内核启动过程TCP,UDP区别UDP不稳定如何解决丢包粘包解决方案还有其他八股想不起来了,另外就是问了很多项目问题,但是没有深挖,有进4/1八股不会我都没背过我靠,只能按照自己理解答了,应该要G,面试官很好,预计12号出一面结果2.软牛科技面试拒了,hr发我的加密和解密这本书压根没时间看,就不去丢脸了3.移远通信面试推迟到10号4.广州4399网申挂...5.忆联网申挂...--------------1.9最新------------移远通信(自动化测试工具开发)一面结束,问的东西非常简单(约个二面没啥问题)常用的数据结构TCP,UDP区别(三次握手,四次挥手)如何确保显出数据安全数据库相关堆和栈的区别opencv相关其他全是项目--------------1.12最新------------移远通信发来晚上九点钟二面,拒了不想干测开,薪资有点低柏楚电子网申挂诗悦网络网申挂邵音科技初筛中云智研发初筛中小天才初筛中中广核集团初筛中珠海金智维发笔试邀请主包累了,高新兴那边集训一两个月签三方,明年四月多谈薪资在8-9k看具体表现,吃住几乎是包了的,够了,杭州这家开发开差不多10k但是不包吃住,杭州14薪,广州13薪+年终,每月固定花销4k,主包湖南人还是去广东吧--------------1.12最新------------朝歌科技发来二面通知1.16&nbsp;号面试两个人面试轮流问,纯问项目和场景题,巴拉巴拉一个多小时,八股就只问了些&nbsp;ffmpage&nbsp;相关的,待遇&nbsp;7k&nbsp;左右东莞吃饭补&nbsp;25&nbsp;一天不包住,做流媒体协议啥的,实习考核两个月🥲才给签三方目前无回音,应该&nbsp;j&nbsp;了,要求快速到岗,我到不了这么快--------------1.23&nbsp;最新------------已在&nbsp;gxx&nbsp;当牛马,朝歌科技打电话说面试通过...
点赞 评论 收藏
分享
评论
89
542
分享

创作者周榜

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