# 分片集群的设计

# 分片集群规划步骤

  1. 确认是否需要分片
  2. 估算出大概需要多少片
  3. 了解数据的分布规则
  4. 确认需要分片的表
  5. 为需要分片的表选择片键
  6. 使用合适的均衡策略

# 分片的参考标准

  1. 数据量的大小一般不应该超过3TB,尽可能保持2TB一个分片
  2. 分片上的常用索引必须能容纳进内存
  3. 业务压力增大时,如CPU,RAM,磁盘中的任一项出现瓶颈时,可考滤加分片解决

# 分片数量的估算

  1. 公式

    res1 = 存储总量/单服务器可挂载容量
    res2 = 工作集的大小/单服务器内存容量
    res3 = 并发量总数/(单服务器并发量 * 0.7)
    分片数量 = max(res1,res2,res3)

    备注:工作集指热数据加索引

  2. 例子

    假设需要存储总量大概8TB的数据,单台服务器可保存2TB的数据,则 res1=8Tb/2TB=4
    假设热数据加索引大小为400GB,单台服务器的内存容量为256G,mongodb默认使用内存的60%来缓存数据 则 res2=400G/(256G * 0.6)≈3
    假设高峰期的并发总数为3万/s,单服务器并发总数为9000/s,预留30%额外资源开销被集群占用,则res3=30000/(9000*0.7)≈5
    则最终的分片数为:max(4,3,5)=5

# 分片的考虑

  1. 是否需要跨机房分布
  2. 是否需要容灾
  3. 高可用的要求

# 影响片键效率的因素

  1. 片键值的基数(Cardinality), 应该取基数大的为片键
  2. 片键取值的分布,应该尽可能选择值均匀分布的为片键
  3. 避免单调递增或递减的片片键
  4. 分散写,集中读
  5. 被尽可能多的业务场景用到