后端岗位面试题更新 2026-08-05

请描述在工作中落地 Sharding JDBC 进行分库分表的过程。在实施时,你如何决定分表字段与分表数量?采用了哪种分片算法,例如取模或哈希,并说明为何这样选?

后端开发系统设计方案权衡

考察说明

考查对 Sharding JDBC 分库分表实践的理解,包括分片策略和分片算法的选择。

回答思路

  1. 【回答框架 1】分库分表是应对大数据量和高并发的手段。选用 Sharding JDBC,是因为它对业务代码侵入小,原生支持 JDBC 协议,可无缝集成到现有应用中。
  2. 【回答框架 2】分表逻辑:选择业务查询最频繁、且天然均匀分布的字段作为分片键,比如用户 ID 或订单 ID。分表数量需根据数据增长预估和单表数据容量而定,通常使单表数据量在千万级别以下。
  3. 【回答框架 3】分片算法:最常用的是取模,如对分片数取余,简单直接,但若数据不均匀可能导致热点。哈希取模则通过哈希函数打散数据,更均匀。还有范围分片,如按时间分表,便于分区维护,但可能热点在最新数据。
  4. 【回答框架 4】实际项目里我们采用用户 ID 的哈希取模,分 16 个库、64 张表,因为用户访问相对均匀。同时配合读写分离和索引优化,效果良好。
  5. 【关键点 1】分片键应选择高区分度、查询频繁的字段。
  6. 【关键点 2】分表数量需结合数据量和单表容量预估,避免后续扩容麻烦。
  7. 【关键点 3】取模算法简单但可能数据倾斜,哈希取模更均匀。
  8. 【易错点 1】分片键设计不当,导致跨分片查询或数据倾斜。
  9. 【易错点 2】分片算法选择不当,如取模在数据分布不均时产生热点。
  10. 【易错点 3】注意分片后跨节点 join、排序、聚合的复杂性和性能问题。