2010-01-26 25 views

risposta

102

Sharding è quasi l'antitesi della replica, sebbene siano concetti ortogonali e funzionino bene insieme.

Sharding, noto anche come partizionamento, divide i dati con la chiave; Mentre la replica, anche conosciuta come mirroring, è quella di copiare tutti i dati.

Sharding è utile per aumentare le prestazioni, riducendo il carico e il carico di memoria su qualsiasi risorsa. La replica è utile per l'alta disponibilità di letture. Se si leggono da più repliche, si riduce anche il tasso di successo su tutte le risorse, ma il fabbisogno di memoria per tutte le risorse rimane lo stesso. Va notato che, mentre è possibile scrivere su uno slave, la replica è master-> solo slave. Quindi non è possibile ridimensionare le scritture in questo modo.

Supponiamo di avere le seguenti tuple: [1: Apple], [2: Banana], [3: Cherry], [4: Durian] e abbiamo due macchine A e B. Con Sharding, potremmo memorizzare le chiavi 2,4 sulla macchina A; e chiavi 1,3 sulla macchina B. Con Replica, memorizziamo le chiavi 1,2,3,4 sulla macchina A e 1,2,3,4 sulla macchina B.

La sharding viene in genere implementata eseguendo un hash coerente sulla chiave. L'esempio precedente è stato implementato con la seguente funzione di hash h (x) {return x% 2 == 0? A: B}.

Per combinare i concetti, potremmo replicare ogni frammento. Nei casi di cui sopra, tutti i dati (2,4) della macchina A potrebbero essere replicati sulla macchina C e tutti i dati (1,3) della macchina B potrebbero essere replicati sulla macchina D.

Qualsiasi chiave- value store (di cui Redis è solo un esempio) supporta il sharding, sebbene alcune funzioni cross-key non funzionino più. Redis supporta la replica fuori dalla scatola.

+6

cool. Penso che la risposta non si limiti solo ai redis – joetsuihk

+3

Buona risposta (in generale), ma in realtà non risponde alla domanda imho :) –

+2

Penso che questa risposta offra una buona risposta a ciò che l'interlocutore ha posto. Spiegazione molto semplice, ma corretta. +1 –

14

In parole semplici, la differenza fondamentale tra i due concetti è che Sharding viene utilizzato per ridimensionare le scritture mentre la replica viene utilizzata per ridimensionare le letture. Come già detto da Alex, Replication è anche una delle soluzioni per raggiungere l'HA.

Sì, sono entrambi in genere utilizzati insieme se si considera come i frammenti possono essere replicati tra i nodi in un cluster.

Per quanto riguarda la terza domanda, anziché l'opzione RAM-flush, è consigliabile utilizzare Redis Append Only File (AOF). A un costo minore (in termini di velocità di scrittura), ottieni molta più affidabilità delle tue scritture. È abbastanza simile al log binario mysql. L'1 fsync/secondo è l'opzione consigliata da usare.