È plausibile utilizzare un formato di configurazione basato su file system piuttosto che un file INI?

4

Dopo aver avuto infiniti problemi con i file di configurazione in stile INI e averli analizzati correttamente (insieme a ottenere dati binari corretti), una pazza idea mi è passata per la testa di recente:

Cosa succede se un file INI come

# settings.ini
[Windows]
DirectorySeparator='\'
PathSeparator=';'

[Linux]
DirectorySeparator='/'
PathSeparator=':'

Preferirei essere memorizzati nel file system; ogni gruppo è una directory, ogni coppia chiave / valore è un file, quindi

settings/Windows/DirectorySeparator (contains just '\')
settings/Windows/PathSeparator      (contains just ';')
... you get the idea ...

Svantaggi:

  • Forse lento a causa del lavoro di I / O, ma forse l'aiuto nella cache del file system?
  • Stai esaurendo gli inode su alcuni file system?
  • I nomi di gruppi / chiavi possono contenere solo caratteri validi anche per directory / nomi di file, possono essere piuttosto restrittivi a seconda delle FS.

I vantaggi:

  • Gruppi arbitrariamente profondamente annidati
  • Nessun problema di escape, i dati binari sono facili. Basta che ogni file contenga i dati non elaborati.
  • Blocco automatico, controllo degli accessi e tutto ciò che il filesystem fornisce
  • Facile accesso con la maggior parte dei linguaggi di programmazione, anche a mano

Sono molto tentato di provare questo nel mio prossimo progetto, mi chiedo se qualcun altro ha già esperienza con questo approccio?

    
posta Frerich Raabe 13.02.2013 - 01:15
fonte

5 risposte

23

Sarebbe super antipatico . Si:

  • Non riuscirebbe a vederli tutti in una volta
  • Non sarebbe in grado di inserire commenti che spieghino il motivo per cui le cose sono impostate come sono
  • Non sarebbe in grado di avere documentazione su quali comandi fare, o quali opzioni possibili sono giuste nella configurazione
  • Sarebbe più controproducente fare il backup / versione controllando le tue configurazioni

L'utilizzo di una libreria per archiviare e leggere contenuti in file XML (ugh) o JSON o INI è così semplice che non ci sono scuse per trovare altre cose.

I filesystem hanno lo scopo di archiviare e organizzare i file. Non abusarne e crea un'alternativa di configurazione quasi cotta quando sono disponibili numerose librerie di configurazione.

    
risposta data 13.02.2013 - 01:25
fonte
8

Questo è un modo perfetto per rappresentare i dati a forma di albero. Un file system è un database ad albero, perché ri-implementarne uno sopra?

L'implementazione più nota di questa idea è il registro di Windows. Il suo difetto principale è che implementa un filesystem accanto al filesystem e non supporta l'API del filesystem, il che significa che non puoi usare strumenti per filesystem come find o grep su di esso.

Elektra è un progetto che implementa un database di valori-chiave di configurazione globale simile al Registro di Windows in modo portatile. Utilizza un formato di archiviazione molto simile a quello che descrivi.

Il filesystem virtuale sysfs di Linux che viene utilizzato per esporre i dati sul grafico degli oggetti del kernel e modificare le impostazioni utilizza anche un formato "valore per singolo file" e utilizza estensivamente i collegamenti simbolici per rappresentare i dati a forma di grafico. / p>

Il server web Gatling utilizza anche i metadati del filesystem per la configurazione. Ecco come si configurano due host virtuali:

mkdir www.example.com:80
mkdir internal.example.com:8080

Ecco come si configura un reindirizzamento:

ln -s http://www.google.com/mail gmail

Ecco come dici a Gatling che un file è uno script lato server, cioè che dovrebbe essere eseguito e non pubblicato:

chmod +x script

Ecco come si dice a Gatling di servire o non servire un file:

chmod o+r serve_this
chmod o-r dont_serve_that

Gatling sembra essere stato ispirato da qmail.

    
risposta data 13.02.2013 - 04:12
fonte
4

Oltre a una risposta eccellente fornita da @whatsisname:

  • Non sarà possibile creare due elementi con lo stesso nome;
  • Non sarà possibile condividere la configurazione;
  • Non sarà possibile effettuare ordini personalizzati di elementi;
  • Diversi sistemi di file hanno limitazioni diverse secondo i nomi dei file. Hanno anche nomi riservati, come CON o NUL per Windows;
  • Inoltre, i file system possono essere sensibili al maiuscolo / minuscolo.

Concordo pienamente con l'idea di utilizzare una libreria pronta all'uso per lavorare con i file di configurazione.

Riguardo alla tua preoccupazione di archiviare grandi blocchi di dati binari, la maggior parte delle librerie di configurazione basate su database fornisce questa funzionalità. Se si sceglie una libreria che non lo fa, l'uso di un file / directory di riferimento più singoli file binari sembra essere l'idea migliore.

    
risposta data 13.02.2013 - 03:21
fonte
2

In realtà è stato fatto. Ad esempio, i file di controllo di qmail sono singoli file che contengono una singola riga con le impostazioni di configurazione.

Il fatto che questo non sia un metodo di configurazione molto popolare è supportato dai motivi forniti in altre risposte a questa domanda.

    
risposta data 13.02.2013 - 04:49
fonte
1

Ecco alcune considerazioni non menzionate finora, che possono o non possono essere rilevanti, a seconda dell'applicazione che vorresti usare per questo.

Controllo di integrità della configurazione

Con un singolo file di configurazione, prendi un hash crittografico. Fatto. Se differisce la prossima volta che leggi il file, allora sai che è stato modificato manualmente o danneggiato.

Con una configurazione basata su file system, è necessario attraversare l'intero albero, leggendo gli oggetti in un ordine specificato prima di alimentarli uno alla volta nell'hash. Non solo il contenuto del file, ma anche i nomi di directory e file. Un bel po 'di cose da fare.

Relativo a questo,

Robustezza

Anche se hai dei controlli di integrità, c'è molto di più che potrebbe andare storto in un file system. Pensa solo a un utente che guarda attraverso i file, spostando alcuni file / directory in altre posizioni, con i suoi movimenti del mouse poco inquietanti e un dito nervoso.

Come gestiresti un collegamento a una directory padre che ti getta in un loop infinito quando lo attraversi senza controllo. Con il giusto danneggiamento che non viene controllato dalla tua applicazione, potrebbe anche essere reso completamente danneggiato, richiedendo una disinstallazione, una pulizia manuale e una reinstallazione.

Un backup di un file di configurazione danneggiato è molto più facile da ripristinare.

Parlando di backup,

Potenti utenti e amministratori

Cosa potrebbero volere fare?

  • Modificalo in modi che sono utili, ma non è possibile con le finestre di dialogo di configurazione incorporate.
  • Backup e ripristino della configurazione.
  • Esporta / importa la configurazione
  • Trasferisci la configurazione ad un amico o alla loro seconda macchina.
  • Implementazione di una configurazione obbligatoria su un numero elevato di macchine e utenti.

Con un singolo file di configurazione basato su testo, tutto ciò che serve è già incorporato nel sistema operativo: copia, sposta e rinomina i file, un editor di testo, copia e incolla. Il trasferimento è facile come allegare un file a una posta.

Con il filesystem, tutto ciò che non è fornito dalla tua applicazione è difficile da fare. Modifica manuale di un'opzione di testo? Meglio stare attenti a non aggiungere un End of Line aggiuntivo. Modifica di un'opzione binaria? Hmm, editor esadecimale?

Trasferisci la configurazione per posta? Hai bisogno di strumenti aggiuntivi: crea un file zip e collegalo. Quindi sperare che le opzioni binarie al suo interno non attivino lo scanner dei virus della posta e che riescano a passare.

Per tutti gli scopi pratici, una configurazione basata su filesystem è valida come una scatola nera per un non programmatore.

MODIFICA: Dimensione del cluster

Un file separato per ciascuna opzione può utilizzare un bel po 'di spazio su disco. Quando ogni opzione da 5 byte mangia un cluster completo da 64 KB e ne hai molti ... Fai i conti.

    
risposta data 13.02.2013 - 22:37
fonte

Leggi altre domande sui tag