mongoDB分片示例

时间:2011-12-18 13:55:53

标签: mongodb

在Windows上使用mongo 2.0.1 32位的新手尝试按如下方式测试分片:

(4)进程:2个分片+配置srver + mongos w tiny chunksize

mongod.exe --shardsvr  --port 10001  --dbpath <folder1>       > shard1.log
mongod.exe --shardsvr  --port 10002  --dbpath <folder2>       > shard2.log
mongod.exe --configsvr --port 20000  --dbpath <configfolder>  > config.log
mongos.exe --configdb localhost:20000 --chunkSize 1           > mongos.log

我运行了shell并设置了2个分片:

mongos> use admin
switched to dbadmin

mongos> db.runCommand( { addshard : "localhost:10001" } );
{ "shardAdded" : "shard0000", "ok" : 1 }

mongos> db.runCommand( { addshard : "localhost:10002" } );
{ "shardAdded" : "shard0001", "ok" : 1 }

然后我为测试数据库(dbTest)和集合(cTest)启用了分片:

mongos> db.runCommand( { enablesharding  : "dbTest" } );
{ "ok" : 1 }

mongos> db.runCommand( { shardcollection : "dbTest.cTest", key : { Name : 1 } } );
{ "collectionssharded" : "dbTest.cTest", "ok" : 1 }

最后,我使用1,000,005个样本记录填充了cTest集合(由Name索引):

mongos> use dbTest
switched to db dbTest

db.cTest.drop();
db.cTest.ensureIndex({ Name : 1 });
db.cTest.save({Name: "Frank", Age:56, Job: "Accountant", State: "NY"});
db.cTest.save({Name: "Bill" , Age:23,                    State: "CA"});
db.cTest.save({Name: "Janet", Age:34, Job: "Dancer"                 });
db.cTest.save({Name: "Andy",  Age:44                                });
db.cTest.save({Name: "Zach",  Age:23, Job: "Fireman",    State: "CA"});
i=1;
while(i<=1000) 
{ 
  j=1;
  while (j<=1000) 
  { 
    db.cTest.save({Name:"Person("+i+","+j+")", Age:i+j}); 
    j = j+1
  }; 
  i=i+1; 
};

但是......

看来实际上没有任何分片。在配置数据库中,db.chunks.count()为零,我可以从Windows资源管理器文件大小看到所有数据都进入第一个分片的物理文件设置设置,而没有进入第二个分片。

任何人都可以发现我做错了什么,并提供了一些关于如何管理&amp;调试这种类型的东西&amp;看看发生了什么?

由于

1 个答案:

答案 0 :(得分:5)

一旦你“shardcollection”,请不要删除它。它将删除有关分片收集的元数据。