Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb mongo碎片中的冗余块_Mongodb_Sharding - Fatal编程技术网

Mongodb mongo碎片中的冗余块

Mongodb mongo碎片中的冗余块,mongodb,sharding,Mongodb,Sharding,我正在本地机器上测试mongodb切分。除了我的第一块是多余的之外,一切似乎都很好。 我最初运行了一个mongod实例,它有100000个这样的条目 {“_id”:ObjectId(“53d788d26d664906cb359203”),“ind”:123,“123”:123,“someThing”:5656} 我在'ind'上为这个实例编制了索引。因此,基本上有十万个条目,ind在0到100000之间 在整个分片部署之后 我在我的mongos实例上运行了sh.status(),得到了这个 ——

我正在本地机器上测试mongodb切分。除了我的第一块是多余的之外,一切似乎都很好。 我最初运行了一个mongod实例,它有100000个这样的条目

{“_id”:ObjectId(“53d788d26d664906cb359203”),“ind”:123,“123”:123,“someThing”:5656}

我在
'ind'
上为这个实例编制了索引。因此,基本上有十万个条目,
ind
在0到100000之间

在整个分片部署之后

我在我的mongos实例上运行了
sh.status()
,得到了这个

——分片状态--
分片版本:{
“_id”:1,
“版本”:4,
“最小相容外翻”:4,
“当前版本”:5,
“clusterId”:ObjectId(“53d74302e7df70cc9b8394e3”)
}
碎片:
{“_id”:“shard0000”,“host”:“localhost:104”}
{“_id”:“shard001”,“host”:“localhost:105”}
{“_id”:“shard002”,“host”:“localhost:106”}
数据库:
{“_id”:“admin”,“partitioned”:false,“primary”:“config”}
{“_id”:“test”,“partitioned”:true,“primary”:“shard0000”}
测试数据
分片键:{“ind”:1}
块:
shard0001 1
shard0002 2
Shard0001
{“ind”:{“$minKey”:1}}-->{“ind”:0}on:shard001时间戳(2,0)
{“ind”:0}-->{“ind”:25000}on:shard002时间戳(3,2)
{“ind”:25000}-->{“ind”:50000}on:shard002时间戳(3,3)
{“ind”:50000}-->{“ind”:{“$maxKey”:1}}on:shard0000时间戳(3,1)

这是我最初的状态。添加一些数据后:

——分片状态--
分片版本:{
“_id”:1,
“版本”:4,
“最小相容外翻”:4,
“当前版本”:5,
“clusterId”:ObjectId(“53d74302e7df70cc9b8394e3”)
}
碎片:
{“_id”:“shard0000”,“host”:“localhost:104”}
{“_id”:“shard001”,“host”:“localhost:105”}
{“_id”:“shard002”,“host”:“localhost:106”}
数据库:
{“_id”:“admin”,“partitioned”:false,“primary”:“config”}
{“_id”:“test”,“partitioned”:true,“primary”:“shard0000”}
测试数据
分片键:{“ind”:1}
块:
shard0001 4
shard0002 4
Shard0004
{“ind”:{“$minKey”:1}}-->{“ind”:0}on:shard001时间戳(2,0)
{“ind”:0}-->{“ind”:25000}on:shard002时间戳(3,2)
{“ind”:25000}-->{“ind”:50000}on:shard002时间戳(3,3)
{“ind”:50000}-->{“ind”:87449}on:shard001时间戳(4,0)
{“ind”:87449}-->{“ind”:149796}on:shard001时间戳(5,0)
{“ind”:149796}-->{“ind”:224694}on:shard002时间戳(6,0)
{“ind”:224694}-->{“ind”:299592}on:shard001时间戳(7,0)
{“ind”:299592}-->{“ind”:374490}on:shard002时间戳(8,0)
{“ind”:374490}-->{“ind”:524286}on:shard0000时间戳(8,1)
{“ind”:524286}-->{“ind”:674082}on:shard0000时间戳(7,2)
{“ind”:674082}-->{“ind”:992211}on:shard0000时间戳(7,3){“ind”:992211}-->{“ind”:{“$maxKey”:1}}on:shard0000时间戳(3,5)
我的共享密钥也是
ind
。 但是
“ind”:{“$minKey”:1}}-->{“ind”:0}on:shard001时间戳(2,0)
这显然是不对的

我的第一个区块将始终为空


我该怎么办?

看起来您的第一个区块是空的。 来自MongoDB文档:如果区块没有与其碎片密钥范围关联的文档,则区块为空

重要 空块可以使均衡器在集群未达到适当平衡时,将其评估为适当平衡。 空块可以在各种情况下出现,包括:

如果预拆分创建了太多的块,则数据到块的分布可能不均匀。 如果从分片集合中删除多个文档,某些块可能不再包含数据

您的问题是,在同一个碎片上没有可以合并的连续块(空+非空)。所以现在你必须接受它。 请参阅以下链接:

您能澄清问题所在吗?第一个块并不总是空的。您可以添加具有
ind<0
的文档。如果您添加了
ind<0
的任何文档,它现在可能不是空的。