当我使用哈希分片密钥时,在添加任何数据之前,所有分片都已经被大块分割,如下面sh.status()的示例输出所示。
sample.test
shard key: { "sampleId" : "hashed" }
unique: false
balancing: true
chunks:
shard001 2
shard002 2
{ "sampleId" : { "$minKey" : 1 } } -->> { "sampleId" : NumberLong("-4611686018427387902") } on : shard001 Timestamp(1, 0)
{ "sampleId" : NumberLong("-4611686018427387902") } -->> { "sampleId" : NumberLong(0) } on : shard001 Timestamp(1, 1)
{ "sampleId" : NumberLong(0) } -->> { "sampleId" : NumberLong("4611686018427387902") } on : shard002 Timestamp(1, 2)
{ "sampleId" : NumberLong("4611686018427387902") } -->> { "sampleId" : { "$maxKey" : 1 } } on : shard002 Timestamp(1, 3)
现在,当使用复合键或未哈希键并运行sh.status()时,我看到只有一个碎片显示包含1个块。现在,我必须将其填充到最大64mb,以便创建第二个块。在下面的示例中,我有一个shard002和shard001。
sample.test
shard key: { "sampleId" : 1, "uid" : 1 }
unique: false
balancing: true
chunks:
shard002 1
{ "sampleId" : { "$minKey" : 1 }, "uid" : { "$minKey" : 1 } } -->> { "sampleId" : { "$maxKey" : 1 }, "uid" : { "$maxKey" : 1 } } on : shard002 Timestamp(1, 0)
所以我的问题是,为什么在使用哈希分片键时没有数据时会生成块?
答案 0 :(得分:0)
这是哈希碎片的实际行为。
根据mongodb文档
如果您使用哈希分片密钥对空集合进行分片:
没有为空或不存在指定的区域和区域范围 集合:分片操作会创建空块来覆盖 分片键值的整个范围并执行初始块 分配。默认情况下,该操作为每个分片创建2个块, 跨集群迁移。您可以使用numInitialChunks选项来 指定不同数量的初始块。最初的创作 块的分布可以更快地建立分片。后 初始分配,平衡器管理块分配 向前。