我在localhost上设置了一个分片的mongo db环境,有3个配置服务器、2个分片的mongo实例和一个mongos。
一旦集群启动,我将运行以下命令序列:
sh.addShard( "127.0.0.1:27010")
sh.addShard( "127.0.0.1:27011")
a = {"_id" : 1, "value" : 1}
b = {"_id" : 2, "value" : 2}
c = {"_id" : 3, "value" : 3}
d = {"_id" : 4, "value" : 4}
use foobar;
db.foo.insert(a);
db.foo.insert(b);
db.foo.insert(c);
db.foo.insert(d);I使db能够进行分片并创建索引等。
sh.enableSharding("foobar");
db.foo.ensureIndex({"value":"hashed"});
sh.shardCollection("foobar.foo", { value: "hashed" } )以上所有操作的结果都是成功的。
但是一旦我这样做了: db.foo.stats()
我看到所有的数据都只在一个分片中结束,而没有被分发。和运行
db.printShardingStatus();产生:
--- Sharding Status ---
sharding version: {
"_id" : 1,
"version" : 3,
"minCompatibleVersion" : 3,
"currentVersion" : 4,
"clusterId" : ObjectId("52170e8a7633066f09e0c9d3")
}
shards:
{ "_id" : "shard0000", "host" : "127.0.0.1:27010" }
{ "_id" : "shard0001", "host" : "127.0.0.1:27011" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "foobar", "partitioned" : true, "primary" : "shard0000" }
foobar.foo
shard key: { "value" : "hashed" }
chunks:
shard0000 1
{ "value" : { "$minKey" : 1 } } -->> { "value" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0) 然而,有趣的是,如果我从一个空白集合开始,并在添加任何数据之前对其启用分片,结果会非常不同:
db.foo.stats();
{
"sharded" : true,
"ns" : "foobar.foo",
"count" : 4,
"numExtents" : 2,
"size" : 144,
"storageSize" : 16384,
"totalIndexSize" : 32704,
"indexSizes" : {
"_id_" : 16352,
"value_hashed" : 16352
},
"avgObjSize" : 36,
"nindexes" : 2,
"nchunks" : 4,
"shards" : {
"shard0000" : {
"ns" : "foobar.foo",
"count" : 1,
"size" : 36,
"avgObjSize" : 36,
"storageSize" : 8192,
"numExtents" : 1,
"nindexes" : 2,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 16352,
"indexSizes" : {
"_id_" : 8176,
"value_hashed" : 8176
},
"ok" : 1
},
"shard0001" : {
"ns" : "foobar.foo",
"count" : 3,
"size" : 108,
"avgObjSize" : 36,
"storageSize" : 8192,
"numExtents" : 1,
"nindexes" : 2,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 16352,
"indexSizes" : {
"_id_" : 8176,
"value_hashed" : 8176
},
"ok" : 1
}
},
"ok" : 1
}所以问题是,如果我共享一个现有的集合,我是否遗漏了什么?
发布于 2020-06-26 17:35:33
您需要输入db.collection.getShardDistribution()来查看数据块是如何划分的。
mongos> db.people.getShardDistribution()
Shard S1 at S1/localhost:47017,localhost:47018,localhost:47019
data : 32.37MiB docs : 479349 chunks : 1
estimated data per chunk : 32.37MiB
estimated docs per chunk : 479349
Shard foo at foo/localhost:27017,localhost:27018,localhost:27019
data : 67.54MiB docs : 1000000 chunks : 2
estimated data per chunk : 33.77MiB
estimated docs per chunk : 500000
Totals
data : 99.93MiB docs : 1479349 chunks : 3
Shard S1 contains 32.4% data, 32.4% docs in cluster, avg obj size on shard : 70B
Shard foo contains 67.59% data, 67.59% docs in cluster, avg obj size on shard : 70B谢谢,Neha
发布于 2013-08-23 17:51:10
目前,您只有一个很小的数据集,只有一个数据块。MongoDB将根据Migration Thresholds平衡您的数据-以便将平衡器的影响保持在最低限度。尝试添加更多数据:),平衡器将拆分您的数据,并随着时间的推移平衡数据块。
如果集合中没有数据,那么将为每个分片分配一定范围的块,这就是为什么在第二种情况下,您会看到跨分片的数据。
https://stackoverflow.com/questions/18397405
复制相似问题