我想在創建它 10 秒后自動洗掉一個檔案,為此我使用 mongodb TTL,但計時器無法正常作業并在 40 秒或 50 秒或 20 秒后洗掉檔案,那么我的錯誤在哪里?
await db.collection("admin_msg").insertOne({ createdAt: new Date() });
await db.collection("admin_msg").createIndex({ createdAt: 1}, { expireAfterSeconds: 10 });
uj5u.com熱心網友回復:
expireAfterSeconds不保證立即洗掉檔案。洗掉是由每分鐘運行一次的后臺作業完成的。該作業是低優先級的,當當前負載很高時,可以由 MongoDB 推遲。因此,當您的用例很重要時,將過期時間準確地遵守到秒,那么您應該將過期時間添加到查找查詢中,以確保您不會得到任何已經應該被洗掉的檔案。
此功能記錄在此處:http : //docs.mongodb.org/manual/tutorial/expire-data/
我不建議創建一個自己的作業來自動洗掉檔案并以更短的間隔運行,因為這可能不僅會導致相當多的負載,它也可能無法真正解決問題,因為這些洗掉也可能在 oplog 時被延遲變得太長。在檢索時檢查過期是一個更可靠的選擇。
uj5u.com熱心網友回復:
正如mongo 檔案所述:
洗掉過期檔案的后臺任務每 60 秒運行一次。因此,在檔案到期和后臺任務運行之間的時間段內,檔案可能會保留在集合中。
因此,如果需要在 10 秒后恰好洗掉檔案,您將不得不撰寫自己的服務、作業或其他可編程方法來在特定時間后洗掉檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/389744.html
標籤:javascript MongoDB 特尔
