Wie soll ich eine große Anzahl von Dateien auf Änderungen abfragen?

8

Ich möchte das Dateisystem nach geänderten, hinzugefügten oder entfernten Dateien oder Unterverzeichnissen abfragen. Alle Änderungen sollten schnell erkannt werden, ohne die Maschine unter Druck zu setzen. Das Betriebssystem ist Windows & gt; = Vista, der beobachtete Teil ist ein lokales Verzeichnis.

Normalerweise würde ich auf einen FileSystemWatcher zurückgreifen, aber das führte zu Problemen mit anderen Programmen, die versuchten, dieselbe Stelle zu sehen (prominent, Windows Explorer). Außerdem habe ich gehört, dass FSW selbst für lokale Ordner und mit einem großen Puffer nicht wirklich zuverlässig ist.

Das Hauptproblem, das ich habe, ist, dass die Anzahl der Dateien und Verzeichnisse sehr groß sein kann (rate 7-stellig). Das einfache Ausführen einer Überprüfung für alle Dateien pro Sekunde hat sich merklich auf meinen Computer ausgewirkt.

Meine nächste Idee bestand darin, verschiedene Teile des gesamten Baums pro Sekunde zu überprüfen, um die Gesamtwirkung zu reduzieren, und möglicherweise eine Art Heuristik hinzuzufügen, wie das Überprüfen von Dateien, die häufig in schneller Folge geändert werden.

Ich frage mich, ob es Muster für diese Art von Problem gibt oder ob jemand Erfahrungen mit dieser Situation hat.

    
mafu 26.08.2011, 11:30
quelle

3 Antworten

3

Wir haben eine ähnliche Funktion mit C # implementiert. Der FileSystemWatcher war ineffizient mit großen Verzeichnisbäumen.

Unsere Alternative verwendet FSNodes , eine von uns erstellte Struktur, die die folgenden Windows-API-Aufrufe verwendet:

%Vor%

Was wir machen, ist eine statische Verarbeitung. Wir speichern eine Metadatenstruktur auf der Festplatte und vergleichen die gespeicherte Verzeichnisstruktur mit der geladenen, wobei die Suche modifiziert wird (basierend auf ihrem Zeitstempel (schneller) oder dem Datei-Hash). Außerdem können wir gelöschte, hinzugefügte und verschobene, sogar verschobene Dateien verwalten (auch basierend auf dem Datei-Hash).

Diese Implementierung wurde mit einem Daemon gemischt, der sie für jede POLL_TIME ausgeführt hat. Hoffe es hilft.

    
Daniel Peñalba 26.08.2011, 11:57
quelle
1

Meine beste Schätzung wäre die Verwendung des USN-Journals, wenn es sich um einen lokalen Computer handelt, Sie Administratorrechte haben und Partitionen NTFS sind. USN Journal ist extrem schnell und zuverlässig. Es ist ein langer Topis und dieser Link erklärt alles: Ссылка

    
pg0xC 03.09.2011 19:10
quelle
0

Für * nix-Umgebungen können Sie Ссылка verwenden, was bei meinen begrenzten Recherchen sehr gut funktioniert hat. Es könnte eine Version geben, die mit Windows arbeitet, mit der ich weniger Erfahrung habe ... das schnelle googlen führte mich zu einem Java-Klon namens jnotify Ссылка das ist beworben, um an Fenstern zu arbeiten, so dass es einen Versuch wert sein könnte.

    
Baldur 26.08.2011 11:47
quelle