Utilizzo dei DB NoSQL con valori-chiave in relazione

6

Sono nuovo di NoSQL e ho sempre sentito parlare di DB " valore-chiave " come Cassandra o Riak e mi aspettavo che le loro tabelle avessero letteralmente due colonne: una chiave e un valore-col. Ho appena iniziato a lavorare in un nuovo negozio in cui gli ingegneri senior hanno scelto Cassandra come datastore principale e impostato personalmente il proprio cluster Cassandra. Basandomi sul design e sull'uso dei tavoli, tuttavia, sto iniziando a sospettare che non stiamo usando Cassandra come "la strada giusta"; cioè, il modo in cui il suo voluto deve essere usato (come un DB KV).

Le tabelle sono tutte relazionali totalmente , proprio come un DB MySQL o Postgres, con colonne UUID non chiave in alcune tabelle che agiscono come chiavi primarie per i record in altri tabelle. E le tabelle sono larghe , a volte con più di 10 colonne e più colonne che costituiscono la chiave della tabella.

Tuttavia in Cassandra non puoi fare join così il software sta saltando attraverso tutti questi ridicoli ostacoli per trattare il datastore KV non relazionale come se fosse relazionale, dove il codice interroga i dati per una tabella e recupera un UUID ("chiave" ) per i record a cui desidera accedere in un'altra tabella, quindi interroga la seconda tabella per i record con un UUID / chiave corrispondente. Per me questo sembra pazzesco. I pensa ottengo la frase chiave "Il codice è re", ma sembra essere molto stonato e inefficiente a colpire il database più volte ea ricucire i dati insieme nel livello dell'app ... Mi sento così significa che i nostri dati sono in realtà relazionali e che dovremmo utilizzare alcuni RDBMS.

Quindi tutto questo per chiedere: È veramente questo il modo in cui Cassandra era previsto per essere usato, o se le tabelle sono veramente coppie di KV a 2 colonne, o è l'uso corretto di Cassandra qualcos'altro interamente?

    
posta smeeb 15.02.2017 - 12:14
fonte

1 risposta

9

Se usi Cassandra e hai bisogno di emulare un sacco di JOIN, allora stai sbagliando. La ragione di tale modello di dati è solitamente che stai seguendo l'abitudine che hai imparato dai database relazionali e normalizzi i tuoi dati il più possibile. Ciò porta a dati diffusi su più tabelle. Questa è una cattiva idea in Cassandra, perché non hai un modo efficiente per RACCOGLIARE queste tabelle di nuovo insieme.

La prima cosa da imparare quando passi da un database relazionale a Cassandra è che non devi avere paura della duplicazione dei dati . Le ridondanze nei modelli di dati di Cassandra sono normali e spesso raccomandate. Prendiamo un semplice database di fatture, per esempio.

Una fattura in un database relazionale avrebbe una voce in una tabella per il capo della fattura e diverse voci in un'altra tabella per le posizioni della fattura. In Cassandra lasceresti cadere l'head-table e duplichi invece tutte le informazioni dalla testa in tutte le righe del tavolo delle posizioni.

In un database relazionale, la tabella delle fatture probabilmente avrà una colonna "productId" che è la chiave primaria di un'altra tabella "Prodotti". A Cassandra probabilmente esisterebbe ancora una tabella di prodotti, ma dovresti replicare tutti i campi che sono rilevanti per le fatture nella tabella delle posizioni delle fatture.

L'obiettivo di tutto questo è che è possibile mostrare una fattura all'utente con tutte le informazioni rilevanti semplicemente facendo una singola query sulla tabella delle posizioni di fatturazione.

Il risultato è che le tabelle di Cassandra tendono ad essere molto più ampie rispetto ai database relazionali. Un sacco di piccole tabelle di solito significa che è necessario interrogare un sacco di tabelle diverse per ottenere le informazioni necessarie. Sì, Cassandra è chiamato un database di valori-chiave, ma ciò non significa che esiste una restrizione di dimensione per chiavi o valori o che i valori non devono essere più di un campo. I valori possono essere grandi quanto vuoi.

Per ulteriori letture, raccomando l'articolo Regole di base di Cassandra Data Modeling di DataStax.

    
risposta data 15.02.2017 - 15:03
fonte

Leggi altre domande sui tag