2010-01-26 40 views

Respuesta

102

La fusión es casi la antítesis de la replicación, aunque son conceptos ortogonales y funcionan bien juntos.

Sharding, también conocido como particionamiento, está dividiendo los datos por clave; Mientras que la replicación, también conocida como duplicación, es copiar todos los datos.

El sharding es útil para aumentar el rendimiento, reduciendo el impacto y la carga de memoria en cualquier recurso. La replicación es útil para una alta disponibilidad de lecturas. Si lee desde varias réplicas, también reducirá la tasa de acierto en todos los recursos, pero el requisito de memoria para todos los recursos sigue siendo el mismo. Debe tenerse en cuenta que, aunque puede escribir a un esclavo, la replicación es master-> slave solamente. Entonces no puedes escalar escribe de esta manera.

Supongamos que tiene las siguientes tuplas: [1: Apple], [2: Banana], [3: Cherry], [4: Durian] y tenemos dos máquinas A y B. Con Sharding, podríamos almacenar claves 2,4 en la máquina A; y las teclas 1,3 en la máquina B. Con la Replicación, almacenamos las claves 1,2,3,4 en la máquina A y 1,2,3,4 en la máquina B.

El sharding se implementa típicamente al realizar un hash consistente sobre la llave. El ejemplo anterior se implementó con la siguiente función hash h (x) {return x% 2 == 0? A: B}.

Para combinar los conceptos, podemos replicar cada fragmento. En los casos anteriores, todos los datos (2,4) de la máquina A podrían replicarse en la máquina C y todos los datos (1,3) de la máquina B podrían replicarse en la máquina D.

Cualquier tecla- el almacén de valores (del cual Redis es solo un ejemplo) admite sharding, aunque ciertas funciones cruzadas ya no funcionarán. Redis admite la replicación fuera de la caja.

+6

genial. creo que la respuesta no solo se limita a redis – joetsuihk

+3

Buena respuesta (en general), pero realmente no responde la pregunta imho :) –

+2

Creo que esta respuesta ofrece una buena respuesta a lo que preguntó el interlocutor. Una explicación muy simplificada pero correcta. +1 –

14

En palabras simples, la diferencia fundamental entre los dos conceptos es que Sharding se usa para escalar Writes mientras que Replication se usa para escalar Reads. Como Alex ya mencionó, Replication es también una de las soluciones para lograr HA.

Sí, ambos se suelen utilizar juntos si se tiene en cuenta cómo se pueden replicar los fragmentos en los nodos de un clúster.

Con respecto a su tercera pregunta, en lugar de la opción de RAM-rubor, es una mejor idea usar el Redis Append Only File (AOF). Con un costo menor (en términos de velocidad de escritura), obtiene mucha más confiabilidad de sus escrituras. Es bastante parecido al registro binario de mysql. El 1 fsync/second es la opción recomendada para usar.