分库分表面经

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 的订单表记录和订单详情表记录、始终被分配到同一个数据库节点上。)

目录