mongodb固定集合、TTL集合

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還是不錯的選擇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章