MongoDB中的切分

MongoDB中的切分,mongodb,sharding,Mongodb,Sharding,我尝试在MongoDB中测试切分。例如,我使用host1.com和host2.com代替真实的服务器名 因此,我在host1.com上创建了配置服务器: mongod --dbpath /path/to/configdb/ --configsvr 在同一台计算机上启动了mongos: mongos --configdb host1.com --port 27020 并在两台机器(host1.com和host2.com)上启动了mongod: 我添加了碎片,为数据库test和集合test启用了

我尝试在MongoDB中测试切分。例如,我使用host1.com和host2.com代替真实的服务器名

因此,我在host1.com上创建了配置服务器:

mongod --dbpath /path/to/configdb/ --configsvr
在同一台计算机上启动了
mongos

mongos --configdb host1.com --port 27020
并在两台机器(host1.com和host2.com)上启动了
mongod

我添加了碎片,为数据库
test
和集合
test
启用了带有碎片键{'name':1}(集合只有这个字段和测试的
\u id
)的碎片,如教程中所述。但在所有这些操作之后,我的所有数据只写入一个碎片,这是数据库的主要部分

以下是配置:

分片状态:

mongos> db.printShardingStatus()
--- Sharding Status --- 
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
    {  "_id" : "shard0000",  "host" : "host1.com:27018",  "maxSize" : NumberLong(1) }
    {  "_id" : "shard0001",  "host" : "host2.com:27018",  "maxSize" : NumberLong(10) }
  databases:
        ...
    {  "_id" : "test",  "partitioned" : true,  "primary" : "shard0000" }
        test.test chunks:
                shard0001   1
            { "name" : { $minKey : 1 } } -->> { "name" : { $maxKey : 1 } } on : shard0001 Timestamp(1000, 0)
收集数据:

mongos> db.printCollectionStats()
test
{
    "sharded" : false,
    "primary" : "shard0000",
    "size" : 203535788,
    ...
}
平衡器状态:

mongos> sh.isBalancerRunning()
true

那么,尽管我添加了超过1兆字节的数据,为什么集合中的所有数据都只驻留在一个碎片上呢?为什么
db.printCollectionStats()
显示
test
数据库
“shared”:false
。我做错了什么?

默认块大小为64MB,因此在发生拆分之前,您有足够的空间增长。您可以自己预先分割碎片密钥范围,这样就可以从一开始就允许写入多个碎片。有关更多信息,请参阅

关于chunk size和maxSize之间的差异:


maxSize将限制给定碎片上的数据量。当到达时,均衡器会将块移动到尚未达到maxSize的碎片上。区块是所有文档的集合,这些文档都属于切分键范围的一部分。MongoDB平衡器将在区块级别的碎片之间移动数据以实现平衡。当区块接近maxSize值时,它将被拆分为2,这可能会导致移动。

默认区块大小为64MB,因此在拆分发生之前,您有足够的增长空间。您可以自己预先分割碎片密钥范围,这样就可以从一开始就允许写入多个碎片。有关更多信息,请参见以下内容:@James Wahlin,因此shard maxSize和chunkSize彼此不相关?maxSize将限制给定shard上的数据量。当到达时,均衡器会将块移动到尚未达到maxSize的碎片上。区块是所有文档的集合,这些文档都属于切分键范围的一部分。MongoDB平衡器将在区块级别的碎片之间移动数据以实现平衡。当一个块接近maxSize值时,它将被分成2个,这可能会导致移动。您有
“primary”:“shard0000”
测试。测试块:状态输出的shard001 1
验证primary在0000上,而单个shard在0001上。重复检查的另一种方法是验证
name
字段上是否有索引:如果集合为空,则会自动创建它。然而,如果它不是空的,切分就不会被删除happen@James瓦林,谢谢!!你可以把答案贴出来,我会接受的。
mongos> sh.isBalancerRunning()
true