Mongodb
mongodb - 每月歸檔數據
來自 RDBMS 背景,這是我過去所做的。
- 根據日期欄位創建帶有分區的表。通常有三個表(分區) - 目前 (M0)、上個月 (M1) 和上個月 (M2)。
- 分離 M2,下載數據並刪除表。再次創建 M2(空)。
我們如何使用 MongoDB 實現相同的目標?我已閱讀有關Capped Collections和TTL 設置的資訊。似乎不符合要求。也有遠端分片;但是,我們並不是需要集群部署的大型安裝。
目的是擁有一個“小型”數據集,以便查詢高效執行,並且 API 呼叫(取決於這些查詢)不會產生延遲。
在 MongoDB 4.0 中,沒有對分區集合的內置支持,但您可以實現類似的模式:
- 您的應用程序將始終將新條目寫入集合
M0
(目前)- 您將設置一個計劃任務以在月底輪換集合名稱,使用
renameCollection
(renameM1
toM2
andM0
toM1
)M2
您的計劃任務會在不再需要時從該集合下載數據並刪除該集合這種方法應該最大限度地減少儲存碎片,因為您的
M0
集合是每月重新創建的,而不是長期存在的,但是它會限制您對跨越M0
和M1
.我已閱讀有關Capped Collections和TTL 設置的資訊。似乎不符合要求。也有遠端分片;但是,我們並不是需要集群部署的大型安裝。
上限集合有許多限制,不適合此案例。Capped collection 增長受字節大小或文件數量的限制,但您無法控製文件到期時間。您也不能直接刪除上限集合中的文件,因為它們是為 FIFO(先進先出)案例而設計的。
TTL(生存時間)索引是您的案例的明確候選者。文件具有基於秒數或特定時鐘時間的 TTL 到期日期。您可以使用第一種到期來平滑刪除隨著時間的推移(因此文件在約 62 天后到期)或第二種到期設置基於當月的第一天文件通常會被刪除的更嚴格的日期為的一部分
M2
。如果您唯一的案例是刪除檔案數據,則分片會增加很多操作複雜性。要考慮的相關功能是基於區域的分片,它允許您將分片鍵的連續範圍與特定分片相關聯。對於舊數據應保持線上但轉移到成本/性能較低的儲存的歸檔案例來說,這更為典型。有關更多資訊,請參閱MongoDB 文件中用於不同 SLA 或 SLO 的分層硬體。