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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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分片策略_Mongodb_Sharding - Fatal编程技术网

MongoDB分片策略

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

我正在试图理解我的切分设置显示的以下行为。随着我不断添加数据,数据似乎只在单个碎片上增加。MongoDB如何在不同的服务器上共享或分发数据?我这样做对吗?MongoDB 2.4.1版在OS X 10.5上使用

根据要求,sh.status()如下所示:

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()向您展示了切分键是什么。也许你是故意这么说的,但是。。。是的,平衡器在默认情况下处于打开状态。