shardingとは: Shard(database_architecture)
mongoのシャーディング: Sharding
はじめにデータベース起動(とりあえず3つ)
mongod --dbpath=d:\xampp\mongodb\data\shard1 --port 28017mongod --dbpath=d:\xampp\mongodb\data\shard2 --port 28018mongod --dbpath=d:\xampp\mongodb\data\shard3 --port 28019
コンフィグサーバ起動
mongod --configsvr --port 28099 --dbpath=d:\xampp\mongodb\data\config
ルーティングプロセス起動
(デフォルトチャンクサイズは200MBだけど、テストのために3MBに指定)
mongos --configdb localhost:28099 --port 28100 --chunkSize 3
ここまでで、サーバ群起動完了。
次に、shardingの設定をする。
mongo起動、adminデータベースに接続
D:\xampp\mongodb\bin>mongo localhost:28100/admin
MongoDB shell version: 2.0.3
connecting to: localhost:28100/admin
shardサーバ追加
mongos> db.runCommand({addshard:"localhost:28017"});
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> db.runCommand({addshard:"localhost:28018"});
{ "shardAdded" : "shard0001", "ok" : 1 }
mongos> db.runCommand({addshard:"localhost:28019"});
{ "shardAdded" : "shard0002", "ok" : 1 }
ステータス確認
mongos> db.rintShardingStatus();
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "shard0000", "host" : "localhost:28017" }
{ "_id" : "shard0001", "host" : "localhost:28018" }
{ "_id" : "shard0002", "host" : "localhost:28019" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
mongos>
shardキーを指定
mongos> db.runCommand({shardcollection:"test.test",key:{userid:1}});
{ "ok" : 0, "errmsg" : "sharding not enabled for db" }
おこられた(><)
データベースにsharding許可を指示
mongos> db.runCommand({enablesharding:"test"});
{ "ok" : 1 }
再度挑戦
mongos> db.runCommand({shardcollection:"test.test",key:{userid:1}});
{ "collectionsharded" : "testdb.test", "ok" : 1 }
ていうか、これ、コレクション単位でshardできるのか。すごい柔軟。
ルーティングサーバに接続して、テストデータ投入。
D:\xampp\mongodb\bin>mongo localhost:28100
MongoDB shell version: 2.0.3
connecting to: localhost:28100/test
mongos>
100万件くらい、いれればいいかな。
mongos> for(var i =0; i<1000000; i++) {
... var doc = {userid:i, name:"user"+i};
... db.test.save(doc);
... }
状況確認
mongos> db.runCommand({addshard:"localhost:28017"});db.printShardingStatus();
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "shard0000", "host" : "localhost:28017" }
{ "_id" : "shard0001", "host" : "localhost:28018" }
{ "_id" : "shard0002", "host" : "localhost:28019" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "testdb", "partitioned" : true, "primary" : "shard0000" }
{ "_id" : "test", "partitioned" : true, "primary" : "shard0000" }
test.test chunks:
shard0000 8
shard0001 7
shard0002 14
too many chunks to print, use verbose if you want to force print
状況確認2
mongos> db.test.count();
1000000
100万件はいってる。
接続先を個別のデータベースに変えて確認
D:\xampp\mongodb\bin>mongo localhost:28017
MongoDB shell version: 2.0.4
connecting to: localhost:28017/test
> db.test.count();
162515
D:\xampp\mongodb\bin>mongo localhost:28018
MongoDB shell version: 2.0.4
connecting to: localhost:28018/test
> db.test.count();
171400
D:\xampp\mongodb\bin>mongo localhost:28019
MongoDB shell version: 2.0.4
connecting to: localhost:28019/test
> db.test.count();
666085
合計100万件はいってる。ナイス。
というわけで、MongoDB編おしまい。
かねこ( ;∀;)