Осколок является почти полной противоположностью репликации, хотя они являются ортогональными понятиями и хорошо работают вместе.
Sharding, также известный как разделение, разделяет данные по ключам; В то время как репликация, также известная как зеркальное отображение, должна копировать все данные.
Sharding полезен для повышения производительности, уменьшения попадания и загрузки памяти на любом ресурсе. Репликация полезна для высокой доступности операций чтения. Если вы читаете из нескольких реплик, вы также уменьшите частоту обращений ко всем ресурсам, но требования к памяти для всех ресурсов останутся прежними. Следует отметить, что, хотя вы можете писать на ведомое устройство, репликация является только master-> slave. Таким образом, вы не можете масштабировать записи таким образом.
Предположим, у вас есть следующие кортежи: [1: Apple], [2: Banana], [3: Cherry], [4: Durian], и у нас есть две машины A и B. При использовании Sharding мы можем хранить ключи 2 , 4 на машине А; и ключи 1,3 на машине B. При репликации мы храним ключи 1,2,3,4 на машине A и 1,2,3,4 на машине B.
Sharding обычно реализуется путем выполнения согласованного хэша для ключа. Приведенный выше пример был реализован с помощью следующей хеш-функции h (x) {return x% 2 == 0? A: B}.
Чтобы объединить понятия, мы могли бы повторить каждый осколок. В вышеупомянутых случаях все данные (2,4) машины A могут быть реплицированы на машине C, а все данные (1,3) машины B могут быть реплицированы на машине D.
Любое хранилище значений ключей (из которых Redis является только одним примером) поддерживает разделение, хотя некоторые функции перекрестных ключей больше не будут работать. Redis поддерживает репликацию из коробки.