2012-08-15 17 views
6

Estoy tratando de entender el motor de almacenamiento de Cassandra cuando se trata de columnas compuestas. Desafortunadamente, la documentación que he leído contiene errores y me deja un poco en blanco.Motor de almacenamiento Cassandra 1.1 ¿cómo almacena los composites?

Primero, la terminología.

Las columnas compuestas comprenden filas anchas completamente desnormalizadas mediante el uso de teclas primarias compuestas.

Esto parece engañoso porque, AFAIK, las columnas compuestas se pueden usar para claves compuestas, y también simplemente como columnas compuestas aparte de las teclas.

1: ¿Cómo se implementan las claves compuestas y los nombres de columna? Cada ejemplo de CQL que puedo encontrar solo muestra claves compuestas como columnas, no columnas compuestas simples.

Digamos que tenemos las columnas 'a', 'b', 'c', 'd' como clave primaria compuesta + columnas 'e', ​​'f'. Sé que 'a' será la clave de la fila y la partición.

Supongamos los siguientes datos:

a b c d e f 
1a 1b 1c 1d e1 f1 
1a 1b 1c 2d e1 f2 
1a 1b 1c 2d e2 f3 
2a 2b 2c 2d e2 f4 

2: ¿Cómo se almacena esta bajo el capó? Supongo que la verdadera pregunta aquí es cómo se definen 'b', 'c', 'd', ya que las columnas no son jerárquicas por definición.

3: La documentación que he leído indica que el almacenamiento compacto ya no se debe utilizar. Pero, ¿qué sucede si no se necesitan agregar columnas de clave no primarias? ¿Cuál es la razón para no usarlas?

Respuesta

2

1: ¿Cómo se implementan las claves compuestas y los nombres de columna?

Respondido principalmente con la pregunta 2. Además, en Cassandra 1.2, las teclas no compuestas también se implementarán como teclas compuestas debajo del capó. Además, los nombres propios de las columnas compuestas no se repiten en el almacenamiento. La representación en memoria interna los nombres hasta un umbral para la eficiencia de la memoria.

2: ¿Cómo se almacena debajo del capó?

El primer componente clave (a en su ejemplo) se convierte en la clave de fila física. El resto de las columnas forman el prefijo para las columnas no compuestas y se almacenan previamente ordenadas (agrupadas) dentro de una fila. Por lo tanto, la representación física por su ejemplo será la siguiente:

1b.1c.1d, e 1b.1c.1d, f 
1a  e1   f1 
------------------------------ 
    2b.2c.2d, e 2b.2c.2d, f 
2a  e2   f4 

Tenga en cuenta que la segunda y tercera filas en el ejemplo son no válida. Los nombres de columna deben ser únicos dentro de las filas físicas.

La notación de puntos que utilicé (1b.1c.1d) es figurativa. El almacenamiento real utiliza bytes de prefijo para metadatos seguidos de datos.

La documentación que he leído indica que el almacenamiento compacto ya no se debe utilizar.Pero, ¿qué sucede si no se necesitan agregar columnas de clave no primarias? ¿Cuál es la razón para no usarlas?

La eficiencia de almacenamiento muy pequeña no es la desventaja de no tener evolvability en su esquema.

+0

Muchas gracias! – IamIC

+0

¿Qué quiere decir con "claves no compuestas"? Seguramente una clave es 1 componente (sin columnas) o compuesto (1 clave y columnas compuestas)? – IamIC

Cuestiones relacionadas