MongoDBにおいて表題を試す。
■ 環境
- MongoDB 3.0.7
- Mac OSX (10.10.5)
■ MongoDB
起動する。先日のエントリの通りの設定である。
$ mongod --config /usr/local/etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 4142
child process started successfully, parent exiting
$
■ CappedCollection
“CappedCollection“は、2つの方法で作成することができる。1つはこれkション作成時に指定する。
> db.createCollection("log", {capped: true, size: 100})
上記は、コレクションサイズが最大100byteの”log“コレクションを”CappedCollection“で作成している。
既に存在するコレクションを”CappedCollection“にするには下記の通り。
$ db.runCommand({"convertToCapped": "log", size: 100})
■ データ投入
データを投入しつつドキュメントも見てみる。
> db.createCollection("log", {capped: true, size: 100})
{ "ok" : 1 }
>
> show collections
log
system.indexes
>
> db.log.insert({test: "aaa"})
WriteResult({ "nInserted" : 1 })
>
> db.log.find()
{ "_id" : ObjectId("565c0afc90b88be4ec0bee18"), "test" : "aaa" }
>
> db.log.insert({test: 1111111111})
WriteResult({ "nInserted" : 1 })
> db.log.insert({test: 2222222222})
WriteResult({ "nInserted" : 1 })
> db.log.insert({test: 3333333333})
WriteResult({ "nInserted" : 1 })
> db.log.insert({test: 4444444444})
WriteResult({ "nInserted" : 1 })
> db.log.insert({test: 5555555555})
WriteResult({ "nInserted" : 1 })
>
> db.log.find()
{ "_id" : ObjectId("565c0bb890b88be4ec0bee25"), "test" : 1111111111 }
{ "_id" : ObjectId("565c0bbd90b88be4ec0bee26"), "test" : 2222222222 }
{ "_id" : ObjectId("565c0bc190b88be4ec0bee27"), "test" : 3333333333 }
{ "_id" : ObjectId("565c0bc690b88be4ec0bee28"), "test" : 4444444444 }
{ "_id" : ObjectId("565c0bca90b88be4ec0bee29"), "test" : 5555555555 }
>
この時点までは特に変化は無し。そのままデータの投入を続けていくと、下記のようになる。
> db.log.find()
{ "_id" : ObjectId("565c0bc690b88be4ec0bee28"), "test" : 4444444444 }
{ "_id" : ObjectId("565c0bca90b88be4ec0bee29"), "test" : 5555555555 }
:
> db.log.count()
73
>
“size“で指定したものと合っているのかはこの時点ではわからないが、最初に投入したデータから順に消えていくということが分かるであろう。ログのように増える一方のデータを扱うには良いコレクションである。
■ 注意点
“CappedCollection“は”update“や”remove“といったデータの変更ができない。
> db.log.remove({})
WriteResult({
"nRemoved" : 0,
"writeError" : {
"code" : 20,
"errmsg" : "cannot remove from a capped collection: test.log"
}
})
以上。