Introduzione
Se stai cercando un database NoSQL, probabilmente ti sei imbattuto in Cassandra e MongoDB. Tuttavia, queste due popolari scelte NoSQL hanno molto meno in comune del previsto.
In questo tutorial spieghiamo le somiglianze e le differenze tra Cassandra e MongoDB.
Cassandra vs MongoDB:somiglianze
Quando si effettua un confronto tra due sistemi di database, di solito si deduce che ci sono anche somiglianze condivise. Sebbene esistano, per quanto riguarda Cassandra e MongoDB, queste somiglianze sono limitate.
Database NoSQL
Soprattutto, Cassandra e MongoDB sono classificati come database NoSQL. NoSQL (non solo SQL) è un'alternativa popolare ai database tradizionali. A differenza dei database relazionali che conosciamo, NoSQL può archiviare grandi quantità di dati senza richiedere una categoria logica o uno schema.
Poiché i database tradizionali non erano in grado di gestire molti dati non strutturati in tempo reale, i database NoSQL hanno raccolto la sfida scalando orizzontalmente.
Di conseguenza, Cassandra è stato rilasciato nel 2008, come uno di questi database NoSQL. Un anno dopo è stato creato MongoDB.
Software open source
Un'altra caratteristica comune tra questi due è che sono software open source gratuiti. Puoi scaricare i pacchetti di database, impostarli e configurarli senza alcun costo.
Inizialmente creata dagli sviluppatori di Facebook, Cassandra è ora di proprietà del progetto Apache e fa parte della sua comunità open source. D'altra parte, MongoDB è uno dei sistemi di gestione di database più popolari al mondo con una forte comunità di sviluppatori MongoDB.
Impossibile sostituire RDBMS e ACID
Tieni presente che né Cassandra né MongoDB possono sostituire un tradizionale sistema di gestione di database relazionali (RDBMS). Se devi archiviare i dati utilizzando righe e colonne, in un formato strutturato, attieniti a uno dei tanti database relazionali disponibili.
Inoltre, se hai bisogno di database compatibili con ACID, NoSQL probabilmente non è la soluzione migliore. Per le transazioni di database che garantiscono atomicità, coerenza, isolamento e durabilità, è preferibile utilizzare database relazionali, come MySQL o PostgreSQL.
Cassandra vs MongoDB:differenze
Disponibilità dei dati
Una delle differenze più significative tra MongoDB e Cassandra è la loro strategia relativa alla disponibilità dei dati. Questa funzione dipende dal numero di master slave in un cluster.
MongoDB ha un unico master che dirige più nodi slave. Se il nodo master si interrompe, uno dei nodi slave assume il suo ruolo. Sebbene la strategia del failover automatico garantisca il ripristino, potrebbe essere necessario fino a un minuto prima che lo slave diventi il master. Durante questo periodo, il database non è in grado di rispondere alle richieste.
Cassandra , invece, utilizza un modello diverso. Invece di avere un nodo master, utilizza più master all'interno di un cluster. Con più master presenti, non c'è paura di tempi di inattività. Il modello ridondante garantisce un'elevata disponibilità in ogni momento.
Scalabilità
La scalabilità è una funzionalità direttamente collegata al modello di cluster. Quindi, Cassandra e MongoDB presentano differenze significative tra le loro scalabilità di scrittura.
Solo il nodo master può scrivere e accettare input. Nel frattempo, i nodi slave vengono utilizzati solo per le letture. Di conseguenza, come MongoDB ha un solo nodo master, è limitato in termini di scalabilità di scrittura.
Avere più nodi master aumenta le cassandre capacità di scrittura. Consente a questo database di coordinare numerose scritture contemporaneamente, tutte provenienti dai suoi master. Pertanto, più nodi master ci sono in un cluster, migliore è la velocità di scrittura (scalabilità).
Modello di dati
Ora, esaminiamo il modello dati di questi due database NoSQL.
MongoDB il modello dati è classificato come orientato agli oggetti e ai documenti. Ciò significa che può rappresentare qualsiasi tipo di struttura di oggetti che può avere proprietà o anche essere annidata per più livelli.
Quando si tratta di Cassandra, c'è un modello più tradizionale. Cassandra ha una struttura di tabella che utilizza righe e colonne. Tuttavia, è più flessibile dei database relazionali poiché non è necessario che ogni riga abbia le stesse colonne. Al momento della creazione, a queste colonne viene assegnato uno dei tipi di dati Cassandra disponibili, basandosi in definitiva maggiormente sulla struttura dei dati.
Lingua di query
Un altro fattore distintivo è se hai bisogno di un database che supporti il linguaggio di query.
MongoDB utilizza query strutturate in frammenti JSON e non dispone ancora del supporto del linguaggio di query. Se tu o il tuo team siete abituati a SQL, questo sarà qualcosa a cui abituarsi. Tuttavia, è abbastanza facile da gestire.
A differenza di MongoDB, Cassandra ha un proprio linguaggio di query chiamato CQL (Cassandra Query Language). La sua sintassi è simile a SQL ma presenta ancora alcune limitazioni. In sostanza, il database ha un modo diverso di archiviare e recuperare i dati poiché non è relazionale.
In che cosa differiscono le query?
Negli esempi seguenti puoi vedere come le query in MongoDB differiscono da quelle utilizzate in Cassandra (mentre lavori in una demo employee tabella).
Selezione dei record dalla tabella dei dipendenti:
MongoDB
‘db.employee.find()’
Cassandra
‘SELECT * FROM employee;’
Inserimento di record nella tabella dei dipendenti:
MongoDB
‘db.employee.insert({ empid: '101', firstname: 'John', lastname: 'Doe', gender: 'M', status: 'A'})’
Cassandra
‘INSERT INTO employee (empid, firstname, lastname, gender, status) VALUES('101', 'John', 'Doe', 'M', 'A');’
Aggiornamento dei record nella tabella dei dipendenti:
MondgoDB
'db.Employee.update({"empid" : 101}, {$set: { "firstname" : "James"}})'
Cassandra
‘UPDATE employee SET firstname = ‘James' WHERE empid = '101';’
Linguaggi di programmazione supportati
MongoDB: Actionscript, C, C#, C++, Clojure, ColdFusion, D, Dart, Delphi, Erlang, Go, Groovy, Haskell, Java, JavaScript, Lisp, Lua, MatLab, Perl, PHP, PowerShell, Prolog, Python, R, Ruby, Scala, Chiacchiere
Cassandra: C#, C++, Clojure, Erlang, Go, Haskell, Java, JavaScript, Perl, PHP, Python, Ruby, Scala
Aggregazione
La decisione tra MongoDB o Cassandra può anche dipendere dal fatto che desideri o meno un framework di aggregazione integrato.
MongoDB ha un framework di aggregazione integrato. Questa funzione consente di recuperare i dati utilizzando una pipeline multifase ELT per trasformare i documenti in risultati aggregati. Tuttavia, un tale framework è efficiente solo quando si lavora con traffico dati di piccole o medie dimensioni.
Cassandra non ha framework di aggregazione e richiede strumenti esterni come Hadoop, Spark e altri.
Schema
Quando si tratta dello schema, dovresti decidere se desideri un database flessibile o fisso.
MongoDB è un database che non richiede uno schema, rendendolo naturalmente più adattabile ai cambiamenti. Nelle versioni precedenti, la configurazione predefinita non imponeva alcuno schema. Oggi puoi decidere se vuoi uno schema o meno. Tale flessibilità significa che il database può inserire documenti di diverse strutture e interpretarli una volta nel software.
Cassandra è un database molto più stazionario. Facilita la digitazione statica e richiede preventivamente la categorizzazione e la definizione delle colonne.
Indici secondari
La qualità degli indici secondari determina l'efficienza con cui è possibile accedere ai record nel database. La misura in cui questi indici sono supportati non è la stessa in MongoDB e Cassandra.
MongoDB ha indici secondari di alta qualità. Grazie al suo modello dati flessibile e agli indici secondari, può accedere a qualsiasi proprietà di un oggetto archiviato (anche quando è annidato).
In alternativa, Cassandra ha solo il supporto del cursore per l'indice secondario. Le sue query sono limitate a colonne singole e confronti di uguaglianza.
Prestazioni
Esistono numerosi fattori che influiscono sulle prestazioni di questi due tipi di database.
Principalmente, il modello (o schema) di database fa una grande differenza nella qualità delle prestazioni in quanto alcuni sono più adatti per MongoDB mentre altri potrebbero funzionare meglio con Cassandra.
Inoltre, la caratteristica del carico dell'applicazione che il database deve supportare svolge anche un ruolo cruciale. Se ti aspetti un input di carico pesante, Cassandra, con i suoi nodi master multipli, darà risultati migliori. Con un carico pesante sia MongoDB che Cassandra mostreranno buone prestazioni.
Infine, molti ritengono che MongoDB abbia il sopravvento quando si tratta di requisiti di coerenza . Tuttavia, questo può variare a seconda dell'applicazione. Inoltre, puoi configurare manualmente Cassandra per soddisfare gli standard di coerenza impostati.