用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})