He estado leyendo artículos en la red para comprender las diferencias entre los siguientes key
tipos. Pero me parece difícil de entender. Los ejemplos definitivamente ayudarán a mejorar la comprensión.
primary key,
partition key,
composite key
clustering key
Respuestas:
Hay mucha confusión en torno a esto, intentaré hacerlo lo más simple posible.
La clave primaria es un concepto general para indicar una o más columnas utilizadas para recuperar datos de una tabla.
La clave principal puede ser SIMPLE e incluso declarada en línea:
Eso significa que está hecho por una sola columna.
Pero la clave primaria también puede ser COMPUESTO (también conocido como COMPUESTO ), generado a partir de varias columnas.
En una situación de COMPOSITE clave principal, la "primera parte" de la tecla que se denomina clave de partición (en este ejemplo key_part_one es la clave de partición) y la segunda parte de la clave es la clave de agrupación (en este ejemplo key_part_two )
Tenga en cuenta que tanto la clave de partición como la agrupación en clúster se pueden hacer con más columnas , así es como:
Detrás de estos nombres ...
Información de uso adicional: DOCUMENTACIÓN DE DATASTAX
Uso pequeño y ejemplos de contenido CLAVE
SIMPLE :
contenido de la tabla
COMPOSITE / COMPOUND KEY puede recuperar "filas anchas" (es decir, puede consultar solo con la clave de partición, incluso si tiene claves de agrupación definidas)
contenido de la tabla
Pero puede consultar con todas las claves (partición y agrupación) ...
salida de consulta
Nota importante: la clave de partición es el especificador mínimo necesario para realizar una consulta usando a
where clause
. Si tiene una clave de partición compuesta, como la siguientep.ej:
PRIMARY KEY((col1, col2), col10, col4))
Puede realizar consultas solo pasando al menos col1 y col2, estas son las 2 columnas que definen la clave de partición. La regla "general" para realizar una consulta es que debe pasar al menos todas las columnas de claves de partición, luego puede agregar opcionalmente cada clave de agrupación en el orden en que se establecen.
entonces las consultas válidas son ( excluyendo índices secundarios )
Inválido:
Espero que esto ayude.
fuente
Agregar una respuesta resumida como la aceptada es bastante larga. Los términos "fila" y "columna" se usan en el contexto de CQL, no cómo se implementa realmente Cassandra.
Ejemplos:
PRIMARY KEY (a)
: La clave de partición esa
.PRIMARY KEY (a, b)
: La clave de partición esa
, la clave de agrupación esb
.PRIMARY KEY ((a, b))
: La clave de partición compuesta es(a, b)
.PRIMARY KEY (a, b, c)
: La clave de partición esa
, la clave de agrupación compuesta es(b, c)
.PRIMARY KEY ((a, b), c)
: La clave de partición compuesta es(a, b)
, la clave de agrupación esc
.PRIMARY KEY ((a, b), c, d)
: La clave de partición compuesta es(a, b)
, la clave de agrupación compuesta es(c, d)
.fuente
En cassandra, la diferencia entre la clave primaria, la clave de partición, la clave compuesta, la clave de agrupamiento siempre genera cierta confusión. Así que voy a explicar a continuación y relacionarme entre sí. Utilizamos CQL (lenguaje de consulta de Cassandra) para acceder a la base de datos de Cassandra. Nota: - La respuesta es según la versión actualizada de Cassandra. Clave primaria :-
En cassandra hay 2 formas diferentes de usar la clave primaria.
En CQL, el orden en que se definen las columnas para la CLAVE PRIMARIA es importante. La primera columna de la clave se llama clave de partición que tiene la propiedad de que todas las filas que comparten la misma clave de partición (incluso en la tabla de hecho) se almacenan en el mismo nodo físico. Además, la inserción / actualización / eliminación en filas que comparten la misma clave de partición para una tabla dada se realizan atómicamente y de forma aislada. Tenga en cuenta que es posible tener una clave de partición compuesta, es decir, una clave de partición formada por varias columnas, utilizando un conjunto adicional de paréntesis para definir qué columnas forman la clave de partición.
Particionamiento y agrupamiento La definición de CLAVE PRIMARIA se compone de dos partes: la Clave de partición y las Columnas de agrupamiento. La primera parte se asigna a la clave de fila del motor de almacenamiento, mientras que la segunda se usa para agrupar columnas en una fila.
Aquí device_id es la clave de partición y check_at es cluster_key.
Podemos tener varias claves de clúster, así como también la clave de partición, que depende de la declaración.
fuente
Clave primaria : se compone de clave (s) de partición [y claves (o columnas) de agrupamiento opcionales)
Clave de partición : el valor hash de la clave de partición se utiliza para determinar el nodo específico en un clúster para almacenar los datos
Clave de agrupación : se utiliza para ordenar los datos en cada una de las particiones (o nodo responsable y sus réplicas)
Clave primaria compuesta : como se dijo anteriormente, las claves de agrupación son opcionales en una clave primaria. Si no se mencionan, es una clave primaria simple. Si se mencionan las claves de agrupación, es una clave primaria compuesta.
Clave de partición compuesta : el uso de una sola columna como clave de partición puede generar problemas de fila amplia (depende del modelo de caso de uso / datos). Por lo tanto, la clave de partición a veces se especifica como una combinación de más de una columna.
Con respecto a la confusión de cuál es obligatorio , cuál se puede omitir, etc. en una consulta, tratar de imaginar a Cassandra como un HashMap gigante ayuda. Entonces, en un HashMap, no puede recuperar los valores sin la Clave.
Aquí, las teclas de partición juegan el papel de esa tecla. Por lo tanto, cada consulta debe tenerlos especificados. Sin el cual Cassandra no sabrá qué nodo buscar.
Las claves de agrupamiento (columnas, que son opcionales) ayudan a reducir aún más su búsqueda de consultas después de que Cassandra descubre el nodo específico (y sus réplicas) responsables de esa clave de Partición específica.
fuente
En breve sentido:
Partition Key no es más que la identificación de una fila, esa identificación la mayoría de las veces es la columna única (llamada Primary Key ), a veces una combinación de varias columnas (llamada Composite Partition Key ).
La clave de clúster no es más que indexación y clasificación . Las claves de clúster dependen de algunas cosas:
Qué columnas usa en la cláusula where, excepto las columnas de clave principal.
Si tiene registros muy grandes, entonces, sobre qué preocupación puedo dividir la fecha para una administración fácil. Ejemplo, tengo datos de 1 millón de registros de población del condado. Entonces, para una administración fácil, agrupo los datos según el estado y después del código PIN, etc.
fuente
Vale la pena señalar que probablemente usará esos lotes más que en conceptos similares en el mundo relacional (claves compuestas).
Ejemplo: suponga que tiene que encontrar los últimos N usuarios que recientemente se unieron al grupo de usuarios X. ¿Cómo haría esto de manera eficiente dado que las lecturas son predominantes en este caso? Así (de la guía oficial de Cassandra ):
Aquí, la clave de partición está compuesta y la clave de agrupación es una fecha unida. La razón por la cual una clave de agrupación es una fecha de unión es que los resultados ya están ordenados (y almacenados, lo que agiliza las búsquedas). Pero, ¿por qué usamos una clave compuesta para particionar la clave ? Porque siempre queremos leer la menor cantidad de particiones posible . ¿Cómo ayuda a join_date allí? ¡Ahora los usuarios del mismo grupo y la misma fecha de unión residirán en una sola partición! Esto significa que siempre leeremos la menor cantidad posible de particiones (primero comience con la más nueva, luego pase a la más antigua y así sucesivamente, en lugar de saltar entre ellas).
De hecho, en casos extremos, también necesitaría usar el hash de un join_date en lugar de un join_date solo, de modo que si consulta durante los últimos 3 días a menudo, esos comparten el mismo hash y, por lo tanto, están disponibles desde la misma partición.
fuente
La clave principal en Cassandra generalmente consta de dos partes: clave de partición y columnas de agrupamiento.
primary_key ((division_key), clustering_col)
Clave de partición: la primera parte de la clave primaria. El objetivo principal de una clave de partición es identificar el nodo que almacena la fila particular.
CREATE TABLE phone_book (phone_num int, name text, age int, city text, PRIMARY KEY ((phone_num, name), age);
Aquí, (phone_num, name) es la clave de partición. Al insertar los datos, se genera el valor hash de la clave de partición y este valor decide en qué nodo debe ir la fila.
Considere un clúster de 4 nodos, cada nodo tiene un rango de valores hash que puede almacenar. (Escribir) INSERTAR EN LOS VALORES de la guía telefónica (7826573732, 'Joey', 25, 'Nueva York');
Ahora, el valor hash de la clave de partición es calculado por el particionador Cassandra. digamos, valor hash (7826573732, 'Joey') → 12, ahora, esta fila se insertará en el Nodo C.
(Leer) SELECCIONAR * DESDE phone_book WHERE phone_num = 7826573732 y name = 'Joey';
Ahora, nuevamente se calcula el valor hash de la clave de partición (7826573732, 'Joey'), que es 12 en nuestro caso que reside en el Nodo C, desde el cual se realiza la lectura.
Puede haber más de una clave de partición y columnas de agrupación en una clave primaria, dependiendo de la consulta que esté resolviendo.
primary_key ((pk1, pk2), col 1, col2)
fuente
En el diseño de bases de datos, una clave compuesta es un conjunto de superclaves que no es mínimo.
Una clave compuesta es un conjunto que contiene una clave compuesta y al menos un atributo que no es una superclave
Tabla dada: EMPLEADOS {employee_id, nombre, apellido}
Las posibles superclaves son:
{employee_id} es la única superclave mínima, que también la convierte en la única clave candidata, dado que {nombre} y {apellido} no garantizan la unicidad. Dado que una clave primaria se define como una clave candidata elegida, y solo existe una clave candidata en este ejemplo, {employee_id} es la superclave mínima, la única clave candidata y la única clave primaria posible.
La lista exhaustiva de claves compuestas es:
La única clave compuesta es {employee_id, firstname, apellido} ya que esa clave contiene una clave compuesta ({employee_id, firstname}) y un atributo que no es una superclave ({apellido}).
fuente