MongoDB vs. Cassandra [chiuso]


738

Sto valutando quale potrebbe essere la migliore opzione di migrazione.

Attualmente, sono su un MySQL (partizione orizzontale), con la maggior parte dei miei dati archiviati in BLOB JSON. Non ho query SQL complesse (già migrate dopo che ho partizionato il mio db).

In questo momento, sembra che sia MongoDB che Cassandra sarebbero probabilmente opzioni. La mia situazione:

  • Molte letture in ogni query, scritture meno regolari
  • Non preoccupato per la scalabilità "massiccia"
  • Più preoccupato per la semplice configurazione, manutenzione e codice
  • Ridurre al minimo i costi di hardware / server

4
Sono disponibili statistiche di benchmark ufficiali sulle prestazioni. Cassandra vs MongoDB vs HBase
Ravi

1
> Molte letture in ogni query, scritture meno regolari => Cerca CQRS (separa le tue letture dalle tue scritture probabilmente senza approvvigionamento di eventi ma controlla se puoi aggiornare il tuo modello di lettura in modo asincrono .. la sincronizzazione potrebbe funzionare anche .. dipende dal tuo uso -casi)
bodrin

2
Questa è davvero un'ottima domanda. Mi chiedo se esiste una versione aggiornata di esso? Questo è molto vecchio ora
slashdottir

Risposte:


584

Molte letture in ogni query, meno scritture regolari

Entrambi i database eseguono bene le letture in cui il set di dati attivi si adatta alla memoria. Entrambi enfatizzano anche i modelli di dati senza join (e incoraggiano invece la denormalizzazione) ed entrambi forniscono indici su documenti o righe , sebbene gli indici di MongoDB siano attualmente più flessibili.

Il motore di archiviazione di Cassandra fornisce scritture a tempo costante, indipendentemente dalla dimensione del set di dati. Le scritture sono più problematiche in MongoDB, in parte a causa del motore di archiviazione basato su b-tree, ma più a causa del blocco multi-granularità che fa.

Per l'analisi, MongoDB fornisce una mappa personalizzata / riduce l'implementazione; Cassandra fornisce supporto nativo di Hadoop, incluso Hive (un data warehouse SQL basato sulla mappa / riduzione di Hadoop) e Pig (un linguaggio di analisi specifico di Hadoop che molti ritengono più adatto a mappare / ridurre i carichi di lavoro rispetto a SQL). Cassandra supporta anche l'uso di Spark .

Non preoccupato per la scalabilità "massiccia"

Se stai guardando un singolo server, MongoDB è probabilmente la soluzione migliore. Per coloro che sono più preoccupati per il ridimensionamento, l'architettura senza singolo punto di errore di Cassandra sarà più facile da configurare e più affidabile. (Anche il blocco globale della scrittura di MongoDB tende a diventare più doloroso.) Cassandra offre inoltre un controllo molto maggiore sul funzionamento della replica, incluso il supporto per più data center.

Più preoccupato per la semplice configurazione, manutenzione e codice

Entrambi sono banali da configurare, con impostazioni predefinite ragionevoli per un singolo server. Cassandra è più semplice da installare in una configurazione multi-server poiché non ci sono nodi con ruoli speciali di cui preoccuparsi.

Se attualmente stai utilizzando BLOB JSON, MongoDB è una corrispondenza follemente valida per il tuo caso d'uso, dato che utilizza BSON per archiviare i dati. Sarai in grado di avere dati più ricchi e più interrogabili di quelli che vorresti nel tuo database attuale. Questa sarebbe la vittoria più significativa per Mongo.


86
Totalmente diverso, un commento non è abbastanza grande, ma ... Cassandra è un ibrido dinamo / google bigtable scalabile linearmente (ammortizzato a tempo costante) che presenta scritture veloci indipendentemente dalle dimensioni dei dati. Il set di funzionalità è minimalista, poco oltre quello di un archivio valori chiave ordinato. MongoDB è un archivio di documenti con molte funzionalità (e veloce) a scapito della durata e garantisce che le scritture persistano (poiché non sono immediatamente scritte su disco). Sono bestie diverse con filosofie diverse, MongoDB è più vicino alla sostituzione di un RDMS ...
Michael,

28
mentre Cassandra è di livello inferiore ma consente un ridimensionamento superfluo (vedi Twitter / Digg / Facebook), ma dovrai deliberare su come disporre i tuoi dati, costruire indici secondari ecc., poiché non sono consentite query flessibili.
Michael,

11
Perché tutti hanno menzionato Twitter qui in relazione a Cassandra: non usano Cassandra per i tweet persistenti, usano ancora MySQL qui ( engineering.twitter.com/2010/07/cassandra-at-twitter-today.html ). Ok, ma posso immaginare che conservino ancora molti dati per altri scopi in Cassandra.
H6.

7
Sembra che il blocco di scrittura globale possa essere stato rimosso in Mongo 2.2 ...
Matt Farmer,

16
Anche prima che il mio progetto diventasse vivo, sento i punti dolenti di Mongodb. Il backup a caldo è un requisito di base. Per eseguire un backup a caldo in un server Linux, devi prima impostare una partizione LVM (non così comune) e fare uno snapshot prima di ogni sessione di backup. Un altro modo semplice è utilizzare il servizio di backup a pagamento Mongodb. Ma quel servizio è costoso (2,3 $ / GB / mese). Presto sarà necessario un set di repliche per la tolleranza agli errori. Con la versione open source, i nodi possono scambiare dati solo come testo in chiaro. Per SSL devi andare con l'edizione Entprise. E questo è 10.000 $. Addio Mongodb. Rifattorizzare il mio codice su Cassandra.
Karthik Sankar,

146

Ho usato MongoDB ampiamente (negli ultimi 6 mesi), costruendo un sistema gerarchico di gestione dei dati e posso garantire sia la facilità di installazione (installarlo, eseguirlo, usarlo!) Che la velocità. Fintanto che pensi attentamente agli indici, può assolutamente urlare, in termini di velocità.

Ho notato che Cassandra, grazie al suo utilizzo con progetti su larga scala come Twitter, ha una migliore funzionalità di ridimensionamento, sebbene il team MongoDB stia lavorando sulla parità lì. Dovrei sottolineare che non ho usato Cassandra oltre la fase di prova, quindi non posso parlare per i dettagli.

Il vero swinger per me, quando stavamo valutando i database NoSQL, era la query: Cassandra è fondamentalmente solo un gigantesco archivio di chiavi / valori e le query sono un po 'complicate (almeno rispetto a MongoDB), quindi per le prestazioni dovresti duplicare molti dati come una sorta di indice manuale. MongoDB, d'altra parte, usa un modello di "query per esempio".

Ad esempio, supponiamo di avere una raccolta (linguaggio MongoDB per l'equivalente di una tabella RDMS) contenente utenti. MongoDB memorizza i record come documenti, che sono fondamentalmente oggetti JSON binari. per esempio:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "john@smith.com",
   Groups: ["Admin", "User", "SuperUser"]
}

Se desideri trovare tutti gli utenti chiamati Smith con diritti di amministratore, devi semplicemente creare un nuovo documento (nella console di amministrazione utilizzando Javascript o in produzione utilizzando la lingua che preferisci):

{
   LastName: "Smith",
   Groups: "Admin"
}

... e quindi esegui la query. Questo è tutto. Ci sono operatori aggiunti per confronti, filtri RegEx ecc., Ma è tutto abbastanza semplice e la documentazione basata su Wiki è piuttosto buona.


54
Aggiornamento (8 agosto 2011): il data center EC2 di Amazon in Irlanda ha avuto un incidente relativo ai fulmini ieri sera e, nel risolvere il nostro recupero del server, ho scoperto un punto piuttosto cruciale: se hai un set di repliche di due server (e loro è facile da configurare), assicurati di avere un nodo Arbiter, quindi se uno si abbassa, l'altro non si fa prendere dal panico e si blocca in modalità Secondaria! Fidati di me, è un dolore in fondo per risolvere un grande database.
Richard K.

8
per aggiungere ciò che ha detto @Richard K, dovresti avere un nodo arbitro quando hai un numero pari di nodi (primario + secondario) in un set di repliche.
Amareswar,

A ciò si aggiunge mongodb quando si deve fare più aggregazione sull'analisi dei dati.
user1503117

As long as you think about indexes carefully, it can absolutely scream along, speed-wise.Attendi fino a quando la tua memoria fisica non si riempie e il sistema operativo inizia a
correggere la

117

Perché scegliere tra un database tradizionale e un archivio dati NoSQL? Usali entrambi! Il problema con le soluzioni NoSQL (oltre la curva di apprendimento iniziale) è la mancanza di transazioni - esegui tutti gli aggiornamenti a MySQL e fai in modo che MySQL popoli un archivio dati NoSQL per le letture - beneficerai quindi dei punti di forza di ogni tecnologia. Ciò aggiunge maggiore complessità, ma hai già il lato MySQL: aggiungi MongoDB, Cassandra, ecc. Al mix.

I datastore NoSQL generalmente scalano molto meglio di un DB tradizionale per le stesse specifiche altrimenti - c'è un motivo per cui Facebook, Twitter, Google e la maggior parte delle start-up utilizzano soluzioni NoSQL. Non sono solo i geek a farsi strada sulle nuove tecnologie.


8
Sono totalmente d'accordo. Sto usando mongodb + mysql in uno dei prossimi prodotti che sto progettando. È un cloud di prodotti finanziari imminente. mysql è usato dove abbiamo assolutamente bisogno di capacità transazionali. mongodb viene utilizzato per archiviare strutture di dati complesse non informatiche che devono solo essere richiamate quando necessario. finora funziona bene. :)
Ram on Rails-n-React,

Ho anche usato un duplice approccio nella maggior parte dei miei progetti, e in alcuni altri il file system montato su NFS è stato usato insieme a PostgreSQL per BLOB sismici che si avvicinano a 1 GB in alcuni casi. Un percorso è un tipo di query al database dei valori chiave.
Audrius Meskauskas,

1
Ecco un link a una domanda che ho posto su come progettare database sql e nosql: dba.stackexchange.com/questions/102053/… Potrei usare alcune intuizioni che potresti avere
j

È già scappato dalle transazioni per sempre => ora la scalabilità infinita potrebbe essere possibile .. altrimenti -> non :)
bodrin

1
Questa non è una buona soluzione se i tuoi dati sono distribuiti
Esteban Verbel,

60

Probabilmente sarò uno strano uomo, ma penso che devi stare con MySQL. Non hai descritto un vero problema che devi risolvere e MySQL / InnoDB è un eccellente back-end di archiviazione anche per i dati BLOB / JSON.

Esiste un trucco comune tra gli ingegneri Web per provare a utilizzare più NoSQL non appena viene realizzato che non vengono utilizzate tutte le funzionalità di un RDBMS. Questo da solo non è un buon motivo, poiché il più delle volte i database NoSQL hanno motori di dati piuttosto scadenti (ciò che MySQL chiama un motore di archiviazione).

Ora, se non sei di quel tipo, specifica cosa manca in MySQL e stai cercando in un database diverso (come, auto-sharding, failover automatico, replica multi-master, una garanzia di coerenza dei dati più debole in cluster che paga con un throughput di scrittura più elevato, ecc.).


13
Sta usando lo sharding, il che significa che i suoi dati sono partizionati manualmente tra i server. Mongodb può automatizzare lo sharding, il che può essere un vantaggio.
fabspro,

18
Inoltre, memorizza principalmente BLOB JSON in RDBMS, rendendo inutili il design relazionale (funzionalità).
Damir Sudarevic,

4
Il modello di dati e sharding automatica sono quindi diverse, ma al momento di scegliere un database, è necessario guardare al motore di archiviazione prima , e il resto della campane e fischietti secondo. Come funzionerà il motore di archiviazione sotto un picco di carico? Come funzionerà la funzione di autosharding in un picco di afflusso di dati? Prima di cedere il controllo al database per questi aspetti importanti, è meglio assicurarsi che sarà in grado di svolgere l'attività.
Kostja,

7
Il modello relazionale è uno dei modelli di dati più ben concepiti, efficienti da implementare e frugali. "Il rendering di funzioni di progettazione relazionale inutili" può essere correlato a vincoli, fattori scatenanti o integrità referenziale, ma questi sono tutti pay per use.
Kostja,

20

Non ho usato Cassandra, ma ho usato MongoDB e penso che sia fantastico.

Se stai cercando una semplice configurazione, eccola qui: basta estrarre MongoDB ed eseguire il demone mongod e il gioco è fatto ... è in esecuzione.

Ovviamente è solo un antipasto, ma per iniziare è facile.


22
AFAIK, lo stesso vale anche per Cassandra. Untar, esegui il demone. Il cluster di test è configurato e pronto per la produzione!
chiede il

13

Ieri ho visto una presentazione su mongodb. Posso sicuramente dire che l'installazione era "semplice", semplice come decomprimerlo e accenderlo. Fatto.

Credo che sia mongodb che cassandra funzioneranno praticamente su qualsiasi normale hardware linux, quindi non dovresti trovare troppe barriere in quell'area.

Penso che in questo caso, alla fine, scenderà a quale persona ti senti più a tuo agio e con quale set di strumenti preferisci. Per quanto riguarda la presentazione su mongodb, il presentatore ha indicato che il set di strumenti per mongodb era piuttosto leggero e che non c'erano molti strumenti (dicevano davvero) simili a quelli disponibili per MySQL. Questa è stata ovviamente la loro esperienza così YMMV. Una cosa che mi è piaciuta di mongodb è che sembrava esserci molto supporto linguistico (Python e .NET sono i due che utilizzo principalmente).

L'elenco dei siti che utilizzano mongodb è piuttosto impressionante e so che Twitter è appena passato all'utilizzo di cassandra.


4
Alla fine della giornata è il confronto tra mele e arance. Entrambi i database hanno i loro punti di forza. Ecco alcune cose da considerare: modello a oggetti, indici secondari, scalabilità in scrittura, alta disponibilità, ecc. Hanno un post sul blog che spiega le differenze strategiche di alto livello tra mongodb e cassandra qui - scalegrid.io/blog/cassandra-vs-mongodb
Dharshan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.