【发布时间】:2018-01-23 06:14:21
【问题描述】:
我正在试验mongo sharding。该集合的分片键为{policyId,startTime}。
policyId - java UUID (limited values,lets say 50)
startTime - monotonically increasing time.
在集合中插入30M(32 GB)周围的文档后:以下是数据分布:
shard key: { "policyId" : 1, "startDate" : 1 }
unique: false
balancing: true
chunks:
sharda 63
shardb 138
在插入过程中sh.isBalancerRunning() 给出了“假”作为结果。当我停止插入更多文档时,平衡器开始移动块。之后我得到了数据的均匀分布。
以下是我对平衡器的担忧/问题:
1. 如果停止插入 db,则只有平衡器处于活动状态并开始移动块。如果我在更长的时间内插入更多数据,这将创建更多块并且数据将更加倾斜。块迁移本身将需要更多时间来平衡分片。那么 mongo 是如何决定何时使用 migrate chunks 的呢?
2. 如果在20M 文档之后插入数据,我能够注意到write latency 中的峰值。这是否意味着平衡器间歇性地移动一些块?
3. Count API 在块迁移期间给出不一致的结果,因为平衡器将块从一个分片复制到另一个分片并删除旧的块。我们是否应该期望Find API 也会给出不正确的结果(重复文档)?
如果可能的话,任何人都可以为 mongo balancer 分享任何文档/博客,以便更好地理解。
【问题讨论】: