# 分片集群的设计
# 分片集群规划步骤
- 确认是否需要分片
- 估算出大概需要多少片
- 了解数据的分布规则
- 确认需要分片的表
- 为需要分片的表选择片键
- 使用合适的均衡策略
# 分片的参考标准
- 数据量的大小一般不应该超过3TB,尽可能保持2TB一个分片
- 分片上的常用索引必须能容纳进内存
- 业务压力增大时,如CPU,RAM,磁盘中的任一项出现瓶颈时,可考滤加分片解决
# 分片数量的估算
公式
res1 = 存储总量/单服务器可挂载容量
res2 = 工作集的大小/单服务器内存容量
res3 = 并发量总数/(单服务器并发量 * 0.7)
分片数量 = max(res1,res2,res3)备注:工作集指热数据加索引
例子
假设需要存储总量大概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
# 分片的考虑
- 是否需要跨机房分布
- 是否需要容灾
- 高可用的要求
# 影响片键效率的因素
- 片键值的基数(Cardinality), 应该取基数大的为片键
- 片键取值的分布,应该尽可能选择值均匀分布的为片键
- 避免单调递增或递减的片片键
- 分散写,集中读
- 被尽可能多的业务场景用到