2009-11-20 22 views
6

Veo aquí que Cassandra no tiene balanceo de carga automático, que aparece cuando se usa el particionador ordenado (un cierto rango común de valores de un grupo de filas se almacenaría en un número relativamente pequeño de máquinas que servirían la mayor parte de las consultas).
What's The Best Practice In Designing A Cassandra Data Model?¿Equilibrio de carga de Cassandra con un particionador ordenado?

Sigo siendo nuevo en Cassandra y en cómo funciona. ¿Cómo se puede evitar este problema para que las consultas de rango sigan siendo posibles? Realmente no obtuve la idea de las respuestas anteriores (URL enlazada) acerca de agregar un hash a las teclas.

+0

Encontré más detalles sobre la idea de 'agregar hash a las teclas' en este blog http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/ – deepblue

Respuesta

4

Creo que este tema se trata mejor en la lista de correo de usuarios de cassandra; ahí es donde están las personas

Cassandra no tiene balanceo automático de carga pero pero puede que lo haga en un futuro no muy lejano. La rama 0.5 puede ser capaz de esto ahora.

Esencialmente cuando arranca un nodo en un sistema que ya se está ejecutando, debe encontrar un lugar en el anillo que equilibrará la carga y se colocará allí. Siempre que agregue nodos de uno en uno (es decir, espere a que un nodo termine la inicialización antes de agregar otro), eso funcionará bastante bien, siempre que su distribución de claves no cambie demasiado con el tiempo.

Sin embargo, sus claves pueden cambiar con el tiempo (especialmente si están basadas en el tiempo) por lo que es posible que desee una solución.

Depende de lo que desee escanear. Si solo necesita escanear el rango PARTE de la clave, puede actualizar el bit que no desea escanear en rango, y usarlo como la primera parte de la clave.

voy a utilizar el término "partición" para referirse a la parte de la clave que no desea variar exploración

function makeWholeKey(partition, key) { 
    return concat(make_hash(partition), partition, key); 
} 

Ahora bien, si desea variar escanear las llaves dentro de una partición dada , puede escanear el rango entre makeWholeKey (p, start) y makeWholeKey (p, end)

Pero si quiere escanear las particiones, no tiene suerte.

Pero puede hacer que sus nodos tengan tokens que estén distribuidos uniformemente alrededor del rango de salida make_hash(), y obtendrá datos distribuidos uniformemente (suponiendo que tiene particiones SUFICIENTES que no se agrupan en una o dos valores hash)

8

Como se mencionó en la otra publicación, Cassandra 0.5 admite el equilibrio de carga semiautomático, donde todo lo que tiene que hacer es decirle a un nodo que equilibre la carga y se moverá a un lugar ocupado en el anillo token automáticamente.

Esto se trata en http://wiki.apache.org/cassandra/Operations

+0

The el enlace ya no funciona. Nos envía a una página que dice que la documentación se movió y que el destino nos lleva a la raíz de la documentación ... Además, no entiendo lo que quiere decir con * «decirle a un nodo que descargue la carga» *. ¿Por qué tendría que decirle algo a alguien? Además, no está claro por qué te gustaría mudarte a un lugar más concurrido, el equilibrio de carga generalmente es al revés. ¿Tal vez podrías intentar aclarar? –

1

Particionamiento de datos a través de clúster es controlado por el parámetro partitioner en cassandra.yaml:

partitioner: org.apache.cassandra.dht.Murmur3Partitioner 

Usando Murmur3Partitioner generará código hash aleatoria para una fila de clave y realizar el equilibrio de carga.

Con Cassandra 2.0, puede almacenar varios tokens (256) en un único servidor, lo que también ayudará en el equilibrio de carga. No es una buena práctica usar OrderPreservingPartitioner y está en desuso.

+0

Tenga en cuenta que la pregunta era en 2009 alrededor de Cassandra 0.5 ... Dicho esto, acepto que el particionador es lo que generalmente se espera equilibrar la carga de un clúster de Cassandra. –

Cuestiones relacionadas