MongoDB Tailable Cursors


MongoDB Tailable CursorsMongoDBには、tail-fコマンドと同様にTailable Cursorsという特性があります.Capped Collectionの上でクエリー操作を実行し、操作が完了したら、戻ってきたデータCursorを閉じずに、新しく追加したデータを継続的に読み出すことができます.高書き込みのCapped Collectionでインデックスが使用できない場合は、Tailable Cursorsを使用します.たとえば、MongoDBレプリケーションでは、Primaryの末尾oplogログを取得するためにTailable Cursorsが使用されます.Tailable Cursorsに関連する次の動作を考慮します.
  • Tailable Cursorsはインデックスを使用せず、ドキュメントを自然な順序で返します.
  • Tailable Cursorsはインデックスを使用しないため、クエリの初期スキャンは非常にパフォーマンスを消費します.ただし、カーソルの初期化が完了すると、新しく追加されたドキュメントが取得されます.
  • Tailable Cursorsは、次のいずれかの場合、硬直または無効になります.
  • クエリーに一致する結果がありません.
  • カーソルは、コレクションの最後にドキュメントを返し、アプリケーションがドキュメントを削除します.


  • 硬直したカーソルidは0です.
    DBQuery.Option.awaitData TailableCursorを使用する場合、このパラメータは、データの読み取りが終了したときに一時的にブロックされた後に読み返します.トレースoplogの例
    use local
    var cursor = db.oplog.rs.find({"op" : "u", "ns" : "MyDB.Product"},{"ts": 1, "o2._id": 1}).addOption(DBQuery.Option.tailable).addOption(DBQuery.Option.awaitData);
    while(cursor.hasNext()){
        var doc = cursor.next();
        printjson(doc);
    };

    2.6版のカーソル方法:cursor.addOption()https://docs.mongodb.com/v2.6/reference/method/cursor.addOption/3.2バージョンのカーソルメソッド:cursor.tailable()https://docs.mongodb.com/manual/reference/method/cursor.tailable/