Cassandra - Modello di dati
Il modello di dati di Cassandra è significativamente diverso da quello che normalmente vediamo in un RDBMS. Questo capitolo fornisce una panoramica di come Cassandra memorizza i propri dati.
Grappolo
Il database Cassandra è distribuito su più macchine che operano insieme. Il contenitore più esterno è noto come Cluster. Per la gestione degli errori, ogni nodo contiene una replica e, in caso di errore, la replica prende in carico. Cassandra dispone i nodi in un cluster, in un formato ad anello, e assegna loro i dati.
Keyspace
Keyspace è il contenitore più esterno per i dati in Cassandra. Gli attributi di base di un Keyspace in Cassandra sono:
Replication factor - È il numero di macchine nel cluster che riceveranno copie degli stessi dati.
Replica placement strategy- Non è altro che la strategia per posizionare le repliche sul ring. Abbiamo strategie comesimple strategy (strategia rack-aware), old network topology strategy (strategia basata su rack) e network topology strategy (strategia condivisa dal datacenter).
Column families- Keyspace è un contenitore per un elenco di una o più famiglie di colonne. Una famiglia di colonne, a sua volta, è un contenitore di una raccolta di righe. Ogni riga contiene colonne ordinate. Le famiglie di colonne rappresentano la struttura dei dati. Ogni spazio delle chiavi ha almeno una e spesso molte famiglie di colonne.
La sintassi per creare un Keyspace è la seguente:
CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
La figura seguente mostra una vista schematica di un Keyspace.
Famiglia di colonne
Una famiglia di colonne è un contenitore per una raccolta ordinata di righe. Ogni riga, a sua volta, è una raccolta ordinata di colonne. La tabella seguente elenca i punti che differenziano una famiglia di colonne da una tabella di database relazionali.
Tabella relazionale | Famiglia colonna Cassandra |
---|---|
Uno schema in un modello relazionale è fisso. Una volta definite determinate colonne per una tabella, durante l'inserimento dei dati, in ogni riga tutte le colonne devono essere riempite almeno con un valore nullo. | In Cassandra, sebbene le famiglie di colonne siano definite, le colonne non lo sono. È possibile aggiungere liberamente qualsiasi colonna a qualsiasi famiglia di colonne in qualsiasi momento. |
Le tabelle relazionali definiscono solo le colonne e l'utente compila la tabella con i valori. | In Cassandra, una tabella contiene colonne o può essere definita come una famiglia di super colonne. |
Una famiglia di colonne Cassandra ha i seguenti attributi:
keys_cached - Rappresenta il numero di posizioni da conservare nella cache per SSTable.
rows_cached - Rappresenta il numero di righe il cui intero contenuto verrà memorizzato nella cache.
preload_row_cache - Specifica se si desidera prepopolare la cache delle righe.
Note − A differenza delle tabelle relazionali in cui lo schema di una famiglia di colonne non è fisso, Cassandra non forza le singole righe ad avere tutte le colonne.
La figura seguente mostra un esempio di una famiglia di colonne Cassandra.
Colonna
Una colonna è la struttura dati di base di Cassandra con tre valori, vale a dire il nome della chiave o della colonna, il valore e un timestamp. Di seguito è riportata la struttura di una colonna.
SuperColumn
Una supercolonna è una colonna speciale, quindi è anche una coppia chiave-valore. Ma una super colonna memorizza una mappa di sottocolonne.
Generalmente le famiglie di colonne vengono memorizzate su disco in singoli file. Pertanto, per ottimizzare le prestazioni, è importante mantenere le colonne che è probabile che interrogherai insieme nella stessa famiglia di colonne e una super colonna può essere utile qui. Di seguito è riportata la struttura di una super colonna.
Modelli di dati di Cassandra e RDBMS
La tabella seguente elenca i punti che differenziano il modello di dati di Cassandra da quello di un RDBMS.
RDBMS | Cassandra |
---|---|
RDBMS si occupa di dati strutturati. | Cassandra si occupa di dati non strutturati. |
Ha uno schema fisso. | Cassandra ha uno schema flessibile. |
In RDBMS, una tabella è un array di array. (RIGA x COLONNA) | In Cassandra, una tabella è un elenco di "coppie chiave-valore nidificate". (ROW x tasto COLUMN x valore COLUMN) |
Il database è il contenitore più esterno che contiene i dati corrispondenti a un'applicazione. | Keyspace è il contenitore più esterno che contiene i dati corrispondenti a un'applicazione. |
Le tabelle sono le entità di un database. | Le tabelle o le famiglie di colonne sono l'entità di uno spazio delle chiavi. |
Row è un record individuale in RDBMS. | Row è un'unità di replica in Cassandra. |
La colonna rappresenta gli attributi di una relazione. | Column è un'unità di archiviazione in Cassandra. |
RDBMS supporta i concetti di chiavi esterne, join. | Le relazioni sono rappresentate utilizzando le raccolte. |