Lo sharding è quasi l'antitesi della replica, sebbene siano concetti ortogonali e funzionino bene insieme.
Lo sharding, noto anche come partizionamento, divide i dati per chiave; Mentre la replica, nota anche come mirroring, consiste nel copiare tutti i dati.
Il partizionamento orizzontale è utile per aumentare le prestazioni, riducendo l'hit e il carico di memoria su una qualsiasi risorsa. La replica è utile per ottenere un'elevata disponibilità di letture. Se leggi da più repliche, ridurrai anche la percentuale di hit su tutte le risorse, ma il requisito di memoria per tutte le risorse rimane lo stesso. Va notato che, mentre puoi scrivere su uno slave, la replica è solo master->slave. Quindi non puoi 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 su 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.
Il partizionamento orizzontale viene in genere implementato eseguendo un hash coerente sulla chiave. L'esempio sopra è stato implementato con la seguente funzione hash h(x){return x%2==0?A:B}.
Per combinare i concetti, potremmo replicare ogni frammento. Nei casi precedenti, 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 archivio di valori-chiave (di cui Redis è solo un esempio) supporta il partizionamento orizzontale, sebbene alcune funzioni di chiavi incrociate non funzionino più. Redis supporta la replica immediata.