Ich entwickle Software, die inotify verwendet, um Änderungen an einer großen Menge von Dateien (Zehn- bis Hunderttausende von Dateien) zu verfolgen. Ich bin auf diese Ideen gekommen:
- eine Überwachung pro Datei
- eine Überwachung pro übergeordnetem Verzeichnis
- vermeiden Sie Inotify und scannen Sie die fs regelmäßig auf Änderungen (nicht bevorzugt)
Ich werde eine Datenbank mit allen Dateien haben, die ich beobachte, und einige grundlegende Statistikinformationen (wie Zeit und Größe), aber ich müsste jede Datei in diesem Verzeichnis mit Statistikdaten versehen, bis ich diejenige gefunden habe, die sich geändert hat.
Was wäre schneller, Tonnen (über 100.000) Inotify-Uhren oder Tonnen von Statistikaufrufen?
Ich denke, dass es besser wäre, die Anzahl der Statistikaufrufe zu reduzieren, aber ich weiß nicht genug über inotify.
Hinweis:
Dies wird auf einer Workstation ausgeführt, nicht auf einem Server. Sein Hauptzweck besteht darin, Änderungen (möglicherweise an einem gesamten Dateisystem) zwischen einem Client und einem Remote-Server zu synchronisieren.
Akzeptierte Antwort:
Wenn Sie read()
ein inotify fd, der name
Das Feld der zurückgegebenen Struktur teilt Ihnen mit, welche Datei relativ zum überwachten Verzeichnis geändert wurde, sodass Sie nach dem Ereignis nicht jede Datei in einem Verzeichnis angeben müssen.
Siehe http://linux.die.net/man/7/inotify
Konkret:
struct inotify_event { int wd; /* Watch descriptor */ uint32_t mask; /* Mask of events */ uint32_t cookie; /* Unique cookie associating related events (for rename(2)) */ uint32_t len; /* Size of 'name' field */ char name[]; /* Optional null-terminated name */ };
Das Namensfeld ist nur vorhanden, wenn ein Ereignis für eine Datei
innerhalb eines überwachten Verzeichnisses zurückgegeben wird; es identifiziert den Dateipfadnamen relativ
zum überwachten Verzeichnis. Dieser Pfadname ist nullterminiert und kann
weitere Nullbytes enthalten, um nachfolgende Lesevorgänge an einer geeigneten
Adressgrenze auszurichten.