mongodb爲日誌表設置歸檔方案

背景

現在mongodb有一張日誌表,保留每天的系統訪問信息,由於每天的數量非常大,導致長時間之後表變得非常大,影響插入效率,並且導致無法查詢,現在我們需要制定方案來解決這個問題,需求是實現表的按時清理和歸檔。要求是儘量不修改項目現有的業務代碼。並且現在數據庫的大概每天產生30至60萬條數據,能夠平穩的處理。

解決方案

方案一:
集中清除:

假設在2019年的11月1號開始增加ttl設置爲30天后的凌晨1點進行自動刪除,然後我們每30天也就是2019年12月1號凌晨0點開始第一次備份數據,這是我們的數據庫中會有一個月的數據,備份完成一小時後,開始刪除當天數據,當下個月備份的時候,也就是1月1號,我們11月的數據已經自動刪除完,這時進行備份,只有12月的數據。

方案二:
分散清除:

備份方案與方案一相同,ttl設置爲在日誌生成後2592000秒(30天)後刪除。

兩種方案的區別:

  1. 第二種方案將刪除分散到一天,將壓力分散開;不需要更改原有代碼只需要數據庫設置索引
  2. 第一種方案將刪除放在凌晨,在服務器低峯刪除;需要增加刪除字段,並自定義刪除時間

最終選擇實施方案一

原因:1. 不需要更改業務代碼

   2. 按照 mongodb設計如果刪除數據時處於數據庫高峯,會延後刪除,(更改方案:將刪除時間設爲整天的時間加減某些量如5小時等,會生成錯峯)

操作步驟

  1. 設置mongodb的ttl索引,在一個選中的類型爲date的字段上加上ttl索引,參考代碼如下,具體實現參照百度。

參照實現:ttl

  1. 數據庫備份,參照百度,使用shell腳本定時備份。

參照實現:備份

參考資料

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