MongoDBで自動chunk分割がされなくてはまる

あるcollectionで以下のようにembeddedのキーをShardKeyに指定していてchunk分割されなかったのが事の発端。

test01.table01 chunks:
       shard01 1
       { "hoge" : { $minKey : 1 }, "map.key" : { $minKey : 1 } } -->> { "hoge" : { $maxKey : 1 }, "map.key" : { $maxKey : 1 } } on : shard01 { "t" : 1000, "i" : 0 }


embeddedがいけないのかなーと思ってembeddedをやめてみました。
StringとLongが混在するフィールドpiyoを作って、hogeとpiyoの複合ShardKeyに変更。
しかしデータを詰めども詰めどもchunk分割が発生しない。なんぞ。
embeddedも型の混在もだめなのかなーと思ってMongoDBのグループとか見てもそれっぽいのが出てこない。
mongosとconfigサーバ再起動とかしても上手くいかない。
とりあえずsharding構築し直しとか色々やってみるかーと思い、データ作り直すのも面倒なのでdump→drop→restoreを実施。


…分割されている…!!


つまりembeddedとか型の混在とか関係ないのか。データの入れ方に問題があるのか。
初心に帰ってちょっとChunk分割のドキュメントを見てみます。
Log In - MongoDB Wiki

Normally, splitting chunks is done automatically for you. Currently, the splits happen as a side effect of inserting (and are transparent).
In the future, there may be other cases where a chunk is automatically split.

えっ。
純粋なinsertでしか発生しない?えっ。
確かにこのcollection、データの追加はupdateのupsert:trueでしかやってない。えっ。
そういうこと?そういうことなの?


ためしにupdateのままで本来chunk分割されるサイズまでデータを入れ直し、やっぱり分割されないことを確認したのち適当にinsertしたら分割されました。
ああー。あああー。


出来る限りupdateを使いたいので止む無くたまーにinsertをする形で対応しました。
運にもよるけど今のところ割とまともに分割は走っているのでとりあえずよかった。
futureが来い。

スポンサーリンク