7

次の状況があります。異なるサーバーに 2 つの mongodb インスタンスがあります。例えば

Mongodb instance on server "one" (host1:27017) with database: "test1"
Mongodb instance on server "two" (host2:27017) with database: "test2"

ここで、「host1:27017」の「test1」データベースを「host2:27017」の「test2」と同期する必要があります。

「同期」とは、次のことを意味します。

  1. 「test1」データベースの一部のコレクションが「test2」に存在しない場合、このコレクションは「test1」データベースに完全にコピーされます。

  2. コレクションの一部のレコードが「test2」データベースに存在しない場合は、追加する必要があります。それ以外の場合は更新されます。"test1" データベースの A コレクションにレコードが存在せず、"test2" データベースの A コレクションにレコードが存在する場合、"test2" からレコードを削除する必要があります。

ところでここで問題。例: "test1" データベースには、次のドキュメントを含むコレクション "A" があります。

{
 _id: "1",
 name: "some name"
}

「test2」データベースには、次のドキュメントを含むコレクション「A」があります。

{
 _id: "1",
 name: "some name"
}

{
 _id: "2",
 name: "some name2"
}

db.copyDatabase('test1', 'test2', "host2:27017") を実行すると、次のエラーが発生します。

"errmsg": "例外: E11000 重複キー エラー インデックス: test1.A.$ id重複キー : { : \"1\" }"

cloneDatabaseコマンドと同じ。どうすれば解決できますか?

一般に、データベースを同期する方法は何ですか? あるサーバーから別のサーバーにファイルをコピーするのが最も簡単な方法であることは知っていますが、もっと良い方法があるかもしれません。

助けてください。私はモンゴの新参者です。ありがとう。

4

2 に答える 2

1

私はこれを試していませんが、現在の MongoDB ドキュメントには、マスター/スレーブ レプリケーションと同等のレプリケーション セットが記載されています。

レプリカ セットを使用して同等のマスター/スレーブを展開する

レプリカ セットを使用してマスター/スレーブ レプリケーションに似たレプリケーション構成が必要な場合は、次のレプリカ構成ドキュメントを検討してください。このデプロイでは、ホストと 1が、2 つのインスタンスのマスター/スレーブ デプロイとほぼ同等のレプリケーションを提供します。

{
   _id : 'setName',
   members : [
              { _id : 0, host : "<master>", priority : 1 },
              { _id : 1, host : "<slave>", priority : 0, votes : 0 }
  ]
}

レプリカ セットの構成の詳細については、レプリカ セットの構成を参照してください。

于 2013-07-06T16:17:05.603 に答える