用mongodb 固定集合實現只保留固定數量的記錄,自動淘汰老舊資料

保軍Baojun發表於2019-08-05

在一個儲存report記錄的場景中,我們使用MongoDB進行資料儲存

  example:

    db: report

    Collection: daily_report

 

   建立db:  use report;

   建立集合: db.createCollection("daily_report")

   我們的服務會根據使用者配置進行每天N次自動的任務的執行,每個任務結束後會對應生成一個report, 我們將report儲存於daily_report集合中。

   插入一條記錄:  db.daily_report.insert({task_id:1,user:'zhangsan',result:‘SUCCESS’})   # 比如有這三個欄位

    

  隨著時間的增長,資料量也越來越多,但是實際上report在月底進行資料分析產生月報後就沒有什麼存在的意義了,但是mongo中daily_report的大小卻在持續增長,佔用了磁碟空間,我們只希望儲存一定量的資料,讓老舊的資料自動刪除掉,其實可以通過程式碼來實現,思路就是每次插入前刪除31天前的資料,或者根據task_id刪除資料,只保留最近10000條記錄,實際上並不需要這麼做,因為Mongodb已經考慮到了這種情景,並提供瞭解決方式:

  我們上面只是建立了一個普通的集合,其實我們可以使用固定集合(Capped Collection)

  MongoDB 固定集合(Capped Collections)是效能出色且有著固定大小的集合,對於大小固定,我們可以想象其就像一個環形佇列,當集合空間用完後,再插入的元素就會覆蓋最初始的頭部的元素!

  如圖:

    

 

  建立一個固定集合,最大儲存10000條記錄:

    db.createCollection("daily_report",{capped:true,size:10000,max:10000})   

    capped:true 表示為一個固定的集合

    size 是整個集合空間大小,單位為【KB】

    max 是集合文件個數上線,單位是【個】

  將存在的集合轉為固定文件: 

    db.runCommand({"convertToCapped":"daily_report",max:10000})

  

 

    

相關文章