分库分表,分库策略是什么?

在Java面试中,分库分表是解决数据库性能瓶颈和扩展性问题的常见方案。分库策略主要关注如何将数据水平拆分到多个数据库实例中,以下是详细的分库策略解析:


一、分库策略的核心目标

  1. 负载均衡:分散数据存储和查询压力,避免单库成为性能瓶颈。
  2. 扩展性:支持业务增长,通过增加数据库实例线性提升系统容量。
  3. 业务适配:根据查询模式和数据特性选择最优拆分方式,减少跨库操作。

二、常见的分库策略

1. 哈希分库(Hash Sharding)
  • 原理:根据分库键(如用户ID)计算哈希值,按数据库实例数取模,确定数据归属。
    int dbIndex = Math.abs(userId.hashCode()) % dbCount;
    
  • 适用场景
    • 数据分布均匀,无明确范围查询需求(如用户表、订单表)。
    • 需要避免热点问题(如电商系统中用户订单分散存储)。
  • 优点
    • 数据分布均匀,各库负载相对均衡。
    • 直接路由,查询效率高。
  • 缺点
    • 扩容复杂:新增库时需重新哈希,数据迁移成本高。
    • 跨库查询困难:如按非分库键字段查询需扫描所有库。

你可能感兴趣的:(面试专题,mysql)