Per le situazioni critiche per le prestazioni è meglio memorizzare i metadati dei file in un database?

4

Come per il titolo di questa domanda, per situazioni estremamente critiche per le prestazioni, i metadati di un file (come posizione, dimensioni, download ecc.) in un database consentono di ottenere prestazioni migliori rispetto al tentativo di scaricarlo dal file sistema stesso? Ci sono stati studi di casi su questo problema?

Per fornire maggiori dettagli su una situazione specifica, l'applicazione deve rispecchiare terabyte di dati (centinaia di file) tra un sito remoto su base continua e l'architettura del programma corrente usa comandi Unix (cioè ls ) a determinare quali file devono essere aggiornati. I file stessi sono suddivisi tra cluster IQ Isilon e cluster Sun Thumper a cui mi è stato riferito un buon rendimento ma prestazioni scadenti dei metadati. Poiché l'applicazione sarà l'unico processo in cui si hanno permessi di scrittura sui file, non ci occupiamo di cose che vanno fuori sincrono, ma siamo preoccupati delle prestazioni poiché al momento sono necessarie da sei a dieci ore per trasferire i dati.

    
posta rjzii 12.10.2011 - 17:42
fonte

3 risposte

3

Per ottenere effettivamente i metadati di un singolo file non mi aspetterei molta differenza, e dipenderebbe molto da quale database si è messo a confronto con quale file system e quanto bene è stato configurato.

Tuttavia, se dici che vuoi cercare i file con un suffisso ".mp4" o tutti i film > 1 GB quindi il database vincerà a mani basse. Anche se l'indice dei file system fosse organizzato in modo da essere ricercabile in modo efficiente, le API POSIX normalmente disponibili limiterebbero la ricerca sequenziale attraverso una directory. Se hai distribuito i tuoi dati su diversi file system e hai bisogno di una ricerca separata su ciascuna directory "leaf".

Tuttavia questo potrebbe non essere il caso per molto più tempo in quanto ci sono diversi progetti (incluso uno di Google) che stanno lavorando attivamente su file system con meta-dati ricercabili

    
risposta data 12.10.2011 - 17:58
fonte
0

Funziona alla grande. Fino a quando qualcosa non viene sincronizzato e non ti resta che dover eseguire una scansione completa in ogni caso e, nel frattempo, con qualche piccola peculiarità nei tuoi sistemi, eseguirai un'altra scansione completa solo per escludere problemi di sincronizzazione.

Se questo è un sistema master che fornisce i dati è possibile monitorare l'attività del file system? Se è possibile rilevare le modifiche anziché eseguire la scansione dell'intero sistema, è possibile creare una linea di base (utilizzando il proprio DB o anche un gestore di file flat) e quindi aggiornare in base all'attività recente.

È possibile ottenere report dalle origini dati che modificano i file? Invece di dover rilevare le modifiche dopo il fatto, è possibile mettere in coda gli elenchi di file per verificare la completezza delle modifiche e aggiornarle solo.

    
risposta data 12.10.2011 - 18:06
fonte
0

Hai preso in considerazione l'esecuzione di un demone o di un lavoro cron sul file server e raccogliere le informazioni pertinenti e metterle in un file separato (o pipe)? Questo ti dà il tuo elenco di file da elaborare, senza dover sprecare un sacco di tempo per assemblare e stropicciare gli elenchi delle directory prima di poter iniziare il vero lavoro.

Indipendentemente da ciò, non penso che la differenza di velocità tra la lettura di un file e l'interrogazione di un database sarà significativa. Mantenere le informazioni in un database potrebbe essere utile per altri motivi (ad esempio, il controllo dei processi), ma non penso che possa aiutare le tue prestazioni.

    
risposta data 13.10.2011 - 15:46
fonte

Leggi altre domande sui tag