Qualche tempo fa ho chiesto una domanda sui formati di dati di testo personalizzati , invece di utilizzare strumenti esistenti come XML, JSON, YAML, ecc. Ora, a favore della conversione del nostro formato personalizzato in un database relazionale e alcuni segmenti di JSON (in un campo JSON ), Mi imbatto nel problema dei "dati gonfiati". Con questo intendo che ci sarà un lotto di aumento della duplicazione per il JSON (di cui c'è un bel po ', perché gran parte del sistema deve essere flessibile in diversi ambienti). Ad esempio, la parte del formato di testo personalizzato:
Data data data [#tag, #tag, ...]: some more data
Field: [id] description of data; [id] description
potrebbe essere convertito in:
{
"data": "...",
tags: ["tag", "tag", ...],
"more_data": "some more data",
"fields": [
{
"id": 123
"description": "description of data"
},
{
"id": 456
"description": "description"
}
]
}
Molti di questi nomi di proprietà JSON ora sono extra, ad es. more_data
, id
, description
, che sono duplicati su milioni di voci JSON; saremo più che quadruplicare i nostri requisiti di archiviazione dei dati. Tuttavia, questo finisce con circa 100 MB rispetto ai precedenti 25 MB, per una maggiore flessibilità e sanità mentale. Certo, questa è un'app mobile, quindi 75 MB potrebbero scioccare alcuni utenti una volta in transizione - "perché questa app occupa ora lo spazio di 4x senza funzionalità aggiuntive?". Il formato personalizzato mantiene le cose belle e compatte, ma ovviamente i parser devono essere mantenuti, ei dati non possono essere interrogati in modo efficiente su qualcosa di diverso da alcuni campi primari (che sono tutti indicizzati manualmente ... tra l'altro).
Modifica : per chiarire alcuni commenti e una risposta: i dati che ho sono altamente relazionali, ad eccezione di alcune informazioni "tag" che variano per riga del database; vale a dire, il 90% del nostro formato personalizzato può essere convertito in una struttura relazionale, ma l'altro 10% è il 'tag', che non è strutturato e può variare in base al record. Questi "tag" contengono informazioni semantiche rilevanti per gli utenti, ma mai non possono essere interrogate. E poiché non è strutturato, JSON sembra la soluzione migliore. Dovrei anche notare che i tag possono essere (teoricamente) infinitamente variabili nella loro struttura, sebbene esistano ancora elementi comuni tra i tag (ad esempio id
e description
sono generalmente comuni a tutti). Tuttavia, non sarebbe fattibile disporre di una tabella di join XXXTag
esplicitamente strutturata per ogni variazione del JSON ; Inizialmente pensavo che sarebbe stata una buona idea, per alleviare il problema nella domanda che sto chiedendo in questo momento, ma il numero di tabelle di join è teoricamente infinito, il che mi fa pensare che JSON sia appropriato per il problema. Il JSON sarebbe solo una singola colonna in una tabella relazionale, che è una piccola parte dei dati nel suo insieme. Mi dispiace per essere stato così vago con questo, ma non riesco a rendere la mia domanda abbastanza specifica da identificare il progetto reale su cui sto lavorando.
Quando ha senso gonfiare i requisiti di archiviazione per semplificare la programmazione e la manutenzione?