我在用於測試MongoDB副本和分發的測試環境中有4個服務器: RepSetA包含RepSetA1和RepSetA2。 RepSetB保存RepSetB1和RepSetB2。 所有服務器充當路由器,RepSetA1充當單個配置服務器。MongoDB將數據複製到所有分片
我有一個「播放器」數據(10,000條記錄,該對象包含一個「Id」和「Name」字段),我希望它在副本集之間被分片(或分佈),並克隆服務器在同一副本集中。所以,只是一個簡單的例子: Player1-5000:存在於RepSetA1和RepSetA2中,但不存在於RepSetB1和RepSetB2中。 Player5000-10000:存在於RepSetB1和RepSetB2中,但不存在於RepSetA1和RepSetA2中。
我得到的是所有4個服務器中的所有玩家。
如果我打印了分片狀態,我得到如下:
mongos> db.printShardingStatus();
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "RepSetA", "host" : "RepSetA/MongoRepSetA1:27018,MongoRepSetA2:27018" }
{ "_id" : "RepSetB", "host" : "RepSetB/MongoRepSetB1:27018,MongoRepSetB2:27018" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "GamesDB", "partitioned" : true, "primary" : "RepSetA" }
GamesDB.Player chunks:
RepSetA 2
{ "_id" : { $minKey : 1 } } -->> { "_id" : 0 } on : RepSetA { "t" : 1000, "i" : 1 }
{ "_id" : 0 } -->> { "_id" : { $maxKey : 1 } } on : RepSetA { "t" : 1000, "i" : 2 }
{ "_id" : "test", "partitioned" : false, "primary" : "RepSetB" }
{ "_id" : "EOO", "partitioned" : false, "primary" : "RepSetB" }
我用下面的命令來構建碎片:
db.adminCommand({ addShard : "RepSetA/MongoRepSetA1:27018,MongoRepSetA2:27018" })
db.adminCommand({ addShard : "RepSetB/MongoRepSetB1:27018,MongoRepSetB2:27018" })
db.runCommand({ enablesharding : "GamesDB" });
db.runCommand({ shardcollection : "GamesDB.Player", key : { _id :1 } , unique : true});
我在做什麼錯?
您是如何查詢哪些玩家存在於哪個分片上的? –
使用MongoVue GUI,甚至嘗試連接到特定的服務器並執行「db.Player.find()。limit(100);」 – nirpi