MongoDB Special indexes

 

Capped Collections
// Create capped collection (100000 bytes and max 10 entries)
> db.createCollection("ring_buffer",{"capped":true,"size":100000,"max":10})
{ "ok" : 1 }

// insert more than 10 messages
> db.ring_buffer.insert({"message":1})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":2})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":3})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":4})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":5})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":6})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":7})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":8})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":9})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":10})
WriteResult({ "nInserted" : 1 })
> db.ring_buffer.insert({"message":11})
WriteResult({ "nInserted" : 1 })

// list collection, only rest 10 entries
> db.ring_buffer.find()
{ "_id" : ObjectId("5f7d7b1b4db79b5cc8c54240"), "message" : 2 }
{ "_id" : ObjectId("5f7d7b1d4db79b5cc8c54241"), "message" : 3 }
{ "_id" : ObjectId("5f7d7b204db79b5cc8c54242"), "message" : 4 }
{ "_id" : ObjectId("5f7d7b234db79b5cc8c54243"), "message" : 5 }
{ "_id" : ObjectId("5f7d7b264db79b5cc8c54244"), "message" : 6 }
{ "_id" : ObjectId("5f7d7b274db79b5cc8c54245"), "message" : 7 }
{ "_id" : ObjectId("5f7d7b2a4db79b5cc8c54246"), "message" : 8 }
{ "_id" : ObjectId("5f7d7b2c4db79b5cc8c54247"), "message" : 9 }
{ "_id" : ObjectId("5f7d7b2e4db79b5cc8c54248"), "message" : 10 }
{ "_id" : ObjectId("5f7d7b304db79b5cc8c54249"), "message" : 11 }

Time-To-Live Indexes
Time-To-Live index need config in Date data type.
After “expireAfterSeconds”, the data will be deleted
// create index for Date type with “expireAfterSeconds” attributes
> db.users.createIndex({"date":1},{"expireAfterSeconds":5})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

// update users with date
> db.users.updateOne({"name":"user164"},{"$set":{"date":new Date()}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

// after 5 seconds, the records will be deleted


沒有留言:

張貼留言

別名演算法 Alias Method

 題目 每個伺服器支援不同的 TPM (transaction per minute) 當 request 來的時候, 系統需要馬上根據 TPM 的能力隨機找到一個適合的 server. 雖然稱為 "隨機", 但還是需要有 TPM 作為權重. 解法 別名演算法...