Introduzione al modello di dati in Cassandra
Apache Cassandra è diventato uno dei database NoSQL più potenti. È la scelta giusta quando si desidera elevata disponibilità e scalabilità senza compromettere le prestazioni, in particolare per le applicazioni che non possono permettersi di perdere dati. In questo argomento, impareremo il modello di dati in Cassandra.
Un dato di fatto, gli ingegneri di Cassandra sono oggi tra i migliori professionisti della tecnologia a pagamento. Aziende come Netflix, Instagram e Apple utilizzano Cassandra per offrire un'esperienza cliente altamente personalizzata. Per ottenere le giuste prestazioni, è necessario progettare attentamente lo schema specifico per il problema aziendale. In questo articolo, esamineremo il modello di dati Cassandra che è significativamente diverso da quello che vediamo in RDBMS.
Cassandra Data Model Rules
In parole semplici, il modello di dati è la struttura logica di un database. Descrive come vengono archiviati e accessibili i dati e le relazioni tra i diversi tipi di dati.
Scegliere il giusto modello di dati può essere la parte più difficile dell'utilizzo di un database NoSQL come Cassandra. Come accennato in precedenza, la modellazione dei dati in Cassandra è diversa da quella che vediamo in un RDBMS.
Chiave di partizione e chiave di clustering sono i termini di cui chiunque abbia a che fare con Cassandra dovrebbe essere a conoscenza. Prima di approfondire le regole di base della modellazione dei dati in Cassandra, esaminiamo rapidamente il significato di questi termini,
Partizione
Cassandra è un database distribuito in cui i dati sono partizionati e memorizzati su diversi nodi in un cluster. I dati vengono suddivisi utilizzando una chiave di partizione, che può essere uno o più campi dati. Questa chiave di partizione viene utilizzata per creare un meccanismo di hashing per diffondere i dati in modo uniforme su tutti i nodi.
Grappolo
Un cluster è una raccolta di nodi che rappresentano un singolo database logico. Una chiave di clustering è costituita da uno o più campi utilizzati per raggruppare i dati in una partizione.
Nei ristoranti di questa tabella, i dati verranno partizionati utilizzando country_code, state_name e city_name e all'interno di tale partizione i dati verranno raggruppati e ordinati in base a opening_data e restaurant_name.
Ora, diamo un'occhiata alle due regole per la modellazione dei dati che dovrebbero essere tenute a mente.
- I dati sono distribuiti uniformemente in tutto il cluster
- Leggi il minor numero possibile di partizioni
Diamo un'occhiata a ciò che queste regole stanno cercando di comunicare
- Sappiamo cosa è giusto un cluster? Un cluster è composto da più nodi. Vogliamo partizionare i dati tra questi nodi in modo tale che ogni nodo abbia approssimativamente la stessa quantità di dati. Come sappiamo, i dati vengono partizionati in diversi nodi usando un hash della chiave di partizione (che è la prima chiave della chiave primaria), quindi in breve "Dovresti scegliere una buona chiave primaria".
- Ogni partizione risiede su un nodo diverso, quindi quando si recuperano i dati, si desidera assicurarsi che i dati vengano recuperati dal minor numero possibile di partizioni. Se la query richiede dati da partizioni diverse, verrà emesso un comando per separare i nodi per ottenere quei dati, che saranno sovraccarichi e porteranno alla latenza.
La chiave per un modello di dati efficiente sarebbe un equilibrio tra queste due regole.
Gestire le relazioni in Cassandra
Una cosa da tenere a mente è che la modellazione dei dati in Cassandra viene eseguita utilizzando l'approccio guidato dalla query, diversamente da RDBMS in cui si identificano prima le entità, si creano tabelle e si formano query utilizzando JOINS per recuperare i dati.
Per dirla in parole semplici, non modelliamo attorno a relazioni o oggetti, modelliamo attorno a query.
1. Relazione uno a uno
Considerare in un'università uno studente può registrarsi per un solo seminario. Questa è una relazione uno a uno. Mantenendo la regola n. 1 pensiamo alle domande che vogliamo. Voglio cercare il seminario a cui partecipa uno studente. In questo caso, creeremo solo una tabella. La tabella dovrebbe contenere i dettagli dello studente e i dettagli del seminario.
2. Relazione uno-a-molti
Nello stesso contesto, se volessi cercare tutti gli studenti che frequentano un seminario. Invece di usare la stessa tabella e iterare su ogni riga per ottenere il nome dello studente per quel particolare seminario, posso creare un'altra tabella che suddivide i dati in base al nome del seminario. Quindi quando emetto la query, colpisce solo un nodo anziché andare a tutti i nodi per ottenere il nome del seminario.
3. Relazione da molti a molti
Ora, consideriamo, uno studente può frequentare molti seminari e un seminario può essere frequentato da molti studenti. Qui abbiamo molte o molte relazioni. In questo caso, è possibile sfruttare le due tabelle precedenti per eseguire query senza avere il sovraccarico di eseguire query complesse utilizzando Joins, che normalmente si farebbe in RDBMS.
Importanza di Cassandra
Con la rapida espansione dei dati digitali, diventa più importante disporre di un database altamente scalabile e tollerante ai guasti. Vorrei elencare alcuni punti sul perché dovresti usare Cassandra
- Accensione delle operazioni di lettura veloce: abbiamo discusso di come modellare i dati in modo corretto possa ottimizzare le operazioni di lettura su vasta scala.
- Tollerante agli errori: i dati vengono replicati su tutti i nodi, quindi anche se un nodo si blocca i dati sono al sicuro.
- Ottimizzazione personalizzata: è possibile configurare Cassandra affinché funzioni in base al carico di lavoro. Se si scrivono molti dati, come la registrazione, è possibile modificarli per gestire i sistemi pesanti di scrittura. Sono disponibili diverse altre opzioni di ottimizzazione.
- Gestione di elevati volumi di dati: in base alle dimensioni del cluster, Cassandra è in grado di gestire enormi volumi di dati.
Come modellare i dati in Cassandra?
Una buona modellazione dei dati segue questi passaggi
- Concettualizza le query richieste dalla tua applicazione
- Creazione di tabelle per soddisfare tali query
Prima di applicare queste regole, una cosa da tenere a mente è "Ci concentriamo sull'ottimizzazione delle nostre operazioni di lettura anche se richiede la duplicazione dei dati". Possiamo avere molte tabelle che possono contenere dati quasi simili.
Ora, considera che vogliamo un database che memorizzi informazioni sui ristoranti. Mettiamo un vincolo che i nomi dei ristoranti devono essere univoci.
La tabella seguente può essere utilizzata quando vogliamo cercare in base al nome del ristorante:
Ora, se vogliamo cercare i ristoranti in una determinata posizione, scriveremmo una query che scorre attraverso tutte le righe e recupera i nomi dei ristoranti.
Invece, tenendo presente la regola n. 2, possiamo facilmente creare un'altra tabella che soddisferà le nostre necessità.
Ora i nostri dati saranno partizionati in modo tale che un nodo nel cluster disponga di ristoranti per una determinata posizione. Ciò ottimizzerà le nostre query di lettura, poiché la ricerca delle query avverrà solo su un nodo con righe molto inferiori rispetto alla prima tabella che abbiamo creato.
E se volessimo cercare ristoranti in una determinata città, possiamo creare un'altra tabella anziché scorrere tutte le righe in una singola partizione della tabella sopra.
Conclusione
In questo articolo, ho trattato alcune best practice che puoi seguire su come affrontare la modellazione dei dati in Cassandra. Se si comprendono questi concetti e si è in grado di riconoscere in modo efficiente il tipo di query richieste dall'applicazione, è possibile progettare un modello di dati eccezionale per ottenere prestazioni elevate dal database.
Articoli consigliati
Questa è una guida al modello di dati in Cassandra. Qui discutiamo come modellare i nostri dati in Cassandra insieme alle regole e all'importanza dei modelli di dati Cassandra. Puoi anche consultare i nostri altri articoli suggeriti per saperne di più -
- Che cos'è la modellazione dei dati?
- Modelli di dati in DBMS
- Domande di intervista sulla modellazione dei dati
- Modellazione dei dati Cassandra