Sharding is bijna de antithese van replicatie, hoewel het orthogonale concepten zijn en goed samenwerken.
Sharding, ook wel partitionering genoemd, is het opsplitsen van de gegevens op sleutel; Terwijl replicatie, ook wel spiegelen genoemd, het kopiëren van alle gegevens is.
Sharding is handig om de prestaties te verbeteren en de treffers en geheugenbelasting op een bepaalde bron te verminderen. Replicatie is handig voor het verkrijgen van een hoge beschikbaarheid van leesbewerkingen. Als u van meerdere replica's leest, verlaagt u ook de hitrate op alle resources, maar blijft de geheugenvereiste voor alle resources hetzelfde. Opgemerkt moet worden dat, hoewel u naar een slaaf kunt schrijven, replicatie alleen master->slave is. Je kunt schrijfacties dus niet op deze manier schalen.
Stel dat je de volgende tupels hebt:[1:Apple], [2:Banana], [3:Cherry], [4:Durian] en we hebben twee machines A en B. Met Sharding kunnen we sleutels 2,4 opslaan op machine A; en sleutels 1,3 op computer B. Met Replicatie slaan we sleutels 1,2,3,4 op computer A en 1,2,3,4 op computer B op.
Sharding wordt meestal geïmplementeerd door een consistente hash op de sleutel uit te voeren. Het bovenstaande voorbeeld is geïmplementeerd met de volgende hashfunctie h(x){return x%2==0?A:B}.
Om de concepten te combineren, kunnen we elke scherf repliceren. In de bovenstaande gevallen kunnen alle gegevens (2,4) van machine A worden gerepliceerd op machine C en kunnen alle gegevens (1,3) van machine B worden gerepliceerd op machine D.
Elke key-value store (waarvan Redis slechts één voorbeeld is) ondersteunt sharding, hoewel bepaalde cross-key-functies niet langer werken. Redis ondersteunt standaard replicatie.