Non hai descritto il "set di condizioni" in alcun dettaglio o con esempi specifici, ma a meno che non si tratti di condizioni molto semplici (ad esempio filename.startswith('r')
), i file system mainstream mancano delle funzionalità di indicizzazione e query che sembrano descrivere. Ecco a cosa servono i database e a cosa servono. Carica i dati e / oi metadati che desideri eseguire la query in un database, esegui le query ed elabora i file risultanti.
Se si dispone di documenti serializzati JSON da 100 K, è necessario eseguire query (indicizzate), caricarle in un database e utilizzare le funzioni di indicizzazione e query del database. Questo è esattamente ciò per cui sono stati inventati i database strutturati come MongoDB.
Nota a margine: ci sono stati tentativi di aggiungere funzionalità simili a database su file system. Il file system BeOS è un esempio notevole. Ma non sono stati presenti nei sistemi operativi di successo mainstream. Si potrebbe sostenere che questa sarebbe una buona caratteristica, ma impone una notevole complessità: fondamentalmente un'implementazione completa del database al di sotto del filesystem. C'è un problema con l'uovo di gallina lì; su quali funzionalità di archiviazione o astrazioni si basa il file system basato su database? Potrebbe essere un blocco di disco non elaborato, ma molti database ora preferiscono un'infrastruttura di tipo file. Ciò implica un filesystem di livello inferiore, non simile a un database. Se stai facendo più stadi di filesystem, perché non fare affidamento su più classici livelli di astrazione: disco grezzo, disco logico, filesystem, database? Per supportare la nozione di filesystem, che è anche database interrogabile, si deve presumere che la gestione dei dati come file costituirà un caso d'uso importante. E si deve supporre che la gestione di query generali nel file system sia sufficientemente valida per compensare la complessità aggiuntiva. Storicamente e nell'evoluzione dei file system e della gestione di serie di dati di grandi dimensioni, queste ipotesi non hanno dato risultati particolarmente positivi.
I file system di oggi su scala più elevata utilizzano effettivamente tecniche di indicizzazione come B-trees , ma l'indicizzazione su un set semplice di attributi (ad esempio nomi di file) a supporto di prestazioni ragionevoli su scala piuttosto che query generalizzate. Una pratica tipica consisterebbe nella gestione di query all'interno di un database su un file system con capacità inferiore. È possibile archiviare i dataset / payload risultanti nel database (ovvero scomposti in tabelle o documenti nativi del database) nel database come blob (ad esempio blob in DBMS relazionale, GridFS in MongoDB) o esternamente (ad esempio come file).