Quando usare un archivio dati chiave-valore contro un DB relazionale più tradizionale?
-
19-09-2019 - |
Domanda
Quando sarebbe un scegliere un archivio dati chiave-valore nel corso di un DB relazionale? Quali considerazioni vanno a decidere uno o l'altro? Quando è mix di entrambi il percorso migliore? Si prega di fornire esempi, se possibile.
Soluzione
Nella mia esperienza, se si sta chiedendo anche la questione se utilizzare tradizionale vs pratiche esoteriche, poi andare tradizionale. Mentre pratiche esoteriche sono sexy, stimolante e divertente, 99,999% delle applicazioni richiedono un approccio tradizionale.
Per quanto riguarda relazionali vs KV, la domanda che dovrebbe porci è:
Perché dovrei non consiglia di utilizzare un modello relazionale per questo scenario: ...
Dal momento che non si è descritto lo scenario, è impossibile per chiunque di dirti perché non si dovrebbe usare. Il motivo "catch all" per KV è la scalabilità, che non è un problema ora. Conoscete le regole di ottimizzazione?
- Non farlo.
- (solo per esperti) Non farlo ora.
KV è un molto soluzione ottimizzata per scalabilità che molto probabilmente sarà completamente unecessary per la vostra applicazione.
Altri suggerimenti
chiave-valore, gerarchica, carta-riducono, o sistemi di database grafico sono molto più vicini alle strategie di implementazione, essi sono fortemente legati alla rappresentazione fisica. Il motivo principale per scegliere una di queste è che se c'è un argomento convincente prestazione e si adatta la vostra strategia di elaborazione dei dati molto da vicino. Attenzione, query ad hoc di solito non sono pratico per questi sistemi, e si sta meglio decidere le vostre domande prima del tempo.
sistemi di database relazionali cercano di separare il modello di business orientato alla logica dalle strategie di rappresentazione e di elaborazione fisici sottostanti. Questa separazione è imperfetta, ma ancora abbastanza buono. sistemi relazionali sono grandi per la gestione di dati e l'estrazione di informazioni attendibili da collezioni di fatti. sistemi relazionali sono anche grandi a query ad-hoc, che gli altri sistemi sono notoriamente male. Questa è una grande misura nel mondo degli affari e molti altri luoghi. Ecco perché i sistemi relazionali sono così prevalenti.
Se si tratta di un'applicazione aziendale, un sistema relazionale è quasi sempre la risposta. Per gli altri sistemi, è probabilmente la risposta. Se si dispone di più di un problema di elaborazione dati, come una pipeline di cose che devono accadere e si dispone di grandi quantità di dati, e si sa tutte le vostre domande sulla parte anteriore, un altro sistema può essere giusto per voi.
Se i dati sono semplicemente un elenco di cose e si può derivare un identificatore univoco per ogni articolo, poi un KVS è una buona partita. Sono vicini implementazioni delle semplici strutture di dati che abbiamo imparato in informatica matricola e non consentono relazioni complesse.
Un semplice test: si può rappresentare i dati e tutte le sue relazioni come una lista collegata o una tabella di hash? Se sì, un KVS può funzionare. Se no, è necessario un RDB.
Hai ancora bisogno di trovare un KVS che funziona nel vostro ambiente. Supporto per KVSes, anche quelli principali, non è neanche lontanamente quello che è per, diciamo, PostgreSQL e MySQL / MariaDB.
Un database relazionale tradizionale ha problemi di scala al di là di un punto. Dove quel punto è un po 'dipende da ciò che si sta cercando di fare.
Tutti (la maggior parte?) Dei fornitori di cloud computing stanno fornendo gli archivi di dati chiave-valore.
Tuttavia, se si dispone di un'applicazione di dimensioni ragionevoli con una struttura dati complessa, quindi il supporto che si ottiene dall'uso di un database relazionale in grado di ridurre i costi di sviluppo.
IMO, il valore della coppia di chiavi (ad esempio i database NoSQL) funziona meglio quando i dati di fondo è non strutturati, imprevedibile, o cambiare spesso. Se non si dispone di dati strutturati, un database relazionale sta per essere più problemi che ne vale la pena perché è necessario fare un sacco di modifiche dello schema e / o salti mortali per rispettare i dati alla struttura.
KVP / JSON / NoSQL è grande perché le modifiche alla struttura dei dati non richiedono refactoring completamente il modello di dati. L'aggiunta di un campo per l'oggetto dati è semplicemente una questione di aggiungerlo ai dati. L'altro lato della medaglia è che ci sono meno vincoli e controlli di convalida in un database KVP / NoSQL di un database relazionale in modo che i dati potrebbero ottenere disordinato.
Ci sono prestazioni e risparmio di spazio benefici per i modelli di dati relazionali. dati relazionali normalizzati possono rendere la comprensione e la validazione dei dati più facile perché ci sono le relazioni chiave della tabella e vincoli per aiutarvi.
Uno dei peggiori modelli che ho visto sta cercando di avere entrambe le cose. Cercando di mettere un paio di valori-chiave in un database relazionale è spesso una ricetta per il disastro. Ti consiglio di utilizzare la tecnologia che si adatta alle vostre dati di tutto.
Se volete O (1) le ricerche di valori in base a chiavi, poi si desidera un negozio KV. Che significa, se si dispone di dati del modulo k1={foo}, k2={bar}
, ecc, anche se i valori sono strutture più grandi / nidificate, e si desidera ricerche veloci, si desidera un negozio di KV.
Anche con una corretta indicizzazione, non è possibile ottenere O (1) le ricerche in un DB relazionale per le chiavi arbitrarie. A volte questo è indicato come "le ricerche casuali".
Alliteratively dichiarato, se sempre e solo una query da una colonna, una "chiave primaria" se si vuole, di recuperare il resto dei dati, quindi utilizzando quella colonna come spazio delle chiavi e il resto dei dati come un valore in un negozio KV è il modo più efficace per fare ricerche.
Al contrario, se si esegue una query spesso i dati da una delle diverse colonne, alias sostenete un'API di query più ricco per i dati, allora si può prendere un database relazionale.