なるようにしかならん

そういうことです

mongoDBでshardingしてみる

ホントはreplicaSet設定してやりたかったんだけど妥協してごめんなさい。


基本的なshardの設定は以下の通り。
http://www.mongodb.org/pages/viewpage.action?pageId=5538005
それぞれのshardサーバーは1台で、3shardの構成。
mongosとconfigサーバーは同居。


で、chunkのサイズが大きいと分割されんのではと思ったので、mongosの起動オプションに「--chunkSize 1」を追加。
これでchunkの分割が増えるはず。


突っ込むデータは次のような形式のものを100万件くらい。

{"id":50,"userId":"hoge_user","attri":"follower"}

id:連番
userId:Stringで適当なユーザーID的なもの。重複なし。
attri:属性値。Stringで5パターンほど。重複あり。


で、userIdをshardkeyに指定。

use admin
db.runCommand({shardcollection:"foo.Users",key:{userId:1}, unique:true});

って感じで。

で、突っ込んでみたんだけど、結果は以下。

> db.printShardingStatus();

      • Sharding Status ---

sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "shard0000", "host" : "(IP割愛):27018" }
{ "_id" : "shard0001", "host" : "(IP割愛):27018" }
{ "_id" : "shard0002", "host" : "(IP割愛):27018" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "foo", "partitioned" : true, "primary" : "shard0000" }
foo.Users chunks:
{ "userId" : { $minKey : 1 } } -->> { "userId" : "0-----------3" } on : shard0001 { "t" : 2000, "i" : 0 }
{ "userId" : "0-----------3" } -->> { "userId" : { $maxKey : 1 } } on : shard0000 { "t" : 2000, "i" : 1 }
{ "_id" : "test", "partitioned" : false, "primary" : "shard0000" }
>

ってことでこれだとchunkは2つ?にしか別れてないってことなんだろうか。



動きとして正しいのか気になるけど、このデータで参照周りの負荷も検証してみようと思います。