Qual è la differenza tra Cassandra e MongoDB?
Apache Cassandra e MongoDB sono due database NoSQL che archiviano i dati in un formato non tabulare. Cassandra è uno dei primi database NoSQL con un design ibrido tra un archivio tabellare e uno chiave-valore. È progettato per archiviare dati per applicazioni che richiedono prestazioni di lettura e scrittura rapide. Al contrario, MongoDB è un database di documenti creato per un uso generico. Dispone di un modello di dati flessibile che consente di archiviare dati non strutturati in un formato JSON ottimizzato chiamato JSON binario o BSON. Il database MongoDB fornisce supporto completo per l'indicizzazione e la replica con API complete e intuitive.
Quali sono le similitudini tra Cassandra e MongoDB?
Apache Cassandra e MongoDB appartengono entrambi al gruppo di database NoSQL. I database NoSQL possono archiviare dati strutturati, non strutturati e semi-strutturati senza uno schema di database.
L'archiviazione di dati nei database NoSQL non è limitata dal formato tabulare e dalle relazioni tra le tabelle, a differenza di un tradizionale sistema di gestione di database relazionali. Puoi partizionare e replicare liberamente i dati su più nodi per scalare in modo efficiente.
Inoltre, Cassandra e le prime versioni di MongoDB sono open source. Ciò significa che puoi scaricare il codice sorgente di questi database NoSQL e configurarli come preferisci.
Facebook ha sviluppato Cassandra e poi l'ha rilasciato come progetto open source con Apache. MongoDB è stato sviluppato da un piccolo gruppo di sviluppatori con MongoDB, Inc. Tutte le versioni di MongoDB rilasciate prima del 16 ottobre 2018 sono disponibili sotto la GNU Affero General Public License.
Differenze nei modelli di dati: Cassandra e MongoDB
Sebbene MongoDB e Apache Cassandra siano entrambi database NoSQL, archiviano e gestiscono i dati in modo diverso.
Cassandra
Cassandra archivia i dati come archivi chiave-valore. Consente di definire tabelle con righe e colonne, ma la struttura tabulare non viene utilizzata nell'archiviazione effettiva. Utilizza invece l'ampio modello di database orientato alle colonne, in modo che ogni riga della tabella possa avere un set di colonne diverso.
Le colonne possono essere raggruppate in famiglie di colonne in base al tipo di dati o all'utilizzo. Ogni riga ha una chiave primaria che può essere utilizzata per leggere rapidamente i dati di Cassandra.
La struttura della tabella di Apache Cassandra può essere visualizzata nell'esempio seguente.
ID cliente 1 | Colonna - Nome |
Colonna - Paese |
|
Valore - John Doe |
Valore - Stati Uniti |
||
ID cliente 2 | Colonna - Nome |
Colonna - Età |
Colonna - E-mail |
Valore - Jane Doe |
Valore - 35 |
Valore - jane_doe@example.com |
MongoDB
Al contrario, MongoDB archivia i dati senza uno schema, utilizzando un formato Binary JSON (BSON) ottimizzato. Può memorizzare diversi tipi di dati in un singolo documento in modo simile agli oggetti JSON e quindi serializzarlo con BSON.
MongoDB organizza i documenti in raccolte che possono contenere dati con strutture diverse. Il suo modello di dati è flessibile e può gestire grandi volumi di dati non strutturati.
Di seguito è riportato un esempio dei dati dei clienti in MongoDB.
customers:[ { customer_id: "1", name: “John Doe”, country: "United States" }, { customer_id: "2", age: “35” email: "jane_doe@example.com" }] |
Differenze architettoniche: Cassandra e MongoDB
A causa delle differenze nei loro modelli di dati, Cassandra e MongoDB implementano diverse funzionalità del database in modo diverso.
Unità di archiviazione di base
In Cassandra, le Sorted String Tables (SSTable) sono l'unità di archiviazione di base utilizzata per conservare i dati su disco. Una SSTable è un file che contiene un insieme ordinato di coppie chiave-valore per una particolare famiglia di colonne (tabella) e partizione. Le SSTable sono immutabili, il che significa che una volta scritte, non possono essere modificate.
In MongoDB, l'unità di archiviazione di base è un documento. Un documento è un insieme di coppie chiave-valore in cui le chiavi sono stringhe e i valori possono essere di vario tipo. Ad esempio, i valori possono essere altri documenti, matrici, stringhe, numeri, date e valori booleani. I documenti vengono archiviati in raccolte.
Linguaggio di query
Un linguaggio di query racchiude le istruzioni utilizzate per inserire e recuperare dati dal database.
Cassandra Query Language (CQL) è il linguaggio di query utilizzato su Cassandra. Sebbene abbia una sintassi e una struttura simili a quelle di SQL, Apache ha sviluppato CQL per funzionare con il modello di dati della famiglia di colonne.
D'altra parte, MongoDB utilizza MongoDB Query Language (MQL), che ha comandi simili a Node.js. MQL supporta le operazioni di creazione, lettura, aggiornamento ed eliminazione (CRUD). Puoi scrivere comandi MQL sulla shell MongoDB.
Indicizzazione
L'indicizzazione è una tecnica utilizzata nei database per migliorare la velocità e l'efficienza delle operazioni di recupero dei dati. Implica la creazione di una struttura dati che associa i valori di una o più colonne in una tabella di database alla posizione fisica dei dati corrispondenti su disco.
Cassandra supporta due tipi di indici:
- Indici secondari su singole colonne
- Indici SASI (SSTable-Attached Secondary Indexes) su più colonne
Gli indici SASI archiviano i dati degli indici direttamente nelle SSTable. Supportano query complesse come range, prefix e full-text search su colonne con un gran numero di valori univoci.
Al contrario, MongoDB supporta l'indicizzazione a livello di raccolta e a livello di campo. Fornisce diversi tipi di indice come campo singolo, composto e multichiave. Offre anche i seguenti indici:
- indice geospaziale specializzato per dati distribuiti geograficamente
- un indice di ricerca testuale per grandi volumi di dati di testo
- indici hash e in cluster per dati numerici
Concorrenza
Nei database, la concorrenza si riferisce a quando più utenti o processi possono accedere ed eseguire transazioni di database contemporaneamente senza interferire l'uno con l'altro.
Cassandra ottiene la concorrenza grazie alla consistenza girevole e all'atomicità a livello di riga. Solo un utente può operare su una singola riga alla volta.
Nella coerenza della piattaforma girevole, ogni nodo di replica mantiene un orologio vettoriale, che è una struttura di dati che tiene traccia della cronologia delle versioni dei dati associati. Quando viene eseguita un'operazione di scrittura, l'orologio vettoriale si aggiorna per riflettere la nuova versione. Quando viene eseguita un'operazione di lettura, Cassandra restituisce la versione con il timestamp più alto su tutte le repliche, il che garantisce che venga sempre restituita la versione più recente dei dati.
Al contrario, MongoDB supporta meccanismi per il controllo della concorrenza multivisione (MVCC). L'MVCC consente l'esistenza simultanea di più versioni dello stesso documento di dati. Ogni documento ha un ID di revisione univoco che viene incrementato a ogni aggiornamento. Il blocco a livello di documento e MVCC forniscono una strategia di concorrenza più solida.
Disponibilità
Disponibilità significa garantire che non vi siano tempi di inattività dei dati, anche durante l'interruzione del server. Sia Cassandra che MongoDB garantiscono la disponibilità replicando i dati su più nodi del server.
In Apache Cassandra, ogni nodo del cluster contiene repliche di dati per altri nodi. Le coordinate di ogni nodo vengono lette sul nodo corretto per scrivere o estrarre dati. Nello stesso tempo, ripara anche i dati che non sono coerenti tra i nodi. Ciò può influire sulle prestazioni su larga scala.
Al contrario, MongoDB utilizza la replica a nodo primario singolo per offrire un'elevata disponibilità dei dati. MongoDB replica i dati in set di repliche. Solo un nodo primario riceve le scritture mentre gli altri nodi replicano semplicemente i dati dal nodo primario. Tuttavia, il nodo primario crea un singolo punto di errore.
Scalabilità
Sia Cassandra che MongoDB consentono la condivisione, una tecnica per partizionare orizzontalmente i dati su più nodi di un cluster. Ad esempio, se hai migliaia di clienti, devi partizionare i dati in modo che ogni nodo contenga solo le informazioni di poche centinaia di clienti. In questo modo puoi scalare il tuo database senza causare colli di bottiglia.
Cassandra utilizza un algoritmo di hash distribuito chiamato hashing coerente per determinare quale nodo è responsabile di un particolare valore di dati. Cassandra supporta anche i nodi virtuali (vnode), che consentono a un singolo nodo fisico di avere più intervalli di dati.
Al contrario, MongoDB utilizza chiavi di sharding per identificare dove può andare il valore dei dati. Gli amministratori del database possono definire chiavi di sharding per partizionare i dati. Puoi dividere i dati in base a fattori come la posizione geografica, l'ordine alfabetico o qualsiasi altro sistema più efficiente per il tuo set di dati.
Quando usare Cassandra e quando MongoDB
L'elevata operatività e l'architettura distribuita di Cassandra la rendono una buona scelta per i requisiti di alta disponibilità. La capacità di MongoDB di gestire dati non strutturati con un approccio orientato ai documenti lo rende utile per i sistemi in cui i dati cambiano costantemente.
Ecco alcuni fattori da considerare quando si sceglie tra le due opzioni.
Formato dei dati
Apache Cassandra ha un sistema di archiviazione di dati più strutturato rispetto a MongoDB. Se i dati con cui stai lavorando sono in un formato fisso, Cassandra è più adatto.
Se i dati sono più dinamici e non hanno una struttura coerente, MongoDB funziona meglio.
Disponibilità
MongoDB ha un nodo primario e quindi una serie di repliche. Se il nodo primario non funziona, MongoDB impiega alcuni minuti a scegliere un nodo di replica da sostituire. Ciò può causare un breve periodo di inattività.
Cassandra utilizza un sistema di nodi distribuiti con molti nodi principali, che consente una disponibilità di uptime del 100%.
Scalabilità
MongoDB offre un maggiore controllo durante la scalabilità. Puoi decidere come partizionare i dati tra i nodi in base alle tue esigenze e gestire database distribuiti su larga scala.
Le prestazioni di Cassandra potrebbero diminuire leggermente su larga scala, a seconda dei valori dei dati.
Linguaggio di query
Sia Cassandra Query Language (CQL) che MongoDB Query Language (MQL) sono linguaggi di query altamente efficaci. Tuttavia, CQL è molto più simile a SQL, il che consente di utilizzarlo facilmente se si è già esperti in SQL.
MQL ha implementazioni e sintassi diverse e può avere una curva di apprendimento più ripida.
Supporto per linguaggi di programmazione
MongoDB supporta dodici linguaggi di programmazione: C, C++, C#, Go, Java, Node.js, PHP, Python, Ruby, Rust, Scala e Swift.
Cassandra supporta meno linguaggi, come Java, JavaScript, Perl, Ruby, Scala, C#, Erlang, PHP, Python, ecc.
Riepilogo delle differenze: Cassandra e MongoDB
Apache Cassandra |
MongoDB |
|
Modello di dati |
Cassandra utilizza un modello di dati a colonne larghe più strettamente correlato ai database relazionali. |
MongoDB si allontana completamente dal modello relazionale archiviando i dati come documenti. |
Unità di archiviazione di base |
Tabelle di stringhe ordinate. |
Documenti JSON serializzati. |
Indicizzazione |
Cassandra supporta indici secondari e SASI per l'indicizzazione per colonna o colonne. |
MongoDB indicizza a livello di raccolta e a livello di campo e offre diverse opzioni di indicizzazione. |
Linguaggio di query |
Cassandra usa CQL. |
MongoDB utilizza MQL. |
Concorrenza |
Cassandra ottiene la concorrenza con l'atomicità a livello di riga e la consistenza girevole. |
MongoDB utilizza MVCC e il blocco a livello di documento per garantire la concorrenza. |
Disponibilità |
Cassandra dispone di più nodi master, partizionamento dei nodi e replica delle chiavi per offrire un'elevata disponibilità. |
MongoDB utilizza un singolo nodo primario e più nodi di replica. In combinazione con lo sharding, MongoDB offre elevata disponibilità e scalabilità. |
Partizionamento |
Algoritmo di hashing coerente, minore controllo per gli utenti. |
Gli utenti definiscono le chiavi di sharding e hanno un maggiore controllo sul partizionamento. |
In che modo AWS può supportare i tuoi requisiti di Cassandra e MongoDB?
Amazon Web Services (AWS) offre due servizi che supportano i requisiti comuni di Apache Cassandra e MongoDB.
Amazon Keyspaces (per Apache Cassandra) è un database gestito ad alta disponibilità che consente di spostare i carichi di lavoro di Cassandra nel cloud. Amazon Keyspaces è serverless, quindi paghi soltanto in base alle risorse che utilizzi e il servizio può dimensionare automaticamente le tabelle in risposta al traffico delle applicazioni. Puoi creare applicazioni che offrono il servizio a migliaia di richieste al secondo con throughput e storage essenzialmente illimitato.
Inoltre, Amazon DocumentDB (compatibile con MongoDB) è un database di documenti JSON nativo completamente gestito. Rende facile e conveniente gestire carichi di lavoro di documenti critici praticamente su qualsiasi scala senza gestire l'infrastruttura. Amazon DocumentDB semplifica la tua architettura fornendo best practice di sicurezza integrate, backup continui e integrazioni native con altri servizi AWS.
Inizia a usare i servizi di database gestiti di Apache Cassandra e MongoDB su AWS creando un account AWS oggi stesso.