4

次のネットワーク/mongodbセットアップがあります:

  • 1 つのプライマリ mongodb データベース ( 10.0.0.1、インターネットからはアクセスできません) - コレクション A とコレクション B に個人情報が含まれ、信頼できるユーザーによって作成されたドキュメントがあります。任意の時点で、ユーザーはコレクション B 内の任意のドキュメントを「パブリック」としてマークできます。これにより、そのプロパティが から{'public':false}に変更され{'public':true}ます。

  • 1 つのパブリック mongodb データベース ( 10.0.0.2、リバース プロキシ経由でインターネットからアクセス可能な Web サーバーを実行) - コレクション A は含まれませんが、コレクション B からの「パブリック」としてマークされたすべてのドキュメントを含む必要があります。このマシンは、それらのパブリック ドキュメントを外部のユーザーに提供します。通信網。

10.0.0.1プライマリ データベース ( ) 内のドキュメントが で更新された{'public':true}ときに、パブリック mongodb データベース ( ) に複製されるように mongodb を設定するにはどうすればよい10.0.0.2ですか?

その他の詳細:

  • PHPドライバーを使用しています
  • ドキュメントは小さく、最大 2KB
  • これらのサーバーの負荷は、おそらく 10 人の同時ユーザーを超えることはありません
  • 結果整合性は数分までは問題ありませんが、オプションが何であるかを知りたいです。

繰り返しになりますが、使用例を次に示します。

John は私たちのプライベート ネットワークに VPN 接続し、 を開きhttp://10.0.0.1/、ドキュメントを作成し (それを と呼びますD2)、それをプライベートとしてマークします。その後、John は古いドキュメント を表示し、D1[公開する] ボタンをクリックして公開することにしました。サーバーは自動的にドキュメントをパブリック サーバーexample.com(パブリック IP x.y.z.w、内部 IP 10.0.0.2) で利用できるようにします。

ジョンはサラに電子メールを送信し、文書 D1 (公開された文書) を読むように依頼します。サラは に行き、http://example.com読むことはできますD1が、決して見ることはありませんD2

私の目標は、これら 2 つのデータベースを同期するためのスクリプトを手動で作成することなく、これを実現することです。可能だと思いますが、MongoDB レプリケーションについて読んだことからはわかりません。

アドバイスをお待ちしております。

ありがとうございました!

4

1 に答える 1

2

MongoDB(2.0.6以降)は、フィルター処理されたレプリケーションをサポートしていません。

ただし... MongoDBのoplogの調整可能なカーソルに基づいてレコードを更新する独自のスキームを実装できる場合があります。ローカルの上限付きコレクションは、レプリカセットのメンバーに変更を中継するために使用されるメカニズムと同じであり、挿入、削除、および更新の詳細が含まれます。oplog.rs

この手法の例については、このブログ投稿:MongoDBのトリガーの作成を参照してください。

あなたの場合、アクションは次のようになります。

  • で挿入または更新された場合は、コレクションAからBにレコードをコピーします。public:true
  • コレクションAでレコードが削除または更新された場合は、コレクションBからレコードを削除します。public:false
于 2012-07-09T05:02:24.430 に答える