MongoDB コレクションの変更をリッスンするにはどうすればいいですか? 質問する

MongoDB コレクションの変更をリッスンするにはどうすればいいですか? 質問する

MongoDB をデータ ストアとして使用して、バックグラウンド ジョブ キュー システムのようなものを作成しています。ジョブを処理するワーカーを生成する前に、MongoDB コレクションへの挿入を「リッスン」するにはどうすればよいでしょうか。

前回から変更があったかどうかを確認するために数秒ごとにポーリングする必要がありますか、それともスクリプトが挿入が行われるのを待つ方法がありますか?

これは私が取り組んでいる PHP プロジェクトですが、Ruby や言語にとらわれない言語でもお気軽に回答してください。

ベストアンサー1

あなたが考えているのはトリガーによく似ています。MongoDB はトリガーをサポートしていませんが、いくつかのトリックを使って「独自に作成」した人もいます。ここでの鍵となるのは oplog です。

レプリカ セットで MongoDB を実行すると、すべての MongoDB アクションが操作ログ (oplog と呼ばれる) に記録されます。oplog は基本的に、データに加えられた変更の実行リストです。レプリカ セットは、この oplog の変更をリッスンし、変更をローカルに適用することで機能します。

聞き覚えがありますか?

ここでプロセス全体を詳しく説明することはできません。ドキュメントは数ページにわたりますが、必要なツールは利用可能です。

まず、oplog についていくつか説明します -簡単な説明-コレクションのレイアウトlocal(oplog を含む)

また、 tailable cursors を活用することもお勧めします。これにより、変更をポーリングするのではなく、変更をリッスンする方法が提供されます。レプリケーションでは tailable cursors が使用されるため、これはサポートされている機能であることに注意してください。

おすすめ記事