5

オブジェクトのコレクションを含む開発サーバーがあります。これらのオブジェクトの実際の蓄積は進行中のプロセスであり、このローカル開発サーバーでラベル付け、検証などのプロセス全体を実行します。これらのオブジェクトは本番環境で使用できるようになると、本番データベースに追加され、その瞬間から計算に使用されます。

他のすべてのコレクションと同じコレクション内の古いオブジェクトをそのまま保持しながら、デルタ (新しいオブジェクト) を本番 DB に単純に追加する方法を探しています。これまでは MySql を使用していたため、このプロセスでは DB 構造の実行とデータ同期が必要でした (そのために Navicat を使用しました)。現在、MongoDB に移行しているため、このプロセスは少し複雑です。

私はこれを調べましたが、次の解決策は私のニーズに合わないと思います:

  1. dev DB をダンプし、 thenを使用して Production DB にロードするmongodumpmongorestore
  2. 実行中db.copyDatabase- 実際には運用データベースを開発 DB のコピーに置き換えます。

どちらのソリューションも、既存のコレクション内のオブジェクトを更新するだけの場合に、実際には Production DB を置き換えるため、問題があります。また、Dev => Production に移行すると、Master-Slave トポロジーに適合しません。

私が考えることができる最善のことは、次のことです。

  1. dev DB を本番インスタンスの「dev」DB にコピーします。
  2. この開発用 DB から実際の運用 DB にコレクションをコピーし、このソリューションと同様に、運用 DB に存在しないオブジェクトのみを追加するという述語を追加します。

誰かがより良い解決策を持っているかどうか疑問に思っていましたか?

そうでない場合、これを実行できるスクリプトを持っている人はいますか?

4

3 に答える 3

1

@Orid、ご回答ありがとうございます。返信が遅れて申し訳ありません。

多くの調査と試行錯誤の後、質問に記載されている解決策を使用することにしました (テスト DB をマシンにコピーし、コレクションを 1 つずつコピーします)。これは、ここで使用しているデータが静的データであり、タイムスタンプを持つ本当の理由がないためです。また、「更新のみ」の要件を放棄することにしたので、今のところmongorestoreを使用しています--drop

私はこのスクリプトを使用してこれをすべて行います:

  1. シェル スクリプト ファイル:

rm -rf dump/;

mongo copyTestDb.js;

for COLLECTION in <Collections>
do
mongodump -d nutrino_copy -c $COLLECTION -o dump
mongorestore -d nutrino -c ${COLLECTION} --drop dump/nutrino_copy/${COLLECTION}.bson
done
  1. js スクリプト ファイル:

    db.copyDatabase("<dbName>","<dbName_Copy>","<testMachineUrl>")

MongoRestore の代わりに MongoImport を使用する必要があると思いますか?

于 2013-08-12T12:58:05.743 に答える
0

mongo-sync をチェックしてください


MongoDBこれは、ローカルデータベースをプロジェクトの本番 DB との間で常にコピーしなければならなかったときに、自分用に作成したスクリプトです(ばかげていることはわかっています)。

DB の詳細をconfig.ymlに入力したら、次の 2 つの簡単なコマンドを使用して同期を開始できます。

./mongo-sync push       # Push DB to Remote
./mongo-sync pull       # Pull DB to Local

プロジェクト内で使用する場合は、追加することconfig.ymlをお勧めします.gitignore


mongo-sync デモ gif

于 2015-02-15T00:27:31.137 に答える