MongoDB分片策略
我正在试图理解我的切分设置显示的以下行为。随着我不断添加数据,数据似乎只在单个碎片上增加。MongoDB如何在不同的服务器上共享或分发数据?我这样做对吗?MongoDB 2.4.1版在OS X 10.5上使用 根据要求,sh.status()如下所示:MongoDB分片策略,mongodb,sharding,Mongodb,Sharding,我正在试图理解我的切分设置显示的以下行为。随着我不断添加数据,数据似乎只在单个碎片上增加。MongoDB如何在不同的服务器上共享或分发数据?我这样做对吗?MongoDB 2.4.1版在OS X 10.5上使用 根据要求,sh.status()如下所示: mongos> sh.status() sharding version: { "_id" : 1, "version" : 3, "minCompatibleVersion" : 3, "currentV
mongos> sh.status()
sharding version: {
"_id" : 1,
"version" : 3,
"minCompatibleVersion" : 3,
"currentVersion" : 4,
"clusterId" : ObjectId("52787cc2c10fcbb58607b07f") }
shards:
{ "_id" : "shard0000", "host" : "xx.xx.xx.xxx:xxxxx" }
{ "_id" : "shard0001", "host" : "xx.xx.xx.xxx:xxxxx" }
{ "_id" : "shard0002", "host" : "xx.xx.xx.xxx:xxxxx" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "newdb", "partitioned" : true, "primary" : "shard0001" }
newdb.prov
shard key: { "_id" : 1, "jobID" : 1, "user" : 1 }
chunks:
shard0000 43
shard0001 50
shard0002 43
看起来您选择了一个非常差的碎片键。您沿着
{“\u id”:1,“jobID”:1,“user”:1}
的值进行分区-这对于插入来说不是一个好的分布,因为\u id值是单调递增的,因为您正在使用ObjectId()值作为\u id
您希望选择一个表示您如何访问数据的切分键-在_id之后还有两个字段没有意义-因为_id是唯一的,其他两个字段永远不会用于分割数据
用户,您是否打算在jobID上进行切分?很难知道在您的情况下最好的切分键是什么,但很明显,所有插入都将进入最高的块(通过maxKey的最高值),因为每个新的_id的值都比前一个高
最终,它们应该平衡到其他碎片,但前提是平衡器正在运行,所有配置服务器都已启动,并且辅助服务器也已启动。最好选择一个更好的切分键,并让插入从一开始就均匀分布在集群中。看起来您选择了一个非常差的切分键。您沿着
{“\u id”:1,“jobID”:1,“user”:1}
的值进行分区-这对于插入来说不是一个好的分布,因为\u id值是单调递增的,因为您正在使用ObjectId()值作为\u id
您希望选择一个表示您如何访问数据的切分键-在_id之后还有两个字段没有意义-因为_id是唯一的,其他两个字段永远不会用于分割数据
用户,您是否打算在jobID上进行切分?很难知道在您的情况下最好的切分键是什么,但很明显,所有插入都将进入最高的块(通过maxKey的最高值),因为每个新的_id的值都比前一个高
最终,它们应该平衡到其他碎片,但前提是平衡器正在运行,所有配置服务器都已启动,并且辅助服务器也已启动。最好选择一个更好的切分键,并让插入从一开始就均匀地分布在集群中。您能给我们显示一个sh.status()?您能给我们显示一个sh.status()?平衡器默认运行吗?我记得我使用jobID和user进行了切分,但似乎不是这样……sh.status()向您展示了切分键是什么。也许你是故意这么说的,但是。。。是的,平衡器默认打开。平衡器默认运行吗?我记得我使用jobID和user进行了切分,但似乎不是这样……sh.status()向您展示了切分键是什么。也许你是故意这么说的,但是。。。是的,平衡器在默认情况下处于打开状态。