mongodb 系列~ chunk维护

一 big_chunk
  0 错误提示
     MongoDB chunk too big to move
  1 定义
     单个chunk记录大小超过64M,没办法依靠系统自动split,被称为big chunk,需要手动进行拆分   也被成为jumbo chunk 
  2 拆分方式
     1. 首先关闭Balancer sh.stopBalancer()
     2. 查询特大块 use config && db.chunks.find({jumbo:true})
     3. 拆分特大块 sh.splitAt("db.collection", {shardkey:"拆分临界值"})
     4. 手动挪动块(可选步骤) sh.moveChunk("db.collection", {shardkey:"拆分临界值"}, "shard_ID");
     5. 重启Balancer sh.startBalancer()
  3  造成big chunk的原因
      存在超过64M不可进行自动分割的chunk,也就是存在大量相似值在同一个分片,在无法自动拆分的情况下只能手动指定切割调节,进行切割
二 片键的选择
    1片键本身一定要有高区分度,如果本身没有,也一定要联合高区分度字段做联合片键,否则很容易形成无法分裂的jumbo chunk 
    2 范围片建要避免的单调的递增 or 递减,否则会形成无法避免的热点IO 适合范围查询
    3 如果想做唯一性索引约束,必须包含片键
    4 片建本身必须是索引,对于空集合会自动创建索引,对于已建立的集合需要手动创建索引 再进行分片
 三 我们需要考虑以下三个方面
   1 存储大小是否存在倾斜 
   2 chunk数量是否分布均匀,因为move chunk会消耗大量资源
   3 DML语句是否存在资源访问热点倾斜-最初的目的,扩展分散访问压力
   4 是否存在唯一性约束
四 我们需要获取的信息
   1 每天的数据量大概多少
   2 想要按照什么分片规则 基于hash or 混合 or 单调递增
 

posted @ 2021-08-13 19:03  开心的蛋黄派  阅读(447)  评论(0编辑  收藏  举报