Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Verzeichnisbaum effizient überwachen?
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #1
Verzeichnisbaum effizient überwachen?
Jaaa.. in der Hoffnung ein paar Leute mit Grips sind grad anwesend, habe ich da mal ne Fraage:

Und zwar hab ich hier nen Verzeichnisbaum mit potentiell vielen Dateien.
So, und jetzt gibts da parallel laufende Prozesse, die möglicherweise den Inhalt der Dateien in Unterverzeichnissen verändern.

Dann gibt es noch den Index, der die wichtigsten Informationen über den Inhalt der Dateien speichert.

Nur erstellt und wartet sich der Index eben nicht von alleine, sondern der muss bei einer Dateiänderung aktualisiert werden.

Meine Frage:
Wie kriege ich eine Dateiänderung in einem Unterverzeichnis am schnellsten mit? Ich muss nicht wissen, was sich verändert hat, sondern nur, ob es sich verändert hat. Dann soll der Index an der entsprechenden Stelle aktualisiert, aber nicht komplett neu erstellt werden.

Anmerkung:
Prüfsummen sind viel zu langsam, da ist die Datei-Modifikationszeit schneller eingelesen als eine Prüfsumme erstellt.
Meine momentane Idee ist es, die Modifikationszeit (Auflösung von 1sec reicht) im Index zu speichern, und dann den ganzen Baum bis in die Unterverzeichnisse runter zu scannen. Aber das dünkt mich etwas uneffizient, drum frag ich.

Achja, das ganze muss betriebsystem- und dateisystemunabhängig sein, also auf die Dateisystemfunktionen der C-Standardbibliothek beschränkt.
11.02.2009 23:29
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
CHRiSNEW Offline
Internetblasensammler

Beiträge: 2.860
Registriert seit: Jul 2008
Beitrag #2
Verzeichnisbaum effizient überwachen?
Der letzte Satz ist böse, denn unter Linux könntest du [url=
http://www.ibm.com/developerworks/linux/...ml]inotify[/url] benutzen. Analog dazu gibt's unter Mac OS X fsevents und unter Windows finde ich auf die schnelle nur so schwuchtelige .NET Scheiße.

(Dieser Beitrag wurde zuletzt bearbeitet: 12.02.2009 00:10 von CHRiSNEW.)
12.02.2009 00:09
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
oreissig Offline
Maître Modérateur

Beiträge: 11.991
Registriert seit: Jul 2008
Beitrag #3
Verzeichnisbaum effizient überwachen?
würde spontan auch vermuten, dass du rein über die abstrakten schnittstellen nicht umherkommen wirst, die hierarchie zu traversieren
die spezifischeren details unterscheiden sich wohl von OS zu OS und ggf. sogar von FS zu FS
12.02.2009 00:15
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #4
Verzeichnisbaum effizient überwachen?
Ja, ne.. an inotify und so hab ich ja selber sofort gedacht. Aber geht eben nicht.

Auch wenn ich jetzt jeglichen Coolnessfaktor verspiele, das ganze wird in PHP implementiert (und jez komm mir keiner mit irgendwelchen Datenbankenideen), ergo liegen betriebsystemnahe Funktionen nicht drin.
12.02.2009 00:18
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
oreissig Offline
Maître Modérateur

Beiträge: 11.991
Registriert seit: Jul 2008
Beitrag #5
Verzeichnisbaum effizient überwachen?
oder halt ggf irgendeine abstrakte Schnittstelle einführen, halt z.B. einfach ne datei im wurzelverzeichnis, welche bei jeder operation der laufenden prozesse zusätzlich mal getoucht wird.
12.02.2009 00:25
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #6
Verzeichnisbaum effizient überwachen?
oreissig schrieb:  z.B. einfach ne datei im wurzelverzeichnis, welche bei jeder operation der laufenden prozesse zusätzlich mal getoucht wird.
Ja.. das war bisher das Verhalten.
Das Problem dabei ist, dass ich nicht feststellen kann, was sich verändert hat, also den ganzen Index aktualisieren musste.

Am effizientisten wärs vielleicht doch, wenn man nicht den Dateibaum vom Indexer untersucht, sondern dass jede Dateiänderung in einem Log mitschneidet. Und der Index verwertet den dann.
12.02.2009 00:42
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
chessboi Offline
Erfahrener Benutzer

Beiträge: 250
Registriert seit: Jul 2008
Beitrag #7
Verzeichnisbaum effizient überwachen?
Bin gerade drauf und dran, mir das ganze mit iwatch (Tool für inotify) zu machen. Nun ja, eben nicht was du willst.

Wenn du das ganze Plattformübergreiffen machen willst, kommst du wohl oder übel nicht um eine Indexierung herum wo du halt immer wieder überprüfst ob sich was geändert hat.
12.02.2009 12:26
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
YAL Offline
teplotaxi

Beiträge: 2.493
Registriert seit: Jul 2008
Beitrag #8
Verzeichnisbaum effizient überwachen?
http://en.wikipedia.org/wiki/File_alteration_monitor
12.02.2009 12:33
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
chessboi Offline
Erfahrener Benutzer

Beiträge: 250
Registriert seit: Jul 2008
Beitrag #9
Verzeichnisbaum effizient überwachen?
Mh, was man machen könnte: Für jedes System ein Prog/Script der Beispielsweise mit iwatch oder eben mit Obtaining Directory Change Notifications (Windows) das Filesystem überwacht, und eine Änderung dann deinem PHP- oder was auch immer Script übergibt.
12.02.2009 12:52
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #10
Verzeichnisbaum effizient überwachen?
Betriebsystemabhänige Funktionen will ich nicht benutzen. fam schon gar nicht, das stinkt.
Es ist mir ein zu grosses Gefrickel, da für jedes potentielle OS ein Interface zu bauen.

chessboi schrieb:  Wenn du das ganze Plattformübergreiffen machen willst, kommst du wohl oder übel nicht um eine Indexierung herum wo du halt immer wieder überprüfst ob sich was geändert hat.
Ja, das ist die Ausgangsidee. :oO:

Frage ist, wie ich diese Überprüfung am effizientesten mache, und was schnelleres als Zeitstempelvergleich lag da bisher nicht drin.
Ich werds jetzt mit einem Log machen, wo sich jedes Änderungsaktion eintragen muss.
12.02.2009 13:10
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 6 Gast/Gäste