Modo efficiente per mappare le modifiche in una gerarchia del filesystem

0

Attualmente sto lavorando a un progetto che abiliterà la ricerca di file in base ai metadati trovati nel file.

Sarà composto da 2 parti:

  • un crawler del filesystem che analizza passivamente le modifiche e indicizza i risultati in un database
  • un front-end di ricerca che interroga il database

Il database utilizzerà un modello pseudo-gerarchico (cioè appiattito) per creare una mappa della struttura directory / file.

I campi memorizzati nell'indice includeranno:

  • nome file / cartella
  • directory principale
  • tempo modificato
  • metadati
    • ...

Quello che mi chiedo è, in che modo funziona normalmente il tempo modificato su file / cartelle e come può essere utilizzato per ridurre l'area che il crawler dovrà indicizzare?

Nota: si supponga che lo spider esegua regolarmente su un intervallo fisso per mantenere l'indice aggiornato.

    
posta Evan Plaice 21.02.2015 - 03:39
fonte

1 risposta

2

Suppongo che tu parli del sistema operativo unix. Da Wikipedia ( stat () ):

stat() is a Unix system call that returns file attributes about an inode. The semantics of stat() vary between operating systems. As an example, the Unix command ls uses it to retrieve information on (among many others):

  • atime: time of last access (ls -lu),
  • mtime: time of last modification (ls -l), and
  • ctime: time of last status change (ls -lc).

Da man 2 stat :

The field st_mtime is changed by file modifications, for example, by mknod(2), truncate(2), utime(2) and write(2) (of more than zero bytes). Moreover, st_mtime of a directory is changed by the creation or deletion of files in that directory. The st_mtime field is not changed for changes in owner, group, hard link count, or mode.

Ciò significa che l'ultima modifica è impostata su un file quando:

    Il file
  • viene creato ( mknod )
  • il file viene troncato ( truncate )
  • il tempo di modifica è stato modificato esplicitamente ( utime )
  • uno o più byte di dati sono stati scritti in un file ( write ) - che include casi in cui gli stessi dati sono stati scritti due volte e nulla è stato effettivamente modificato

Sono non sicuro se è un elenco completo.

Come mtime su una directory:

  • Cambia quando crei, sposti o cancelli un file o una directory che è figlio immediato di questa directory. Euristica semplice: mtime di una directory cambia quando l'output di ls (solo comando semplice, nessuna ricorsione o eventuali parametri aggiuntivi) cambia.
  • Non cambia quando si modifica solo il contenuto di qualsiasi file all'interno (indipendentemente da quanto profondamente annidato) o si fa qualcosa all'interno delle sue sottodirectory. Nessuna propagazione.

Mi chiedo se la memorizzazione dei dati che hai citato in un DB possa essere di qualche aiuto - è già memorizzata in un file system, che è un database da solo, e tutti gli strumenti per interrogarlo sono già lì .

    
risposta data 21.02.2015 - 14:07
fonte

Leggi altre domande sui tag