當刪除發生時(或更改任何進程刪除以創建此項目),您是否有刪除內容的列表?如果是這樣,你有沒有列出「我已被刪除」的時間戳,然後從這個列表中選取項目,以便只更改已更改的內容?當然,你仍然希望有某種批處理作業在服務器上慢速同步,但我認爲這可以減少負載。
根據更改代碼的情況,另一種選擇是讓該進程直接刪除時更新數據庫(如果有多個節點)。這會引入一些耦合到系統中,但會是最有效的方式。
在我看來,最好的方式是發送消息的想法發生了一些變化,即刪除已發生(即使這只是一個文件,您可以使用最近刪除的文件列表向某些位置寫入文件),或者某種直接回調機制,無論是通過代碼還是通過調整應用程序直接從刪除過程中使用的持久性數據存儲。
即使有這些說法,您總是需要對索引進行某種索引同步或定期完整性檢查,以確保所有內容都正確匹配。
如果文件夾中的文件空間分割成5000-10,000個文件夾等文件,你可以(並且我會感到震驚的,如果你不需要根據你有的文件數量),然後創建一個簡單的文件,它具有文件夾中所有文件名稱的哈希值。這將會捕獲刪除,但我仍然認爲刪除時發生的某種形式的直接回調是一個更好的主意。如果你有一個包含所有這些東西的單片文件夾,創建一些東西把它分解成單獨的文件夾(我們在主文件夾下使用了簡單的數字,這樣我們就可以繼續使用廣告)。即使您必須爲所有新文件執行此操作,並將舊文件保持原樣,至少您可以在文件檢索時停止流血。
在我看來,由於您是以編程方式控制文件的索引,所以在更改底層文件系統時發生更改時,應該確實有相同的程序參與(或通知),而不是允許發生變化,然後查看所有更新。自然地,爲了捕捉通信中斷的異常點,您還應該在那裏有同步代碼,以實際檢查文件系統中的內容並定期更新索引(儘管這可能並可能應該批量化爲主程序)。
刪除如下:基於系統的刪除,你無法控制?或由某個應用程序觸發的刪除,您可以在其中執行某些操作? – Krrose27
爲什麼掃描過程使用大量內存?你基本上只是把文件一次列在一個目錄中,對嗎? – Joni
是的,但是,我無法控制目錄中有多少個文件。一個目錄可能有10億個文件。另外,如果我在立即掃描文件時插入一個數據,它會節省大量的內存,但由於I/O問題非常耗時。如果我使用批量插入,它更有效率。 – s011208