Diferença entre a chave de partição, a chave composta e a chave de agrupamento em Cassandra?

tenho lido artigos em torno da rede para entender as diferenças entre os seguintes tipos key. Mas parece-me difícil de entender. Os exemplos ajudarão definitivamente a melhorar a compreensão.

primary key,
partition key, 
composite key 
clustering key
Author: Rodrigo, 2014-07-25

7 answers

Há muita confusão em torno disto, vou tentar torná-lo o mais simples possível.

A chave primária é um conceito geral para indicar uma ou mais colunas usadas para recuperar dados de uma tabela.

A chave primária pode ser: simples e mesmo declarado inline:

 create table stackoverflow_simple (
      key text PRIMARY KEY,
      data text      
  );
Isso significa que é feito por uma única coluna.

, Mas a chave primária também pode ser COMPOSTO (aka COMPOSTO), gerado a partir de mais colunas.

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

Em situação de COMPOSTO chave primária, a "primeira parte" da chave é chamado de CHAVE de PARTIÇÃO (neste exemplo key_part_one é a chave de partição) e a segunda parte da chave é o CHAVE de CLUSTER (neste exemplo key_part_two)

Por favor, note que tanto a partição como a tecla de agrupamento podem ser feitas por mais colunas , Aqui está como:

 create table stackoverflow_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)      
  );

Por detrás destes nomes ...

  • A chave de partiçãoé responsável pela distribuição de dados através dos seus nós.
  • A chave de agrupamento é responsável pela ordenação de dados dentro da partição.
  • a chave primária {[20] } é equivalente à Chave de partição numa tabela-chave de campo único (ou seja simples).
  • A chave composto / composto é qualquer coluna múltipla. chave

Mais informações de Utilização: documentação DATASTAX


Pequenos exemplos de utilização e conteúdo
simples chave:
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';

Conteúdo da tabela

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

chave composta / composta pode obter "linhas largas" (ou seja, pode consultar apenas pela chave de partição, mesmo que tenha as chaves de agrupamento definidas)

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

Conteúdo da tabela

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

Mas podes perguntar com toda a chave (partição e agrupamento) ...

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

Resultado da Pesquisa

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

Nota importante: a chave de partição é o especificador mínimo necessário para efectuar uma consulta usando um where clause. Se você tem uma chave de partição composta, como o seguinte

Eg: PRIMARY KEY((col1, col2), col10, col4))

Só pode efectuar consultas passando pelo menos tanto o col1 como o col2, estas são as 2 colunas que definem a chave de partição. A regra "geral" para fazer a consulta é que você tem que passar pelo menos todos colunas da chave de partição, então você pode adicionar opcionalmente cada tecla de agrupamento na ordem em que eles estão definidos.

As consultas válidas são (excluindo os índices secundários)

  • col1 e col2
  • col1, col2 e col10
  • col1 e col2 e col10 e col 4

Inválido:

  • col1, col2 e col4
  • qualquer coisa que não contenha tanto col1 como col2
Espero que isto ajude.
 931
Author: Carlo Bertuccini, 2018-05-22 08:01:18
Adicionar uma resposta redux como a aceite é bastante longa. Os Termos "linha " e" coluna " são usados no contexto de CQL, não como Cassandra é realmente implementado.
  • uma chave primária identifica uma linha de forma única.
  • uma chave composta é uma chave formada a partir de múltiplas colunas.
  • uma chave de partição é a procura primária para encontrar um conjunto de linhas, ou seja, uma partição.
  • uma chave de agrupamento é a parte da chave primária que não é a chave de partição (e define a ordenação dentro de uma partição).

Exemplos:

  • PRIMARY KEY (a): a chave da partição é a.
  • PRIMARY KEY (a, b): a chave de partição é a, a chave de agrupamento é b.
  • PRIMARY KEY ((a, b)): a chave de partição composta é (a, b).
  • PRIMARY KEY (a, b, c): a chave de partição é a, a chave de agrupamento composta é (b, c).
  • PRIMARY KEY ((a, b), c): a chave de partição composta é (a, b), a chave de agrupamento é c.
  • PRIMARY KEY ((a, b), c, d): a chave de partição composta é (a, b), a a chave de agrupamento composta é (c, d).
 84
Author: OrangeDog, 2017-08-14 14:13:24
Em cassandra,a diferença entre chave primária,chave de partição,chave composta, chave de agrupamento sempre faz alguma confusão.. Então vou explicar abaixo e me relacionar uns com os outros. Usamos CQL (Cassandra Query Language) para acesso à base de dados Cassandra. Nota: - a resposta é conforme a versão atualizada de Cassandra. Chave Primária :- Em cassandra há duas formas diferentes de usar a chave primária .
CREATE TABLE Cass (
    id int PRIMARY KEY,
    name text 
);

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

Em CQL, a ordem em que as colunas são definido para as principais questões-chave. A primeira coluna da chave é chamada de chave de partição tendo propriedade de que todas as linhas compartilhando a mesma chave de partição (mesmo em toda a tabela de fato) são armazenadas no mesmo nó físico. Além disso, inserção/atualização/exclusão em linhas que compartilham a mesma chave de partição para uma dada tabela são realizadas atomicamente E ISOLADAMENTE. Note que é possível ter uma chave de partição composta, ou seja, uma chave de partição formada de múltiplas colunas, usando um conjunto extra de parênteses para definir que colunas forma a chave de partição.

Separação e agrupamento A definição de chave primária é composta por duas partes: a chave de partição e as colunas de agrupamento. A primeira parte mapeia para a chave de linha do motor de armazenamento, enquanto a segunda é usada para agrupar colunas em uma linha.

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

Aqui o device_id é a chave de partição e o checked_ AT é o cluster_key.

Podemos ter várias chaves de grupo, bem como a chave de partição também, o que depende da declaração.

 12
Author: Big Data Guy, 2016-05-15 08:51:40

Chave Primária: É composto de chave de partição(s) [e opcional chaves de cluster(ou colunas)]
Chave de Partição: O valor de hash da chave de Partição é usado para determinar específicos nó em um cluster para armazenamento de dados
Chave de Cluster: É usado para classificar os dados em cada uma das partições(ou responsável nó e réplicas)

Chave primária composta: Como dito acima, as chaves de agrupamento são opcionais numa chave primária. Se não forem mencionados, é uma chave primária simples. Se as chaves de agrupamento são mencionadas, é uma chave primária composta.

Chave de partição composta : Se usar apenas uma coluna como chave de partição, poderá resultar em questões de linhas largas (depende da modelagem de caso de Utilização/dados). Assim, a chave de partição é por vezes especificada como uma combinação de mais de uma coluna.

quanto à confusão de que um é obrigatório, qual deles pode ser ignorado, etc. em uma consulta, tentando imagine Cassandra como uma HashMap gigante ajuda. Então, em um HashMap, você não pode recuperar os valores sem a chave.
Aqui, as chaves de Partição desempenham o papel dessa chave. Por isso, cada consulta precisa de os especificar. Sem o qual a Cassandra não saberá que nó procurar.
As teclas de agrupamento (colunas, que são opcionais) ajudam a reduzir ainda mais a procura da sua consulta, depois de a Cassandra descobrir o nó específico(e são réplicas) responsável por esse nó específico Chave de Partição .

 5
Author: dd9chndn, 2018-03-29 11:05:50

Em breve sentido:

Chave de Partição não é nada, mas identificação para uma linha, em que a identificação na maioria das vezes é a única coluna (chamado Primary Key), por vezes, uma combinação de várias colunas (chamados Composto Chave de Partição).

Cluster key não é nada mais que indexação & Classificação As teclas de Cluster dependem de algumas coisas:

  1. Que colunas você usa em onde cláusula exceto colunas principais.

  2. Se você tem registros muito grandes, então em que preocupação eu posso dividir a data para uma gestão fácil. Por exemplo, tenho dados de mil milhões de registos da população do Condado. Então, para uma gestão fácil, eu agrupar dados baseados no estado e depois pincode e assim por diante.

 3
Author: Sun, 2018-01-12 06:30:21
Vale a pena notar, você provavelmente vai usar esses lotes mais do que em conceitos similares no mundo relacional (chaves compostas).

Exemplo - suponha que terá de encontrar os últimos utilizadores de N que se juntaram recentemente ao grupo X. como faria isto de forma eficiente, dado que as leituras são predominantes neste caso? Assim .):

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)

Aqui, chave de particionamento {[10] } é composta por si mesma e a chave de agrupamento é uma data Unida. A razão pela qual a chave de agrupamento é uma data de adesão é que os resultados já estão ordenados (e armazenados, o que torna as pesquisas rápidas). Mas por que usamos uma chave composta para a chave de particionamento ? Porque queremos sempre ler o menor número possível de partições. Como colocar join_ date aí ajuda? Agora os usuários do mesmo grupo e a mesma data de adesão residirão em uma única partição! Isto significa que vamos sempre ler o menor número de partições possível (primeiro começar com o mais novo, em seguida, mova-se para mais velho e assim por diante, em vez de saltar entre eles).

Na verdade, em casos extremos, você também precisará usar a hash de um join_date em vez de join_date sozinho - de modo que, se você consulta para os 3 últimos dias, muitas vezes aqueles que compartilham o mesmo hash e, portanto, estão disponíveis a partir do mesmo partição!

 0
Author: kboom, 2018-03-24 16:50:56

No desenho da base de dados, uma chave composta é um conjunto de superkeys que não é mínima.

Uma chave composta é um conjunto que contém uma chave composta e pelo menos um atributo que não é uma superkey

Quadro indicado: Empregados {nome próprio, apelido, nome próprio}

As possíveis Super-Chaves são:

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

{employee_id} é a única superkey mínima, o que também a torna a única chave candidata--dado que {nome próprio} e {apelido} não garantem unicidade. Uma vez que a chave é definida como uma chave candidata escolhida, e apenas uma chave candidata existe neste exemplo, {employee_id} é a super-chave mínima, a única chave candidata e a única chave primária possível.

A lista exaustiva de teclas compostas é:

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

A única chave composta é {employe_id, nome próprio, apelido} uma vez que essa chave contém uma chave composta ({employe_id,nome próprio}) e um atributo que não é um superkey ({apelido}).

 -2
Author: Khurana, 2017-05-24 10:18:38