Domanda

Al momento sono abbastanza curioso di sapere come altri programmatori organizzano i dati in file. Qualcuno può consigliare qualche buon articolo o libro sulle migliori pratiche per la creazione di strutture di file?

Ad esempio, se hai creato il tuo software per qualsiasi scopo, lasci i dati salvati come testo normale, li serializzi, li codifichi in XML e perché lo fai?

Ci sono segreti che mi sono perso?

È stato utile?

Soluzione

In generale, scegli la cosa più semplice che possa funzionare, almeno all'inizio. Considera, ad esempio, UNIX, in cui la maggior parte dei file di configurazione non sono altro che campi delimitati da spazi bianchi o campi delimitati da un altro carattere (come / etc / passwd, che utilizza i delimitatori ": " perché il campo GCOS può contenere spazi vuoti).

Se i tuoi dati richiedono molta più struttura, chiediti " quali strumenti posso usare facilmente? " Python e Ruby hanno JSON e YAML, per esempio.

XML è fondamentalmente utile se hai già molte cose basate su XML, O ti aspetti di trasformare l'XML in un modulo visualizzabile in un browser. Altrimenti, di solito è molto pesante (dimensione del codice, complessità) per quello che ottieni da esso.

Altri suggerimenti

Indipendentemente dal formato scelto, ricordati di memorizzare una sorta di numero di versione all'interno (sono abbastanza sicuro che dovrai introdurre alcune modifiche).

Il formato dipende fortemente dall'applicazione e dalla quantità di dati. Per alcune applicazioni XML è appropriato, per altre applicazioni le strutture a dimensione fissa memorizzate in un file binario sono buone.

Uso molti formati diversi, a seconda della situazione, ad esempio:

  • file di testo semplice (delimitato) per la memorizzazione di set di dati per l'analisi di Matlab e R
  • file binari - per la memorizzazione di strutture di dimensioni fisse (con dimensioni dinamiche l'accesso casuale diventa difficile senza mantenere una matrice separata di offset per gli elementi). Uno degli aspetti positivi che hai prestazioni ed efficienza dello spazio (perché la maggior parte dei database memorizza i dati in formato binario?), Ma non è molto buono per gli esseri umani con cui lavorare. Ricorda l'endianessa.
  • XML: in genere per i dati di configurazione o i dati che desidero fornire ad altre applicazioni degli utenti (insieme a XSD). L'altro lato può scrivere una bella trasformazione XSLT o consumare i dati in altro modo (ovviamente potrebbero fare lo stesso con testo semplice o dati binari data la descrizione del formato)

A meno che tu non abbia requisiti univoci, usa qualcosa per cui esiste già una libreria matura, così puoi evitare di scrivere il tuo codice di analisi. Ciò significa che XML / JSON, ecc., Come hanno detto le persone.

Un altro aspetto interessante sono i buffer di protocollo di Google ( http://code.google.com/p/ protobuf ). Lì scrivi una definizione di messaggio comune e il compilatore del buffer di protocollo genera oggetti per compilare, serializzare e deserializzare i dati per te. In genere il formato è binario, ma puoi usare la loro classe TextFormat per scrivere anche testo semplice simile a JSON. La cosa bella di protobufs è che il codice di versione è generato per te. Nella versione 2 del tuo formato di file, tutto ciò che devi fare è aggiungere campi al file di definizione .proto. La nuova versione può leggere il vecchio formato di file e lascia vuoti i nuovi campi. Non è esattamente ciò per cui sono stati progettati i protobuf, ma creano un formato di file binario semplice ed efficiente per i messaggi personalizzati e il codice viene generato per te.

Vedi anche Thrift di Facebook, ora nell'incubatrice di Apache.

Con il passare degli anni mi sono trovato sempre più a favorire il testo a meno che non sia semplicemente fuori questione. Le CPU sono abbastanza veloci ora che possiamo decodificarle abbastanza velocemente.

Ovviamente, quando devi aggiornare frequentemente piccole informazioni all'interno di un file di grandi dimensioni, questa non è un'opzione, ma molto probabilmente descrive un database.

A questo punto ci vorrebbe una situazione insolita per farmi andare con qualcosa di diverso da una di queste due opzioni.

+1 per XML. Ha un po 'di sovraccarico, ma è facile da analizzare, leggere e eseguire il debug. Può essere rigoroso, se si utilizza uno schema. Facile da trasformare con XSLT e molto portatile (in filo o semplicemente in pendrive :)

Questo dipende davvero dalla situazione particolare. Dovresti considerare le tue opzioni rispetto alle risposte a varie domande:

  • Di quanti dati hai bisogno per archiviare? Devi ottimizzare per una rappresentazione compatta?
  • Le prestazioni di lettura / scrittura sono critiche? Devi ottimizzare l'accesso al disco e la serializzazione e la deserializzazione a basso impatto?
  • Hai bisogno di un accesso casuale all'interno del file? Devi ottimizzare la struttura per la ricerca all'interno dei dati?
  • Questi dati verranno utilizzati su sistemi diversi, possibilmente con codifiche di caratteri diverse? Devi ottimizzare la portabilità?

La natura dei dati stessi avrà un impatto. È una struttura di elenco piatta? È un albero? È un grafico ciclico? Sono record di larghezze fisse o variabili?

Una volta che le risposte a queste domande sono note, puoi selezionare tra le tue opzioni, rendendolo il più semplice possibile. Spesso le opzioni popolari (XML, CSV, YAML) si adattano ai tuoi scopi. In caso contrario, dovrai sviluppare la tua formattazione e le tue procedure di scrittura e lettura.

Ci sono così tante possibilità, ma la più pragmatica deve essere XML

  • Esistono librerie XML decenti per quasi tutte le piattaforme di sviluppo
  • La maggior parte delle piattaforme consente la serializzazione di grafi di oggetti con un paio di righe di codice, quindi XML è indolore da implementare
  • La maggior parte delle piattaforme ha un lettore di memoria e / o streaming, quindi puoi gestire file molto grandi senza un uso eccessivo della memoria
  • La maggior parte delle piattaforme fornisce un trasformatore XSLT, quindi puoi spostare i file da un formato all'altro, anche da XML a non XML
  • Esistono estensioni di indicizzazione per XML per gestire anche file di grandi dimensioni
  • XML ha XSD per convalidare il formato prima di tentare di leggerlo
  • XML è in grado di rappresentare qualsiasi oggetto semplice o complesso
  • Se sei preoccupato per le dimensioni del file, comprimi l'XML finale. Questa tecnica è utilizzata in Microsoft Office ecc.
  • XML è ancora leggibile dall'uomo
  • XML è uno standard comune
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top