3

DerbyJS、Racer、MongoDBを使用してログビューアーを開発しようとしています。ログは別のソースによってMongoDBデータベースに継続的に挿入され、ログビューアーはユーザーインターフェイスのログテーブルを自動的に更新できるはずです。

次のようなMongoDBイベントをネイティブに聞く方法があるかどうか疑問に思いました。

 - On update
 - On delete

これらは、たとえば、OracleDBトリガーに似ています。

4

3 に答える 3

9

、、、およびmongodbの他のデータイベントなどのイベントは、という名前の特別なコレクションを使用してinsert聞くことができます。またはを使用して、dbインスタンスでレプリケーションを有効にする必要があります。updateoplogmongod --mastermongod --replicaSet

Oplogは実際には、レプリケーションを実装するためにmongodbによって内部的に使用される上限付きコレクションです。マスター/スレーブレプリケーションを使用している場合は、という名前のコレクションが見つかります。oplog.$mainレプリカセットを使用している場合は、という名前になりますoplog.rs

oplogで調整可能なカーソルを使用できます。これは機能するはずです。

Oplogは、事実上、ログ自体です。したがって、ロギングの目的でそれらを個別に保存する必要がない場合があります。ただし、そのサイズは固定されています。完全な古いデータが削除されることを意味します。

またlocal、oplogが維持されているデータベースを調べていることを確認してください

これはmongoskinwikiページからの実例です

skin = require "mongoskin"
db = skin.db "localhost:27017/local"

#//Cursor on oplog (a capped collection) which maintains a history for replication
#//oplog can be used only when replication is enabled
#//Use oplog.rs instead of oplog.$main if you are using replica set

oplog = db.collection "oplog.$main"
cursor = oplog.find({'ns': "icanvc.projects"},{tailable: yes, awaitData: yes})

#//Using cursor.nextObject will be slow
cursor.each (err, log)->
    console.error err if err
    console.log log if not err
于 2012-09-13T11:20:35.080 に答える
4

ログビューアアプリケーションへの一般的なアプローチは、ログエントリの上限付きコレクションで調整可能なカーソルを使用することです。

于 2012-08-05T14:38:07.740 に答える
1

いいえ、https://jira.mongodb.org/browse/SERVER-124アプリケーション側である必要があります。

node.jsのドライバー内にMongoDBのトリガーが組み込まれているかどうかはわかりませんが、おそらくそうではないため、これを自分でコーディングする必要があります。

于 2012-08-05T14:32:26.370 に答える