2012-05-22 9 views
87

Qualcuno può citare casi di utilizzo di quando si trarrebbe beneficio dall'utilizzo di Redis e MongoDB in combinazione tra loro?MongoDB con redis

risposta

153

Redis e MongoDB possono essere utilizzati insieme a buoni risultati. Una società ben nota per l'esecuzione di MongoDB e Redis (insieme a MySQL e Sphinx) è Craiglist. Vedi this presentation da Jeremy Zawodny.

MongoDB è interessante per persistente, orientato al documento, indicizzato in vari modi. Redis è più interessante per dati volatili o dati semi-persistenti sensibili alla latenza.

Ecco alcuni esempi di utilizzo concreto di Redis su MongoDB.

  • Pre-2.2 MongoDB non ha ancora un meccanismo di scadenza. Le collezioni con cappuccio non possono essere realmente utilizzate per implementare un vero TTL. Redis ha un meccanismo di scadenza basato su TTL, che rende conveniente memorizzare i dati volatili. Ad esempio, le sessioni utente sono comunemente memorizzate in Redis, mentre i dati dell'utente verranno archiviati e indicizzati in MongoDB. Si noti che MongoDB 2.2 ha introdotto un meccanismo di scadenza a bassa precisione a livello di raccolta (da utilizzare per l'eliminazione dei dati, ad esempio).

  • Redis fornisce un comodo tipo di dati impostato e le sue operazioni associate (unione, intersezione, differenza su più insiemi, ecc ...). È abbastanza facile implementare un motore di ricerca o tagging di base sfaccettato in cima a questa funzione, che è un'aggiunta interessante alle capacità di indicizzazione più tradizionali di MongoDB.

  • Redis supporta operazioni di blocco efficienti sulle liste. Questo può essere utilizzato per implementare un sistema di accodamento distribuito ad-hoc. È più flessibile dei cursori disponibili di MongoDB IMO, poiché un'applicazione back-end può ascoltare diverse code con un timeout, trasferire elementi in un'altra coda atomicamente, ecc ... Se l'applicazione richiede un accodamento, ha senso memorizzare la coda in Redis e mantieni i dati funzionali persistenti in MongoDB.

  • Redis offre anche un meccanismo di pubblicazione/sub. In un'applicazione distribuita, può essere utile un sistema di propagazione degli eventi. Questo è ancora un ottimo caso d'uso per Redis, mentre i dati persistenti sono conservati in MongoDB.

Perché è molto più facile per la progettazione di un modello di dati con MongoDB che con Redis (Redis è più basso livello), è interessante beneficiare della flessibilità di MongoDB per principali dati persistenti, e per l'ulteriore caratteristiche fornite da Redis (bassa latenza, scadenza articolo, code, pub/sub, blocchi atomici, ecc ...). È davvero una buona combinazione.

Nota: non si dovrebbe mai eseguire un server Redis e MongoDB sulla stessa macchina. La memoria MongoDB è progettata per essere sostituita, Redis no. Se MongoDB attiva alcune attività di scambio, le prestazioni di Redis saranno catastrofiche. Dovrebbero essere isolati su diversi nodi.

+19

MongoDB 2.2 (solo rilasciato) aggiunge il supporto TTL, che affronta il tuo primo punto: http://docs.mongodb.org/manual/tutorial/expire-data/ –

+0

Grandi punti su alcuni dei punti di forza comparativi di ciascuno. –

+2

Grandi punti su alcuni dei punti di forza comparativi di ciascuno. Uno dei punti di Redis è la messa a punto in memoria. Ci sono altri progetti focalizzati sulla bassa latenza, come AerospikeDB, che si concentra sul clustering e sull'affidabilità, e anche sullo storage SSD, che può essere usato quando il caso di utilizzo in tempo reale va oltre quello che Redis può facilmente gestire. –

22

Ovviamente ci sono lontani più differenze che questo, ma per un'elevatissima panoramica:

Per casi d'uso:

  • Redis è spesso usato come strato di cache o lavagna condivisi per distribuito calcolo.
  • MongoDB viene spesso utilizzato come sostituto di sostituzione per i database SQL tradizionali.

Tecnicamente:

  • Redis è un db in memoria con persistenza disco (l'intero db deve adattarsi in RAM).
  • MongoDB è un db con supporto del disco che richiede solo una quantità sufficiente di RAM per gli indici.

C'è qualche sovrapposizione, ma è estremamente comune utilizzare entrambi. Ecco perché:

  • MongoDB può memorizzare più dati più economici.
  • Redis è più veloce per l'intero set di dati.
  • cultura MongoDB è "conservare tutto, capire modelli di accesso più tardi" cultura
  • Redis è "considerare attentamente come si accede ai dati, quindi memorizzare"
  • Entrambi hanno strumenti open source che dipendono da loro, molti di cui sono usati insieme.

Redis può essere usato come un sostituto per un archivio dati tradizionali, ma è più spesso utilizzato con un'altra normale archivio dati "lunghi", come Mongo, PostgreSQL, MySQL, ecc