【发布时间】:2012-03-01 12:25:17
【问题描述】:
出于我的需要,我必须进行预拆分,但我的分片键是复合键。我的复合键(k1和k2)的两个键都是int,我想要的块结构是这样的
chunk1 : k1 = minkey to 1, k2 = minkey to maxkey
chunk2 : k1 = 1 to 2, k2 = minkey to maxkey
chunk3 : k1 = 2 to 3, k2 = minkey to maxkey
chunk4 : k1 = 3 到 4, k2 = minkey 到 maxkey ...
所以我真正想做的是只在第一个键上拆分,让第二个键包含所有可能的范围,但如果运行这个
db.runCommand( { split : "db.mycollection" , middle : { k1: 1} } );
说没有提供完整的分片键会失败,所以我要调用它
db.runCommand( { split : "db.mycollection" , middle : { k1: 1, k2:somenumber } } );
此命令有效,但结果拆分很糟糕,因为它给了我如下所示的块
chunk1 : k1 = minkey to 1, k2 = minkey to somenumber
chunk2 : k1 = 1 到 maxkey ,k2 = somenumber 到 maxkey
这很糟糕,因为如果用户在 k1somenumber 的位置插入一些文件,系统中没有覆盖它的块,插入应该会失败。
如何使用复合键创建这样的块边界?
注意:有人可能会问为什么我有 k2,如果它总是从 minkey 到 maxkey。我有这样的 k2,以便将来如果需要的话,可以在 k2 上为相同的 k1 进一步拆分(我相信某些块上会需要它)
【问题讨论】:
标签: mongodb