2012-04-25 7 views
16

Ho visto molte persone usare Redis come cache ultimamente, perché non Mongo? Per quanto posso dire, Redis può impostare una data di scadenza su un indice, come memcache, ma per il resto ci sono motivi per non usare Mongo per questo?Perché utilizzare Redis invece di MongoDb per Caching?

Chiedo come sto facendo un grande join in MySQL e quindi modificare i dati dopo averlo selezionato. Sto già usando memcache su altre parti del sito ma salvarlo in Mongo mi permetterebbe di fare ricerche geospaziali sui dati memorizzati nella cache.

risposta

13

Un sacco di gente usa MongoDB per una cache di basso medio livello e funziona benissimo.

Poiché offre più funzionalità di un semplice archivio di valori chiave tramite la queryabilità ad-hoc, non è puro come un livello di memorizzazione nella cache come memcache o redis (può essere più lento inserire e recuperare dati).

È possibile ottenere prestazioni estremamente elevate (il set di lavoro si trova in RAM dopotutto), ma il modello di dati è più pesante.

Tuttavia, il rovescio della medaglia, MongoDB offre un livello di persistenza che ha molto più senso (per la maggior parte degli sviluppatori) per il tipo di dati che è probabilmente necessario in un secondo momento, a differenza di Redis.

+4

Altre funzionalità di MongoDB come [capped collections] (http://www.mongodb.org/display/DOCS/Capped+Collections) possono essere utili anche nella memorizzazione nella cache dei livelli. C'è anche una richiesta di funzionalità per [collezioni TTL configurabili] (https://jira.mongodb.org/browse/SERVER-211) che sarà molto utile per i livelli di memorizzazione nella cache, sebbene non sia ancora stata implementata. – dcrosta

+5

E 'implementato ora :) – wprl

+0

collezioni TTL configurabili: https://docs.mongodb.com/manual/tutorial/expire-data/ –

3

Quando parliamo di cache, viene in mente la velocità. L'obiettivo qui è quello di impostare e recuperare qualcosa il più velocemente possibile. In questo senso, redis è più veloce di mongodb. Tuttavia, se si trova che mongodb è adatto per eseguire ricerche geospaziali su dati memorizzati nella cache, è corretto utilizzarlo. Ovviamente puoi investire un po 'di tempo e implementare lo stesso in redis e quindi fare un benchmark per vedere cosa guadagni.

10

La più grande differenza tra MongoDB e Redis è che Redis di solito memorizza l'intero database in memoria. MongoDB usa un file mappato in memoria per far finta che tutto sia in memoria, e lascia i bit della pagina del SO dentro e fuori dal disco, se necessario. Se il sistema operativo può tenere tutto in memoria, le prestazioni saranno in qualche modo simili.

+0

Redis conserva due copie, una in memoria e una su disco – Craneum

+0

A partire dalla versione 3.2, WiredTiger è il motore di archiviazione predefinito per MongoDB. –