Cassandra vs MongoDB

Quando parliamo di grandi quantità di dati e di NoSQL entrano in ballo Cassandra e mongoDB. Ma quale scegliere per le nostre esigenze? In questo articolo facciamo una panoramica di questi database non transazionali.

Chi utilizza i database NoSQL?

Prima di iniziare a parlare di questi 2 database NoSQL vediamo chi li utilizza e come. Entrambi i database hanno un grande seguito e vengono utilizzati da alcune delle più importanti società che si adoperano su internet.

Sono 2 database NoSQL open source quindi utilizzabili gratuitamente. NoSQL è il modo più efficiente per archiviare le grandi quantità di dati non strutturati che le organizzazioni comunemente usano per operazioni sui “big data”. Se pur simili Cassandra e mongoDB sono database con alcune differenza che andremo a vedere in questo articolo.

Cassandra

Nato nel 2008 non ha avuto difficoltà a diventare popolare nel mondo dei database NoSQL. Viene utilizzato da: AppScale, Constant Contact, Digg, Facebook, IBM, Instagram, Spotify, Netflix, and Reddit.

mongoDB

Nato solo un anno dopo, nel 2009, è diventato da subito popolare almeno quanto Cassandra. E’ utilizzato da: Google, UPS, Facebook, Cisco, eBay, BOSH, Adobe, SAP, Forbes e tanti altri. Se sei curioso dai un’occhiata alla lista completa delle società che hanno adottato questo database NoSQL.

Parliamo della struttura di Cassandra e mongoDB

Cassandra

Uno dei punti di forza di Cassandra è la capacità di gestire una grande quantità di dati non strutturati. Ha una facilità di ridimensionamento che non richiedi grandi sforzi amministrativi. Ha un motore molto potente che permette a software come Instagram di gestire millioni di foto. Cassandra utilizza la logica di righe e colonne, simili ad un database relazionare. Cassandra consente di creare, modificare e rinominare le tabelle mentre il database è in esecuzione e sta eseguendo query.

Le “famiglie di colonne” sono simili alle tabelle in RDBMS. Hanno un insieme di colonne e righe in cui ogni riga ha una chiave univoca. A differenza di un RDBMS tradizionale, tutte le righe di una tabella non sono obbligate ad avere le stesse colonne. Quindi potremmo trovare in una “famiglia di colonne” righe con più colonne del risultato precedente. Come dicevo sopra le colonne possono essere aggiunte a “caldo” utilizzando il linguaggio “CQL” (Cassandra Query Language).

mongoDB

MongoDB utilizza documenti simili a JSON che possono avere strutture diverse. Utilizza il linguaggio di query MongoDB per consentire l’accesso ai dati memorizzati. Poiché è privo di schemi, è possibile creare documenti senza dover prima creare la struttura per il documento.

Database hierarchy:

le raccolte in MongoDB sono come le tabelle in RDBMS. In un database relazionale (RDBMS) abbiamo:
Tabella | Colonna | Valore | Records. In MongoDB invece avremo: Collezione | Chiave | Valore | Documento.
I documenti sono come record in un RDBMS. I documenti possono essere facilmente modificati aggiungendo o eliminando campi senza dover ristrutturare l’intero documento.

Sono necessari gli indici?

Cassandra

In cassandra è possibile definire più chiavi e le query possono essere eseguite solo utilizzando la chiave primaria.

mongoDB

In mongoDB le chiavi sono necessarie, se non fondamentali, per poter eseguire le query altrimenti il motore effettua le ricerche sull’intero documento appesantendo la ricerca e rendendo tutto più lento.

In cosa differiscono le query di Cassandra e mongoDB?

Vediamo ora come eseguire delle query su una tabella chiamata users.

Cassandra: ‘SELECT * FROM users;’

mongoDB: ‘db.users.find()’

Di seguito come fare una “insert” sul database.

Cassandra: ‘INSERT INTO users(usersId, branch, status) VALUES('appl01', 'main', 'A');’

mongoDB: ‘db.users.insert({ userId: 'appl01', branch: 'main', status: 'A' })’

Adesso facciamo un update sulla stessa tabella.

Cassandra: ‘UPDATE users SET branch = ‘main' WHERE custage > 2;’

mongoDB: ‘db.users.update( { custage: { $gt: 2 } }, { $set: { branch: 'main' } }, { multi: true } )’

Dove e come sono distribuiti questi database?

Cassandra è un database scritto in Java è può girare su BSD, Linux, OS X, and Windows. MongoDb è scritto in C++ ed è supportato dai seguenti linguaggi di programmazione: 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, Smalltalk.

Quali tipi di replica / cluster sono disponibili?

Cassandra esegue immediatamente la replica. Basta dire il numero di nodi in cui dovrebbe copiare i tuoi dati e si occupa del resto del processo. Cassandra consente a più master, anche nel caso in cui ci sia la perdita di un singolo nodo, comunque di scrivere nel cluster. Ciò può consentire una migliore tolleranza agli errori senza i tempi di fermo da 10 a 40 secondi richiesti con MongoDB.

MongoDB ha una replica integrata con elezioni automatiche. Ciò consente di impostare un database secondario che può essere eletto automaticamente se il database primario non è disponibile. Tuttavia, MongoDB richiede alcune impostazioni (e forse un aiuto dal supporto) per eseguire la replica. MongoDB ha set di repliche in cui un membro è il principale e tutti gli altri hanno un ruolo secondario. Le letture e le scritture vengono prima impegnate nella replica primaria e quindi replicate nelle repliche secondarie. MongoDB ha un unico master. Mentre il processo di elezione automatica avviene automaticamente, possono essere necessari da 10 a 40 secondi affinché avvenga. Mentre ciò accade, non è possibile scrivere nel set di repliche.

Velocità di scrittura, quale è il più veloce tra Cassandra e mongoDB?

Cassandra

Con Cassandra, ciascun nodo master può accettare diverse scritture in parallelo. Pertanto, più nodi master sono disponibili, più dati è possibile scrivere contemporaneamente. Se hai bisogno di scrivere molti dati, la tua scelta dovrebbe probabilmente orientarsi verso Cassandra.

mongoDB

La limitazione di MongoDB a un singolo nodo principale ha anche importanti implicazioni per la velocità con cui i dati possono essere scritti in un database. Le scritture di dati devono essere registrate sul master e poiché un cluster MongoDB ha un solo master, la sua capacità di scrivere nuove informazioni nel database è strettamente limitata dalla capacità di quel singolo nodo master.

MongoDB vs. Cassandra: casi d’uso

Quindi, quando MongoDB è la soluzione migliore di Cassandra o viceversa?

Per i carichi di lavoro con molti dati altamente non strutturati, in generale, MongoDB è la soluzione migliore. Se non sai, o hai una minima capacità di anticipare, la scala e i tipi di dati con cui lavorerai, le strutture di dati flessibili di MongoDB si adatteranno meglio di Cassandra. Detto questo, per utilizzare MongoDB in modo efficace, dovrai essere in grado di far fronte alla possibilità di tempi di inattività in caso di guasto del nodo principale, nonché con velocità di scrittura limitate. E non dimenticare, dovrai anche imparare un nuovo linguaggio di query.

Cassandra è la scelta migliore per i casi d’uso che funzionano con tipi di dati in stile SQL. Cassandra funziona anche bene se si richiedono velocità di scrittura molto elevate. E se la curva di apprendimento di un nuovo linguaggio di query ti intimidisce, trarrai vantaggio dalla somiglianza tra CQL e SQL.

Quindi quale scegliere per le proprie esigenze?

Quello che posso dirvi brevemente e che se si desidera un database simile a MySQL e simili ma che offre maggiore flessibilità e scalabilità, la scelta si orienta verso Cassandra. Se hai bisogno di un maggior grado di flessibilità e sei disposto a imparare alcuni nuovi trucchi, e soprattutto un nuovo linguaggio di query, MongoDB è sicuramente la scelta migliore.

Nel prossimo articolo vedremo insieme come installare Cassandra e mongoDB e un primo utilizzo di questi 2 database NoSQL.

Potrebbero interessarti anche...