Sharding er næsten replikationens modsætning, selvom de er ortogonale begreber og fungerer godt sammen.
Sharding, også kendt som partitionering, er at dele data op med nøgle; Mens replikering, også kendt som spejling, er at kopiere alle data.
Sharding er nyttigt for at øge ydeevnen og reducere hit- og hukommelsesbelastningen på en ressource. Replikering er nyttig for at få en høj tilgængelighed af læsninger. Hvis du læser fra flere replikaer, vil du også reducere hitraten på alle ressourcer, men hukommelseskravet for alle ressourcer forbliver det samme. Det skal bemærkes, at selvom du kan skrive til en slave, er replikering kun master->slave. Så du kan ikke skalere skriver på denne måde.
Antag, at du har følgende tupler:[1:Apple], [2:Banana], [3:Cherry], [4:Durian], og vi har to maskiner A og B. Med Sharding kan vi muligvis gemme nøglerne 2,4 på maskine A; og nøglerne 1,3 på maskine B. Med replikering gemmer vi nøglerne 1,2,3,4 på maskine A og 1,2,3,4 på maskine B.
Sharding implementeres typisk ved at udføre en konsekvent hash på nøglen. Ovenstående eksempel blev implementeret med følgende hash-funktion h(x){return x%2==0?A:B}.
For at kombinere koncepterne kan vi replikere hvert skår. I ovenstående tilfælde kunne alle data (2,4) fra maskine A replikeres på maskine C, og alle data (1,3) fra maskine B kunne replikeres på maskine D.
Ethvert nøgleværdilager (hvor Redis kun er et eksempel) understøtter sharding, selvom visse krydsnøglefunktioner ikke længere vil fungere. Redis understøtter replikering ud af boksen.