2011-07-12 14 views
3

私はデータベースMongoDBで作業しています。リソースの消費量が多いため(100GB近くのデータセットで作業するため)、文書のフィールド名を小さくする必要があります( "ALTER TABLE" )。MongoDB - 文書構造の変更

これを行うには簡単/自動ではありますか?

答えて

6

だと思います!

http://www.mongodb.org/display/DOCS/Updating#Updating-%24rename

$rename Sの束と、クエリを使用して設定してデータの update()を実行し、私はそれが何をしたいあなたを取得すると思う: $renameをチェックしてください。

+1

これは探していたものです。どうもありがとうございました! –

4

これを行うための組み込みの方法はありませんが、目的の言語でスクリプトを記述することができます。もう1つの選択肢は、文書にアクセスするときに短いフィールド名を使用するように文書を書き直すようにアプリケーションコードを更新することです。これは、ダウンタイムやスクリプトとアプリケーションコードの調整を必要としないという利点があります。

フィールド名を縮小しても、データセットは同じサイズのままです - MongoDBはドキュメントを「周り」に残して、ドキュメントを適切な位置に更新します。ワーキングセットのサイズ。これは、新しい文書に合わせるのに十分な空き容量があれば、文書が大きくなるとInMemoDBがインプレースで更新されるため、文書が大きくなることが予想される場合に便利です。

また、repairDatabaseコマンドを使用すると、データセットが縮小されます。 repairDatabaseは非常に遅く、かなりの空きディスク容量が必要です(データベース全体のフルコピーを作成する必要があります)。 repairDatabaseはデータベース全体をロックするので、スケジュールされたメンテナンスウィンドウで実行する必要があります。

最後に、バージョン1.9以降を使用している場合は、compactコマンドを使用できます。 compactは、repairDatabaseよりも少ない空き容量が必要です(追加の2ギガバイトのディスクスペースが必要です)。また、一度に1つのコレクションでのみ動作します。 compactは、repairDatabaseと同じ方法でデータベースをロックし、メンテナンスウィンドウでの圧縮のスケジュール設定に関する同じ警告が適用されます。

+2

レプリカセットを使用すると、ダウンタイムなしでこれを実行できます。 –

+0

ありがとうございました。 – dcrosta

+0

ありがとうございます。私はコンパクトについて聞いたことがない、それも試してみる:-) –

関連する問題