Vyvíjím software, který bude využívat inotify ke sledování změn na velkém množství souborů (desítky až stovky tisíc souborů). Přišel jsem s těmito nápady:
- jedno zhlédnutí na soubor
- jedno sledování na nadřazený adresář
- vyhněte se inotify a pravidelně kontrolujte fs kvůli změnám (není preferováno)
Budu mít databázi všech souborů, které sleduji, a některé základní statistické informace (jako mtime a velikost), ale musel bych v tomto adresáři uvést každý soubor, dokud nenajdu ten, který se změnil.
Co by bylo rychlejší, tuny (100 000+) hodinek inotify nebo tuny volání statistik?
Myslím si, že snížení počtu statistických volání by bylo lepší, ale o inotify toho nevím dost.
Poznámka:
Toto bude běžet na pracovní stanici, ne na serveru. Jeho hlavním účelem je synchronizovat změny (potenciálně v celém souborovém systému) mezi klientem a vzdáleným serverem.
Přijatá odpověď:
Když read()
inotify fd, name
pole vrácené struktury vám říká, který soubor byl změněn vzhledem ke sledovanému adresáři, takže byste po události neměli uvádět každý soubor v adresáři.
Viz http://linux.die.net/man/7/inotify
Konkrétně:
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 */ };
Pole názvu je přítomno pouze tehdy, když je vrácena událost pro soubor
ve sledovaném adresáři; identifikuje cestu k souboru relativní
ke sledovanému adresáři. Tato cesta je zakončena nulou a může
obsahovat další nulové bajty k zarovnání následných čtení k vhodné
hranici adresy.