Ha senso avere un formato di dati testuali personalizzato?

1

Abbiamo un database che supporta un'applicazione iOS e Android i cui dati primari sono un semplice campo di testo. Abbiamo uno strumento di compilazione che crea il database - prendendo un file txt grezzo che è un formato dati personalizzato, che assomiglia a:

---
.id SOME_ID
.author AUTHOR_NAME
.field MORE_DATA
.data_title TITLE

Data data data [#tag, #tag, ...]: some more data

Field: [id] description of data; [id] description

Examples:
 - e.x. some example describing the entry
 - e.x. another example

Closing field: more data; more data
---

o qualcosa del genere.

Per creare il database, è stato implementato un parser per prelevare il file txt raw, applicare alcune trasformazioni / ottimizzazioni per risparmiare spazio di archiviazione (ad esempio comprimere voci simili) e quindi convertirlo in un formato binario. La voce risultante è memorizzata in un formato simile ma compresso nel database, anche come campo di testo non elaborato che chiameremo entry_data nella tabella entries .

Tutti i consumatori del database, poiché i dati sono memorizzati essenzialmente nello stesso formato, anche devono implementare un parser molto simile, ma per il formato compresso in entry_data . Ciò significa che Android e iOS hanno entrambi circa 20-30 file che gestiscono l'analisi, nonché l'app Web che i dipendenti utilizzano per aggiornare il database.

Credo che il motivo iniziale per questo formato personalizzato sia dovuto alla facilità di aggiunta per le persone che lavorano sul database, nonché per motivi di spazio di archiviazione (non sono sicuro, ma penso che 6-8 anni fa i dispositivi mobili avevano limiti bassi sulla memoria disponibile). In ogni caso, il database è solo di circa 8 MB compressi, ma è diviso in diversi blocchi, probabilmente anche per evitare restrizioni sui limiti delle dimensioni dei file su dispositivi molto vecchi, che non supportiamo nemmeno più.

Il problema più grande con questo formato personalizzato è che anche piccole modifiche, come l'aggiunta di campi, provocano una cascata di modifiche attraverso lo strumento web utilizzato dalle persone che lavorano sul database, lo strumento di creazione del database, così come tutti i clienti. Quindi, se vogliamo aggiungere un campo category , dobbiamo apportare modifiche ai parser in 4 diverse basi di codice, tutte in lingue diverse (JavaScript, Java e Objective-C).

Tutte le nostre relazioni di dati possono essere modellate con un database relazionale. Non c'è motivo di includere esempi nella voce: gli esempi potrebbero essere facilmente collegati tramite una tabella di join entry_examples . Ci sono molti altri campi che hanno dati duplicati tra le voci, che potrebbero anche essere risolti con semplici chiavi esterne.

Il mio altro pensiero è che lo spazio di archiviazione dei dati è molto meno un problema nei dispositivi moderni - se perdere la complessa compressione gonfia il nostro database da 8 MB a 32 MB, che è quello che hanno molte altre app della stessa categoria ( o anche molto di più), non credo che gli utenti se ne dispiaceranno, soprattutto se il passaggio a un formato dati standard ci consente di aggiungere funzionalità nelle app più rapidamente.

Ha senso avere formati di dati personalizzati come il nostro, quando ci sono formati standard ampiamente adottati per i dati (ad es. struttura relazionale in database relazionali, o anche database NoSQL che hanno le voci come JSON strutturato)?

    
posta Chris Cirefice 18.10.2016 - 16:39
fonte

1 risposta

9

Does it make sense to have custom data formats like ours, when there are widely-adopted standard formats for data (e.g. relational structure in relational databases, or even NoSQL databases that have the entries as structured JSON)?

No.

Il fatto è che non esistono solo cose come JSON e database relazionali, sono standard a lungo termine, il che significa che intorno a loro sono stati costruiti ecosistemi di strumenti robusti e robusti. Tutte le cose comuni che potresti avere bisogno di fare con i tuoi dati, qualcuno ha già pubblicato una libreria open source di cui puoi avere accesso gratuitamente. Se si inizia da zero con un formato proprietario, è necessario creare tutti gli strumenti da soli. Farai degli errori lungo il percorso - errori che le persone che hanno scritto le librerie per i formati standard hanno già fatto e risolto.

Questo è esattamente il tipo di scenario per cui è stata creata la frase "non reinventare la ruota". Se i dati sono piccoli e semplici, usa JSON. (Non database basati su NoSQL supportati da JSON, solo file di testo JSON piatti.) Se si tratta di un set di dati di grandi dimensioni ed è necessario eseguire query non banali su di esso, utilizzare un database relazionale.

Inoltre, un po 'di consulenza gratuita: non utilizzare i database NoSQL a meno che non si esegua effettivamente qualcosa di "scala web" (cioè dello stesso ordine di grandezza di Amazon, Google o Facebook) come i fastidi che porta tende a superare i benefici finché non sei abbastanza grande da rendere questi necessari piuttosto che "belli da avere". L'ACID garantisce che le offerte di modelli relazionali possono essere la cosa migliore che sia mai accaduta ai tuoi dati, se li lasci fare.

    
risposta data 18.10.2016 - 16:50
fonte

Leggi altre domande sui tag