Mongodb:确定复合索引上的分片键策略

时间:2017-12-26 12:31:36

标签: mongodb mongodb-query sharding

  

我有一个拥有1.7亿个文档的集合,它只会去   增加。目前,该系列的尺寸并不大   大约70 GB。

     

该集合有两个索引的字段:{AgentId:1,PropertyId:1} 。   通常一个人导入一个巨大的文件(数百万个文件)   一个特定的A gentId但是PropertyId(非数字可空)是   主要是随机的唯一值。

     

目前,基于{_id:hashed} ,我有两个带分片键的分片。但   我打算将分片键更改为复合索引{AgentId:1,   PropertyId:1} 因为我认为它会提高查询性能(大多数情况下)   查询基于AgentId过滤器)。不确定是否可以   在分片键中有一个可为空的字段。如果是这种情况,那么应用程序   将确保PropertyId是随机编号。

     

所以希望得到一张照片

     
      
  1. 在插入过程中如何将数据分发到分片   以及在插入过程中如何计算块的范围?      
        
    1. 由于PropertyId是随机值。复合键是否适合   单调递增价值的定义?
    2.   
  2.         

    我是mongodb的新手。并且想知道我是否走在正确的道路上?

         

    由于

1 个答案:

答案 0 :(得分:0)

MongoDB中没有自动支持在分片集合后更改分片键

这一现实强调了选择好的分片键的重要性。如果在分片集合后必须更改分片键,则最佳选项是:

  1. 将MongoDB中的所有数据转储为外部格式。
  2. 删除原始分片集。
  3. 使用更理想的分片键配置分片。
  4. 预分割分片键范围以确保初始均匀分布。
  5. 将转储的数据恢复到MongoDB中。