2013-03-15 mongodb
ログを MongoDB のコレクションにぶっこみたいけどローテイトすんのめんどくさいなあって思ってたら、コレクション作るときに最大バイト数や最大要素数を指定できた。
> db.createCollection("access_log", { capped:true, size:1000000, max:5 }); { "ok" : 1 } capped : コレクションを固定サイズにするかどうか。 size : 確保するバイト数。capped が true 時に有効。 max : コレクション内に格納できる最大の要素数。capped が true 時に有効。 (via http://docs.mongodb.org/manual/core/capped-collections/)
とりあえず max:5 を指定して、5要素ぶっこんでみる。
> db.access_log.insert( { id:1, text:"aaa" } ); > db.access_log.insert( { id:2, text:"bbb" } ); > db.access_log.insert( { id:3, text:"ccc" } ); > db.access_log.insert( { id:4, text:"ddd" } ); > db.access_log.insert( { id:5, text:"eee" } ); > db.access_log.find(); { "_id" : ObjectId("5142b83e3032587e681dc2e5"), "id" : 1, "text" : "aaa" } { "_id" : ObjectId("5142b8413032587e681dc2e6"), "id" : 2, "text" : "bbb" } { "_id" : ObjectId("5142b8443032587e681dc2e7"), "id" : 3, "text" : "ccc" } { "_id" : ObjectId("5142b8463032587e681dc2e8"), "id" : 4, "text" : "ddd" } { "_id" : ObjectId("5142b8493032587e681dc2e9"), "id" : 5, "text" : "eee" }
で、6要素目をぶっこむと、
> db.access_log.insert( { id:6, text:"fff" } ); > db.access_log.find(); { "_id" : ObjectId("5142b8413032587e681dc2e6"), "id" : 2, "text" : "bbb" } { "_id" : ObjectId("5142b8443032587e681dc2e7"), "id" : 3, "text" : "ccc" } { "_id" : ObjectId("5142b8463032587e681dc2e8"), "id" : 4, "text" : "ddd" } { "_id" : ObjectId("5142b8493032587e681dc2e9"), "id" : 5, "text" : "eee" } { "_id" : ObjectId("5142b85a3032587e681dc2ea"), "id" : 6, "text" : "fff" }
古い要素が消えて、要素数も 5 のまま維持される。
要素数をもうちょっと増やしたいって場合は、今のところコレクション削除して作り直すしかなさげ。
> db.access_log.drop(); true > db.createCollection("access_log", { capped:true, size:1000000, max:10 }); { "ok" : 1 }
要素全部消えちゃうけど、ログだし別にいいや。