分库分表面经
3 分钟阅读
•
662 字
+
97 词
分库分表的常用中间件有哪些?
有哪些问题中间件无法提供帮助,只能改写业务代码的场景?
使用了什么中间件?
分库分表的实现场景和方式有哪些?
分表之后,要查询两个表的数据要怎么查?
分库分表的优缺点是什么?
分库分表业界有哪些替代方案?(提示:分布式文件系统,因为分库分表会出现降低QPS,比如range查询失效)
为什么做了分库分表后分页比较困难了?
如果10亿数据要分表,要怎么分?业务怎么切?
分库分表怎么保证数据一致性?
选的什么分片键?什么分片算法?
分库分表后的分布式ID怎么做?
(2025年目前为止的牛客面经关于分库分表的问题收集)
总结:
分布式事务一致性问题
跨节点关联查询JOIN问题(解决方案:1.全局表 2.冗余字段 3.建立1:1的ER实体关系分片)
非分片键的查询问题
全局分布式ID问题
跨库跨节点分页查询问题
参考面试回答:(吟唱)
面试官:分库分表后、如何解决跨节点JOIN查询问题
<参考回答:>
分库分表后、跨节点 JOIN 查询会带来性能问题。 为了解决这个问题主要有以下几种方案:
\1. 全局表: 如果是一些数据量小、变动不频繁的基础数据(比如权限表、配置表、商品分类表)可以将它们复制到每个数据库节点。 这样查询时可以直接在本地 JOIN、避免跨库。 但需要保证全局表的数据同步。
\2. 冗余字段: 如果经常需要 JOIN 某些字段、可以将这些字段冗余存储到需要查询的表中。 比如在订单表中冗余存储用户的姓名和地址。 这样查询订单信息时、就不用 JOIN 用户表了。 但需要保证冗余字段的数据一致性。
\3. ER 分片: 如果表之间存在很强的关联关系、比如订单表和订单详情表、可以按照相同的规则进行分片、保证它们在同一个数据库节点上。 这样就可以避免跨库 JOIN。
(ER: 例如将订单表 和订单详情表按照 订单ID进行分片)
使用一致性哈希算法、将 订单ID映射到不同的数据库节点上。
关键: 保证具有相同 订单ID 的订单表记录和订单详情表记录、始终被分配到同一个数据库节点上。)