Hatena::ブログ(Diary)

ursmの日記

2010-09-22

Tailable Cursors を試してみた

http://www.mongodb.org/display/DOCS/Tailable+Cursors

tail -f みたいなカーソル」だそうな。

Tailable Cursor が使えるのは Capped Collection だけらしい。Capped Collection はサイズに上限があるコレクションで、上限に達すると古いドキュメントから消えていく。挿入順で読み出せることが保証されている (普通のコレクションは保証されない)。

まず Capped Collection を作る。MongoDB だと明示的にコレクションを作る場面はほとんどないんだけど、Capped Collection を作るときは必要になる。

>> require 'mongo'
>> col = Mongo::Connection.new.db('test').create_collection('capped', :capped => true, :size => 10000)

Tailable Cursor を作る。

>> cur = Mongo::Cursor.new(col, :tailable => true)

適当に書いたり読んだりしてみる。

>> col.insert(:i => 1)
>> col.insert(:i => 2)
>> cur.next_document
=> {"_id"=>BSON::ObjectId('4c98da42ad7d212878000001'), "i"=>1}
>> cur.next_document
=> {"_id"=>BSON::ObjectId('4c98da45ad7d212878000002'), "i"=>2}
>> cur.next_document
=> nil
>> col.insert(:i => 3)
>> cur.next_document
=> {"_id"=>BSON::ObjectId('4c98da53ad7d212878000003'), "i"=>3}

カーソルがコレクションの終端に達しても、新しいドキュメントが挿入されると続けて読めるということみたい。終端で next_document したときにブロックしてくれればキューとして使えそうなんだけどな。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/ursm/20100922/1285086808
Connection: close