web-dev-qa-db-ja.com

mongoexportまたはmongodumpでバックアップしますか?

本番環境のバックアップでは、MongoDBはデータの正確性のために mongoexport ではなく mongodump を推奨します。ただし、バックアップする前に、MongoDBデータベースからデータを「スクラブ」する必要があります。 mongoexport以外のサーバー側のデータスクラブオプションは知りません。 2つの質問:

  1. mongoexportはRAMのMongoDBキャッシュにアクセスしますか? RAMmongodumpのように)ワーキングセットを変更しますか?
  2. mongodumpコマンドには、この -query オプションがあります。 "mongodumpの出力に含まれるドキュメントをオプションで制限するクエリとしてJSONドキュメントを提供します。"ドキュメント内の特定のフィールドを除外するためにクエリは必要ですか?
9
Howard Lee

最初の質問への回答として、両方のツール(デフォルト)は_idインデックスを使用してデータをフェッチし、ディスクに書き込みます。したがって、はい、どちらのツールも同様にワーキングセットに影響を与えます。そのため、通常はセカンダリ(できれば非表示のセカンダリ)に対して実行することをお勧めします。私はここのコメントでStennieをエコーし​​、大量のデータを扱う場合は他のバックアップ方法をお勧めします。

2番目の質問について、私はあなたがmongodumpに相当する --fields 特定のフィールドのみをダンプするmongoexportのオプション。 クエリオプション は結果のフィルタリングに使用できますが、プロジェクションでは使用できません(返されるフィールドを選択するため)-これは TOOLS-28で追跡されている機能リクエストです ですが、まだスケジュールされていません。 Stennieも述べたように、ここでのもう1つのオプションは、ニーズに合ったカスタムエクスポーターを作成することです(ここでも、ワーキングセットを保護するためにセカンダリに対して実行することをお勧めします)。

6
Adam C
  1. (ごめん、知らない)

  2. -queryは、フィールドではなく、ドキュメント全体を選択または除外します。

しかしそれは良い考えでしょう:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodumpはbsonファイル構造を使用し、はデータタイプを保存しますMongoexportは、値のデータ型を失います。 NumberLong( "1431677405876")などは1431677405876にのみ変換されます。MongoDBにインポートする必要がある場合は、mongodumpが推奨されます。
6
aldwinaldwin

Mongoexportは実際には型を保持しますが、データを不整合にします。 IntsとLongsを使用してフィールドをエクスポートする場合は、フィールドをそれぞれNumbersおよびJSONオブジェクトとしてエクスポートするため、将来はさらに難しくなる可能性があります。

「厳密モード。BSONタイプの厳密モード表現は、JSON RFCに準拠しています。どのJSONパーサーも、これらの厳密モード表現をキー/値のペアとして解析できます。ただし、MongoDBの内部JSONパーサーだけが、フォーマットによって伝えられるタイプ情報を認識します。」

https://docs.mongodb.com/manual/reference/mongodb-extended-json/

0
lf2225