我在关于碎片钥匙的MongoDB文档中读到了以下内容:
如果shard键值总是在增加,则所有新插入都被路由到以maxKey为上限的块中。如果shard键值总是在减少,则所有新插入都被路由到以minKey为下限的块中。 [https://docs.mongodb.com/manual/core/sharding-shard-key/#sharding-shard-key-creation][1]
我不明白为什么。假设shard键在0到75之间,并被划分为3个块。第一大块从0到24,第二块从25到50,第三块从51到75。这里的minKey是0,maxKey是75。如果连续的插入操作以单调递增的方式发生,例如,1,2,3,4,5,为什么这些正在处理共享键值1,2,3,4,5 (单调增加)的插入被路由到从51到75的最后一个切分(最后一个切分)?(这是包含以maxKey作为上限的块的碎片)?
谢谢
发布于 2018-08-06 22:00:29
假设shard键的范围从0到75,就像您说的那样,有3个块。第一大块从0到24,第二块从25到50,第三块从51到75。
如果插入1,2,3,4,5,它们都会进入第一个块。而不是最后一次。因为他们在0到24之间。
文档所讨论的是,当您拥有键时,这些键总是在增加,例如从0增加到无限。
在这种情况下,从0到无限可能有3个块。第一大块从0到24,第二块从25到50,第三块从51到75。但是,由于键的值总是增加到无穷大,所以所有值> 50都会转到第三个块,而<= 50值会增加到前两个块。
在切分的集群中,有一个平衡器将尝试平衡您的块,以便它们拥有相同数量的数据。对于总是在增加键的,平衡器很难就如何分割块做出决定。因此,在第一次,所有带有值> 50的插入都被路由到以maxKey为上限的块,即第三个块。
https://stackoverflow.com/questions/51716036
复制相似问题