2013-08-22 16 views
16

Domanda 1: So che Redis carica tutti i dati in memoria, migliorando così la velocità di lettura/scrittura. Quindi, vuol dire che se la mia dimensione della memoria è 2G, la dimensione massima del set di dati non dovrebbe essere maggiore di 2G? Ora il mio database ha un 100G + dati, la memoria del mio server non può essere più grande di 32G, quindi, Redis non è più adatto per me?Redis, distribuiti o no?

Domanda 2: Redis è un sistema distribuito o no? Quando uso google per cercare la proprietà CAP di redis, dice che Redis non è un sistema distribuito, quindi non ha nulla a che fare con CAP . Ma da Wikipedia, dice che ha un'architettura master-slave, un master con molti slave. Come confuso.

risposta

35

Riguardo alla domanda 1, Redis è un archivio in memoria con alcune capacità di persistenza. Tutto il set di dati dovrebbe essere contenuto nella memoria. Una singola istanza è quindi limitata dalla memoria massima del tuo server. Ora è possibile dividere i dati su diverse istanze di Redis, in esecuzione su più server. A condizione che tu abbia il budget per farlo, è perfettamente possibile memorizzare 100 GB - 1 TB di dati su un set di riquadri Redis. Si noti che sharding non è automatico: deve essere implementato dal client o dall'applicazione. Mette anche alcuni vincoli sulle operazioni che è possibile eseguire sui dati (ad esempio, non sarebbe possibile sul lato server calcolare le intersezioni di due set ospitati da diverse istanze di Redis).

Riguardo alla domanda 2, una singola istanza di Redis non è un sistema distribuito. È un negozio centralizzato remoto. Ora utilizzando diverse istanze di Redis, è possibile creare un sistema distribuito. Poiché si tratta di un approccio fai-da-te, puoi decidere di renderlo un sistema CP o AP.

Una singola istanza può replicare la sua attività in istanze slave (che sono quindi coerenti con il master). L'applicazione può scegliere di connettersi sempre al master per leggere e scrivere. In tal caso, potresti ottenere un sistema CP. Può anche scrivere sul master e leggere da tutte le istanze (inclusi gli slave), quindi è possibile ottenere un sistema AP. Ho detto "può", perché richiede un lavoro significativo per costruire tali sistemi su Redis.

È possibile mescolare il frammento e la replica master/slave per creare il sistema distribuito necessario. Tuttavia, Redis fornisce solo mattoni di base per farlo. Soprattutto, offre pochissimo a che fare con resilienza e HA (e affronta la P nel teorema CAP). IMO, Redis sentinel da solo non è sufficiente per supportare una configurazione HA Redis, poiché copre solo la gestione dei ruoli. È necessario integrarlo con un gestore risorse e inserire molta logica nel client/applicazione.

C'è un progetto in corso chiamato Redis Cluster, il cui scopo è quello di fornire un sistema distribuito minimalista pronto per l'uso, ma manca ancora di molte cose e non è ancora utilizzabile per scopi di produzione.

Se avete bisogno di un negozio distribuito disponibile, Redis probabilmente non è una buona opzione. Sarai servito meglio da Cassandra, Riak, MongoDB, Couchbase, Aerospike, MySQL Cluster, Oracle NoSQL, ecc ... Tuttavia, se vuoi creare il tuo sistema specializzato, Redis è un componente eccellente su cui basarsi.

+0

Bene, le tue informazioni sono davvero importanti e sul punto per me.Dalla tua descrizione, redis non è davvero adatto per me dal momento che abbiamo interesse a costruire un sistema specializzato, solo un database NoSQL off-the-shelf che memorizza 100G + dati. Ora sono più attento a mongoDB e couchDB. – wuchang

+1

Inoltre, penso che Redis sia una buona soluzione per ** caching ** e non memorizzi l'intero dato. Quindi, è possibile archiviare una frammentazione di dati per uso e accesso frequenti. – Babak