MongoDB(Perlクライアント)でtailable Cursorを使う
tailable Cursorを使う為にはcappedコレクションである必要がある模様なので
db.createCollection("samples", { capped: true, size: 4096 })
sizeは最小値が4096なんだとか。検証してないから事実かは不明ですけど、でcappedコレクションはあくまでLRUなコレクションでオプションによって指定されたサイズを超えたりした場合には古いのから削除されていく模様
でtailable Cursorを使う事で"tail -f"のような動作を実現する事が可能らしい。という事でやってみる
db.samples.save({ name: "hoge" })
適当に突っ込んでおく。でPerlでtailable Cursorを使うスクリプトを書く
use MongoDB;
use Data::Dumper;
my $mdb = MongoDB::MongoClient->new;
my $db = $mdb->get_database("sample");
my $csr = $db->get_collection("samples")->find;
$csr->tailable(1);
while (1) {
while (my $row = $csr->next) {
warn Dumper $row;
}
}
まぁ起動しておくと
初期状態で格納しているデータは普通に表示される。で起動したままmongoで
db.samples.save({ name: "fuga" })
と追加して、画面を見ると
という風にDumpが増えてる。という感じで更新されたのをポインタとして取得して"tail -f"な事をやろうと思うのであればcappedコレクションとtailable Cursorを用いる事で可能な模様