Haben Sie eine Liste, was gelöscht wird, wenn das Löschen stattfindet (oder ändern Sie den Prozess, der gelöscht wird, um dies zu erstellen)?Wenn das nicht der Fall ist, können Sie eine Liste von "Ich wurden gelöscht" mit einem Zeitstempel erstellen und dann Elemente aus dieser Liste auswählen, um nur nach Änderungen zu synchronisieren. Natürlich möchten Sie immer noch eine Art Batch-Job haben, um während einer langsamen Zeit auf dem Server zu synchronisieren, aber ich denke, das könnte die Last reduzieren.
Eine andere Option kann sein, je nachdem, was den Code ändert, dass der Prozess die Datenbanken (wenn Sie mehrere Knoten haben) einfach beim Löschen aktualisiert. Dies würde eine gewisse Kopplung in die Systeme einführen, wäre aber die effizienteste Art, dies zu tun.
Die besten Möglichkeiten meiner Meinung nach sind einige Variationen über die Idee von Messaging, dass ein Löschen aufgetreten ist (auch wenn das nur eine Datei ist, die Sie an einige wo mit einer Liste kürzlich gelöschter Dateien schreiben), oder irgendeine Art von direkt Callback-Mechanismus, entweder durch Code oder nur durch Anpassen des persistenten Datenspeichers, den die Anwendung direkt aus dem Löschprozess verwendet.
Selbst wenn all dies gesagt wurde, müssten Sie immer eine Art Index-Synchronisation oder periodische Plausibilitätsprüfung der Indizes durchführen, um sicher zu sein, dass alles korrekt abgeglichen ist.
Sie könnten (und ich wäre schockiert, wenn Sie nicht basierend auf der Anzahl der Dateien, die Sie haben) den Dateibereich in Ordner mit sagen wir 5.000 bis 10.000 Dateien pro Ordner partitionieren und dann erstellen eine einfache Datei mit einem Hash der Namen aller Dateien im Ordner. Dies würde Löschungen fangen, aber ich denke immer noch, dass ein direkter Rückruf einer Form, wenn das Löschen auftritt, eine viel bessere Idee ist. Wenn Sie einen monolithischen Ordner mit all diesen Dingen haben, erstellen Sie etwas, um das in separate Ordner zu zerlegen (wir benutzten eine einfache Nummer unter dem Hauptordner, damit wir ad nauseum weitermachen konnten) sollte alles sehr beschleunigen; Selbst wenn Sie dies für alle neuen Dateien tun müssen und die alten Dateien so belassen, wie sie sind, könnten Sie zumindest das bluten beim Dateiabruf stoppen.
Meiner Meinung nach, da Sie einen Index der Dateien programmgesteuert steuern, sollten Sie das gleiche Programm irgendwie beteiligt haben (oder benachrichtigt), wenn Änderungen zum Zeitpunkt der Änderung des zugrunde liegenden Dateisystems auftreten, im Gegensatz zu zulassen Änderungen passieren und dann alles nach Updates durchsehen. Um die Ausreißer, bei denen diese Kommunikation unterbrochen wird, abzufangen, sollten Sie natürlich auch einen Synchronisationscode verwenden, um zu überprüfen, was sich im Dateisystem befindet, und den Index regelmäßig zu aktualisieren (obwohl dies möglicherweise zu der Hauptanwendung ausgelagert werden sollte)).
Löschen wie in: Ein systembasiertes Löschen, das Sie nicht kontrollieren können? oder Ein Löschen, das von einer Anwendung ausgelöst wird, in der Sie etwas tun können? – Krrose27
Warum benötigt der Scanvorgang viel Speicherplatz? Sie listen die Dateien im Grunde nur in einem Verzeichnis auf, oder? – Joni
Ja, jedoch kann ich nicht steuern, wie viele Dateien in einem Verzeichnis gespeichert sind. Ein Verzeichnis kann 1 Milliarde Dateien enthalten. Außerdem, wenn ich beim Scannen einer Datei sofort eine Daten einfüge, spart es viel Speicher, ist aber wegen der I/O-Probleme sehr zeitaufwendig. Wenn ich den Masseneinsatz verwende, ist es effizienter. – s011208