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.

È stato utile?

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?

  1. Non farlo.
  2. (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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top