mongodb固定集合、TTL集合
在數據量較少的情況下,或者只需要保存部分的數據,使用固定集合不失爲一個比較好的選擇。
- 插入、查詢的速度非常快。
創建固定集合
有點類似數據結構中的循壞隊列,先進先出方式。滿隊列刪除原來的元素。
固定集合與普通集合有所不同,需要顯示的創建,指定size,max參數。當其中某個條件滿足,將會刪除最先進來的元素。
db.createCollection(“test_log”,{capped:true,size:2,max:2})
查看索引:
mongos> db.test_log.getIndexes()
[
{
“v” : 1,
“key” : {
“_id” : 1
},
“name” : “id“,
“ns” : “admin.test_log”
}
]自然排序的方式,在mongodb3.0以上默認採用_id作爲索引。
- 也可以自定義索引。
轉換爲固定集合
普通集合可以通過 convertToCapped將普通集合轉爲固定集合
db.runCommand({convertToCapped:”test_2”,size:10,max:3})
但是固定集合的特點是:
不能進行分區,因爲它本身就是不是針對大數據集合的,所以,也許這個時候可以考慮使用TTL索引。
TTL集合
通過創建TTL索引,就構建了一個TTL集合,索引建立的原則:
- 索引字段必須爲時間類型
- 在本地上進行測試,進行多個分片,片鍵選擇爲key1+timeKey,成功分片。
- 確保數據保存在一定範圍內,其實主要是後臺有一個線程,平均60s執行一次,對超期的數據進行刪除。所以,這部分也有性能的損耗,需要權衡。
建立語句:
db.ttl_test.ensureIndex({“time”:1},{expireAfterSeconds:20}})
設置其爲20s後刪除數據,真實情況下可能並不能精確到20s.
選擇
對於大數據量來說,希望只保存幾個月的數據,固定集合與TTL貌似都是對數據進行的限制。但是固定集合無法精確到具體的時間,文檔的條數與文檔大小都不能確定。主要是固定集合無法分片,對於需要經常查詢的可能就不是太合適。
當然僅僅保存log文件,查看最新的log還是不錯的選擇