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


在一個保存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})

  

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM