[解決済み】MongoDB コレクションの変更をリッスンする方法は?
2022-04-10 17:44:58
質問
MongoDBをデータストアとして、ある種のバックグラウンド・ジョブ・キュー・システムを構築しています。ワーカーを起動してジョブを処理する前に、MongoDB コレクションへの挿入を listen" するにはどうしたらよいでしょうか?
数秒ごとにポーリングして前回からの変更があるかどうかを確認する必要がありますか、それとも私のスクリプトで挿入が発生するのを待つ方法がありますか?
これは私が取り組んでいるPHPのプロジェクトですが、Rubyや言語にとらわれずに自由に回答してください。
どのように解決するのですか?
MongoDBには、以下のようなものがあります。
capped collections
と
tailable cursors
で、MongoDBがリスナーにデータをプッシュできるようにします。
A
capped collection
は、基本的にサイズが固定で、挿入のみが可能なコレクションです。作成方法は以下の通りです。
db.createCollection("messages", { capped: true, size: 100000000 })
MongoDB 利用可能カーソル ( Jonathan H. Wageによるオリジナル投稿 )
ルビー
coll = db.collection('my_collection')
cursor = Mongo::Cursor.new(coll, :tailable => true)
loop do
if doc = cursor.next_document
puts doc
else
sleep 1
end
end
PHP
$mongo = new Mongo();
$db = $mongo->selectDB('my_db')
$coll = $db->selectCollection('my_collection');
$cursor = $coll->find()->tailable(true);
while (true) {
if ($cursor->hasNext()) {
$doc = $cursor->getNext();
print_r($doc);
} else {
sleep(1);
}
}
パイソン (by ロバート・スチュワート)
from pymongo import Connection
import time
db = Connection().my_db
coll = db.my_collection
cursor = coll.find(tailable=True)
while cursor.alive:
try:
doc = cursor.next()
print doc
except StopIteration:
time.sleep(1)
パール (by マックス )
use 5.010;
use strict;
use warnings;
use MongoDB;
my $db = MongoDB::Connection->new;
my $coll = $db->my_db->my_collection;
my $cursor = $coll->find->tailable(1);
for (;;)
{
if (defined(my $doc = $cursor->next))
{
say $doc;
}
else
{
sleep 1;
}
}
その他のリソース
Ruby/Node.js チュートリアルでは、MongoDB のキャップされたコレクションへの挿入をリッスンするアプリケーションの作成方法を説明します。
関連
-
[解決済み】MongoDBデータベースの名前を変更する方法とは?
-
[解決済み】MongoDBシェルですべてのコレクションを一覧表示するには?
-
[解決済み] MongoDBでフィールドが存在することを確認する
-
[解決済み] 同じデータベース内でコレクションをコピーする最も速い方法は何ですか?
-
[解決済み] 配列フィールドが空でない MongoDB レコードを検索する
-
[解決済み] MongoDB: 1つのコマンドで複数のドキュメントを更新するには?
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] コマンドラインからMongoDBデータベースを削除する方法を教えてください。
-
[解決済み] mongodbの最後のN個のレコードを取得する方法は?
-
[解決済み] MongoDB コレクションのすべてのドキュメントに新しいフィールドを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MongoDB の重複レコードを検索する
-
[解決済み] Mongodb: ensureIndex をいつ呼び出すか?
-
[解決済み] 同じデータベース内でコレクションをコピーする最も速い方法は何ですか?
-
[解決済み] mongod.serviceの再起動に失敗しました。ユニット mongod.service が見つかりませんでした
-
[解決済み] mongodb サーバーに接続しようとすると、mongo コマンドが認識されません。
-
[解決済み] or' 条件を含む MongoDB クエリ
-
[解決済み】シェルスクリプトでmongoのコマンドを実行するには?
-
[解決済み] MongoDB SELECT COUNT GROUP BY
-
[解決済み】MongoDBで整数を挿入しようとすると、浮動小数点が挿入される。
-
[解決済み] MongoDB がすべてのクエリをログに記録する