que keyspace data create comandos database cassandra cql

database - keyspace - create table cassandra



¿Diferencia entre la clave de partición, la clave compuesta y la clave de agrupamiento en Cassandra? (7)

Agregar una respuesta de redux como la aceptada es bastante largo. Los términos "fila" y "columna" se usan en el contexto de CQL, no cómo se implementa realmente Cassandra.

  • Una clave primaria identifica de forma única una fila.
  • Una clave compuesta es una clave formada a partir de varias columnas.
  • Una clave de partición es la búsqueda principal para encontrar un conjunto de filas, es decir, una partición.
  • Una clave de agrupación es la parte de la clave principal que no es la clave de partición (y define el orden dentro de una partición).

Ejemplos:

  • PRIMARY KEY (a) : La clave de partición es a .
  • PRIMARY KEY (a, b) : La clave de partición es a , la clave de agrupación es b .
  • PRIMARY KEY ((a, b)) : La clave de partición compuesta es (a, b) .
  • PRIMARY KEY (a, b, c) : la clave de partición es a , 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 es c .
  • PRIMARY KEY ((a, b), c, d) : La clave de partición compuesta es (a, b) , la clave de agrupamiento compuesta es (c, d) .

He estado leyendo artículos en la red para comprender las diferencias entre los siguientes tipos de key . 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


Cabe destacar 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 predominan en este caso? Así (de la guía oficial de Cassandra ):

CREATE TABLE group_join_dates ( groupname text, joined timeuuid, join_date text, username text, email text, age int, PRIMARY KEY ((groupname, join_date), joined) ) WITH CLUSTERING ORDER BY (joined DESC)

Aquí, la clave de partición está compuesta y la clave de agrupación es una fecha conjunta. La razón por la que una clave de agrupación es una fecha de unión es que los resultados ya están ordenados (y almacenados, lo que hace que las búsquedas sean más rápidas). Pero, ¿por qué usamos una clave compuesta para particionar la clave ? Porque siempre queremos leer la menor cantidad de particiones posible . ¿Cómo poner join_date allí ayuda? ¡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 de particiones posible (primero comience con las más nuevas, luego pase a las más antiguas y así sucesivamente, en lugar de saltar entre ellas).

De hecho, en casos extremos, también necesitaría usar el hash de join_date en lugar de join_date solo, de modo que si consulta durante los últimos 3 días, a menudo comparten el mismo hash y, por lo tanto, ¡están disponibles desde la misma partición!


En Cassandra, la diferencia entre la clave principal, la clave de partición, la clave compuesta, la clave de agrupación siempre genera cierta confusión. Por lo tanto, explicaré a continuación y me relacionaré entre sí. Usamos CQL (Cassandra Query Language) para el acceso 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 principal.

CREATE TABLE Cass ( id int PRIMARY KEY, name text );

Create Table Cass ( id int, name text, PRIMARY KEY(id) );

En CQL, el orden en que se definen las columnas para la CLAVE PRIMARIA es importante. La primera columna de la clave se denomina clave de partición y 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 realiza de forma atómica y 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.

Partición y agrupación La definición de CLAVE PRINCIPAL se compone de dos partes: la clave de partición y las columnas de agrupación. La primera parte se asigna a la clave de fila del motor de almacenamiento, mientras que la segunda se utiliza para agrupar columnas en una fila.

CREATE TABLE device_check ( device_id int, checked_at timestamp, is_power boolean, is_locked boolean, PRIMARY KEY (device_id, checked_at) );

Aquí device_id es la clave de partición y checked_at es cluster_key.

Podemos tener varias claves de clúster así como también una clave de partición que depende de la declaración.


En breve sentido:

La clave de partición no es más que la identificación de una fila, esa identificación la mayoría de las veces es la única columna (denominada clave principal ), a veces una combinación de varias columnas (denominada clave de partición compuesta ).

La clave de clúster no es más que indexación y clasificación . Las claves de cluster dependen de algunas cosas:

  1. Las columnas que utiliza en la cláusula where excepto las columnas de clave principal.

  2. Si tiene registros muy grandes, entonces, en lo que me preocupa, puedo dividir la fecha para facilitar la administración. Ejemplo, tengo datos de 1 millón de registros de población del condado. Así que para facilitar la administración, agrupo los datos según el estado y después del código PIN y así sucesivamente.


En el diseño de la base 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, primer nombre, apellido}

Las posibles superkeys son:

{employee_id} {employee_id, firstname} {employee_id, firstname, surname}

{employee_id} es la única superclave mínima, que también la convierte en la única clave candidata, dado que {firstname} y {surname} no garantizan la unicidad. Dado que una clave principal 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:

{employee_id, firstname} {employee_id, surname} {employee_id, firstname, surname}

La única clave compuesta es {employee_id, firstname, surname} ya que esa clave contiene una clave compuesta ({employee_id, firstname}) y un atributo que no es una superclave ({surname}).


Hay mucha confusión en torno a esto, intentaré hacerlo lo más simple posible.

La clave principal 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:

create table _simple ( key text PRIMARY KEY, data text );

Eso significa que está hecho por una sola columna.

Pero la clave principal también puede ser COMPUESTO (también conocido como COMPUESTO ), generado a partir de más columnas.

create table _composite ( key_part_one text, key_part_two int, data text, PRIMARY KEY(key_part_one, key_part_two) );

En una situación de clave primaria COMPUESTA, la "primera parte" de la clave 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 CLUSTERING KEY (en este ejemplo key_part_two )

Tenga en cuenta que tanto la partición como la clave de agrupación se pueden crear con más columnas , así es como:

create table _multiple ( k_part_one text, k_part_two int, k_clust_one text, k_clust_two int, k_clust_three uuid, data text, PRIMARY KEY((k_part_one, k_part_two), k_clust_one, k_clust_two, k_clust_three) );

Detrás de estos nombres ...

  • La clave de partición es responsable de la distribución de datos a través de sus nodos.
  • La clave de agrupación es responsable de la clasificación de datos dentro de la partición.
  • La clave principal es equivalente a la clave de partición en una tabla de clave de campo único (es decir, simple ).
  • La clave compuesta / compuesta es cualquier clave de varias columnas

Más información de uso: DOCUMENTACIÓN DATASTAX

Pequeños ejemplos de uso y contenido.
LLAVE SIMPLE :

insert into _simple (key, data) VALUES (''han'', ''solo''); select * from _simple where key=''han'';

contenido de la tabla

key | data ----+------ han | solo

LA CLAVE COMPUESTA / COMPUESTA puede recuperar "filas anchas" (es decir, puede consultar solo con la clave de partición, incluso si tiene claves de agrupamiento definidas)

insert into _composite (key_part_one, key_part_two, data) VALUES (''ronaldo'', 9, ''football player''); insert into _composite (key_part_one, key_part_two, data) VALUES (''ronaldo'', 10, ''ex-football player''); select * from _composite where key_part_one = ''ronaldo'';

contenido de la tabla

key_part_one | key_part_two | data --------------+--------------+-------------------- ronaldo | 9 | football player ronaldo | 10 | ex-football player

Pero puede consultar con todas las claves (tanto de partición como de agrupamiento) ...

select * from _composite where key_part_one = ''ronaldo'' and key_part_two = 10;

salida de consulta

key_part_one | key_part_two | data --------------+--------------+-------------------- ronaldo | 10 | ex-football player

Nota importante: la clave de partición es el mínimo especificador necesario para realizar una consulta utilizando una where clause . Si tiene una clave de partición compuesta, como la siguiente

Ej .: PRIMARY KEY((col1, col2), col10, col4))

Puede realizar consultas solo pasando al menos tanto col1 como col2, estas son las 2 columnas que definen la clave de partición. La regla "general" para realizar la consulta es que debe pasar al menos todas las columnas de la clave de partición, luego puede agregar opcionalmente cada clave de agrupación en el orden en que están establecidas.

así que las consultas válidas son ( excluyendo índices secundarios )

  • col1 y col2
  • col1 y col2 y col10
  • col1 y col2 y col10 y col 4

Inválido:

  • col1 y col2 y col4
  • Cualquier cosa que no contenga tanto col1 como col2.

Espero que esto ayude.


Clave principal : se compone de claves de partición [y claves de agrupamiento (o columnas) 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 en clúster : se utiliza para ordenar los datos en cada una de las particiones (o nodo responsable y sus réplicas)

Clave principal compuesta : Como se dijo anteriormente, las claves de agrupamiento son opcionales en una Clave principal. Si no se mencionan, es una clave principal simple. Si se mencionan claves de agrupamiento, es una clave principal 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 caso de uso / modelado de 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 puede omitirse, etc. en una consulta, tratar de imaginar a Cassandra como un gigante HashMap ayuda. Así que en un HashMap, no puede recuperar los valores sin la clave.
Aquí, las teclas de partición juegan el papel de esa tecla. Así que cada consulta debe tenerlos especificados. Sin el cual Cassandra no sabrá qué nodo buscar.
Las claves de agrupamiento (columnas, que son opcionales) ayudan a limitar aún más la búsqueda de consultas después de que Cassandra encuentre el nodo específico (y sus réplicas) responsable de esa clave de partición específica.