Ответ 1
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 поддерживает репликацию из коробки.