mongoDBにはシャーディング環境では動作しないクエリがある。なので、自分は開発用PC上のmongoDBもシャーディングの設定をしている。
しかし、ステージング環境等のmongoDBからmongodumpしてmongorestoreをするとシャーディング設定が消えてしまう(dropオプション付けている場合)。
データを引っこ抜いてくるたびにシャーディングの設定するのは面倒なので自動化している。以下の内容のシェルスクリプトを作成。mongo_sharding.sh などと適当に名前をつけて保存
#!/bin/bash COLS=`mongo LocalDatabaseName --quiet --eval "db.getCollectionNames().forEach(function(i){ print(i) });" | grep -v system` for i in $COLS do echo 'db.runCommand({ shardcollection: "LocalDatabaseName.'${i}'", key: { _id: 1}});' done
以下のコマンドで全てのコレクションにシャーディング設定が適用される。
$ ./mongo_sharding.sh | mongo admin
ここまで来たらついでにdump/restoreもスクリプトにしてしまおう。 mongorestore_from_stg.sh というスクリプトを作成。
#!/bin/bash mongodump -h our.staging.server -d StagingDatabaseName mongorestore -h localhost -d LocalDatabaseName --drop ./dump/StagingDatabaseName ./mongo_sharding.sh | mongo admin
終わり。
こういうのは1つのスクリプトにしないのが正解。