Q:テストと開発のためのライフコピーに最適なアーキテクチャはどれですか?
現在の設定:
次のような2つのamazon/EC2mongodサーバーがあります。
Machine A:
A production database (on an amazon/EC2 server) (name it ‘PROD’)
Other databases (‘OTHER’)
Machine B:
a pre-production database (name it ‘PRE’)
a copy for developer 1 own tests (call it ‘DEVEL-1’)
a copy for developer 2 (DEVEL-2)
…DEVEL-n
PREデータベースは、本番環境にデプロイする前の統合テスト用です。
DEVEL-nは、他の開発者を煩わせることなく、各開発者が自分のデータを破棄するためのものです。
時々、PRODからPREおよびDEVEL-nベースに新しいデータを「復元」したいと考えています。
現在、.copyDatabase()コマンドを介してPRODからPREに渡しています。次に、.copyDatabase()を「n」回発行して、PREからDEVEL-nにコピーを作成します。
トラブル:
コピーには非常に長い時間がかかり(コピーあたり1時間、DBsizeが10GBを超える)、通常はMongodが飽和状態になるため、サービスを再起動する必要があります。
私たちは次のことを発見しました:
- ダンプ/復元システム(.copyDatabase()のように飽和します)
- レプリカセット
- マスター/スレーブ(非推奨のようです)
レプリカセットが勝者のようですが、深刻な疑問があります。
レプリカセットでライブA/PRODをB/PREに同期する必要があるとします(Aはプライマリであり、Bはセカンダリである可能性があります)。
a)PRODを複製するためにAから「いくつかの」データベースを選択できますが、OTHERはそのままにしておきますか?
b)マスターにない「追加の」データベース(DEVEL-nなど)をBに含めることはできますか?
c)PREにデプロイし、新しいデータでソフトをテストし、テストでデータを破棄し、テストが完了した後、レプリカを「再リンク」してPREの変更を削除し、 PRODの変更はPREに適切に転送されますか?
d)この場合に適したレプリカセット以外のより良い方法はありますか?
ありがとう。マリーナとシャビ。