NodeJS: Wie würde man eine große Anzahl von Dateien / Ordnern auf der Serverseite für Updates sehen?

9

Ich arbeite an einer kleinen NodeJS-Anwendung, die im Wesentlichen als browserbasierte Desktopsuche für einen LAN-basierten Server dient, den mehrere Benutzer abfragen können. Die Benutzer im LAN haben alle Zugriff auf einen freigegebenen Ordner auf diesem Server und werden traditionell dazu verwendet, Dateien innerhalb dieses Ordners nur für die gemeinsame Nutzung unter allen Personen zu platzieren, und ich möchte diesen Prozess beibehalten.

Die erste Lösung, auf die ich gestoßen bin, war die fs.watchFile , auf die ich in der letzten Ausgabe eingegangen bin andere Stackoverflow-Fragen. In der ersten Frage Benutzer Ivo Wetzel bemerkte, dass auf einem Linux-System fs.watchFile inotify verwendet, war aber der Meinung, dass fs.watchFile nicht für große Dateienmengen verwendet werden sollte / Ordner.

In einer weiteren Frage zum fs.watchFile-Benutzer tjameson wiederholte zuerst, dass unter inotify von fs.fileWatch verwendet werden würde und empfahl, einfach eine Kombination von node-notify-plusplus und node-walk aber wieder gesagt, diese Methode sollte nicht für eine große Anzahl von Dateien verwendet werden. Mit einem Kommentar und einer Antwort schlug er vor, nur die geänderten Zeiten von Verzeichnissen zu beobachten und dann das relevante Verzeichnis erneut nach Dateiänderungen zu durchsuchen.

Meine größten Hürden scheinen zu sein, dass es selbst mit Tjamesons Vorschlag immer noch eine harte Grenze für die Anzahl der überwachten Ordner gibt (von denen es viele gibt und wächst). Es müsste auch rekursiv ausgeführt werden, da der Verzeichnisbaum etwas tief ist und sich auch in den unteren Zweigen ändern kann, so dass ich auf jeder Ordnerebene Folgendes überwachen müsste (oder alternativ die geänderte Zeit der Ordner überwachen und dann scannen, um herauszufinden, was passiert ist):

  • Erstellen einer Datei oder eines Unterordners
  • Löschen der Datei oder des Unterordners
  • Verschieben der Datei oder des Unterordners
  • Löschung des Selbst
  • Bewegung des Selbst

Angenommen, der Inotify hat Grenzen in Übereinstimmung mit dem, was oben gesagt wurde, dann scheint mir das allein, als ob es zu viele Monitore wären, wenn ich eine beträchtliche Anzahl von verschachtelten Unterordnern habe. Der wirklich tolle Weg sieht so aus, als würde es kqueue beinhalten, was ich später als Thema gefunden habe Diskussion über eine bessere fs.fileWatch in einer Google-Gruppe .

Es scheint mir klar zu sein, dass das Führen einer Datenbank der relevanten Datei- und Ordnerinformationen die geeignete Vorgehensweise auf der Abfrageseite der Dinge ist, aber diese Datenbank mit dem tatsächlichen Zustand des Dateisystems unter den betreffenden Verzeichnissen synchronisiert zu halten wird die Herausforderung sein.

Was denkt die Gemeinde? Gibt es eine bessere oder wohlbekannte Lösung für dieses Problem, von der ich nichts weiß? Ist es am besten, nur alle Verzeichnisse von Interesse für eine einzige Änderung zu beobachten, z. Zeit geändert und dann gescannt, um herauszufinden, was passiert ist? Ist es besser, alle relevanten Warnungen zu überwachen und die Datenbank entsprechend zu modifizieren? Ist das nicht ein Problem, das von einem Bauern wie mir gelöst werden kann?

    
funkyeah 06.04.2011, 13:51
quelle

2 Antworten

2

Sehen Sie sich monit an. Ich verwende es, um Dateien auf Änderungen in meiner Entwicklungsumgebung zu überwachen und meine Knotenprozesse neu zu starten, wenn sich relevante Projektdateien ändern.

    
Zikes 06.04.2011 14:24
quelle
0

Ich empfehle Ihnen, sich die Dropbox-API anzusehen.

Ich habe etwas ähnliches mit Ruby auf der Clientseite und Nodejs auf der Serverseite implementiert. Der beste Ansatz besteht darin, Hashwerte beizubehalten, um zu überprüfen, ob sich die Dateien oder Ordner geändert haben.

    
masylum 06.04.2011 22:01
quelle

Tags und Links