Sharding gần như là phản đề của sao chép, mặc dù chúng là các khái niệm trực giao và hoạt động tốt với nhau.
Sharding, còn được gọi là phân vùng, là chia nhỏ dữ liệu theo khóa; Trong khi sao chép, còn được gọi là phản chiếu, là sao chép tất cả dữ liệu.
Sharding rất hữu ích để tăng hiệu suất, giảm tải trọng và bộ nhớ trên bất kỳ tài nguyên nào. Nhân rộng rất hữu ích để có được lượng đọc cao. Nếu bạn đọc từ nhiều bản sao, bạn cũng sẽ giảm tỷ lệ truy cập trên tất cả các tài nguyên, nhưng yêu cầu bộ nhớ cho tất cả các tài nguyên vẫn như cũ. Cần lưu ý rằng, trong khi bạn có thể ghi vào nô lệ, bản sao chỉ là chủ-> nô lệ. Vì vậy, bạn không thể chia tỷ lệ ghi theo cách này.
Giả sử bạn có các bộ giá trị sau:[1:Apple], [2:Banana], [3:Cherry], [4:Durian] và chúng tôi có hai máy A và B. Với Sharding, chúng tôi có thể lưu trữ các khóa 2,4 trên máy A; và các phím 1,3 trên máy B. Với Replication, chúng tôi lưu trữ các phím 1,2,3,4 trên máy A và 1,2,3,4 trên máy B.
Sharding thường được thực hiện bằng cách thực hiện một băm nhất quán trên khóa. Ví dụ trên được triển khai với hàm băm sau h (x) {return x% 2 ==0? A:B}.
Để kết hợp các khái niệm, Chúng tôi có thể sao chép từng phân đoạn. Trong các trường hợp trên, tất cả dữ liệu (2,4) của máy A có thể được sao chép trên máy C và tất cả dữ liệu (1,3) của máy B có thể được sao chép trên máy D.
Bất kỳ kho khóa-giá trị nào (trong đó Redis chỉ là một ví dụ) đều hỗ trợ sharding, mặc dù một số chức năng khóa chéo nhất định sẽ không còn hoạt động. Redis hỗ trợ sao chép ra khỏi hộp.