Tenho lido artigos em torno da rede para compreender as diferenças entre os seguintes tipos "chave". Mas parece-me difícil de compreender. Os exemplos irão sem dúvida ajudar a melhorar a compreensão.
primary key,
partition key,
composite key
clustering key
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 utilizadas para recuperar dados de uma Tabela.
A chave primária pode ser *SIMPLE** e até declarada em linha:
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 *COMPOSITE*** (aka COMPOUND***), gerada 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)
);
Numa situação de COMPOSITE chave primária, a "a primeira parte" da chave chama-se PARTITION KEY (neste exemplo key_part_part_one** é a chave de partição) e a segunda parte da chave é a CLUSTERING KEY* (neste exemplo *key_part_two)
Por favor note que tanto a chave de partição como a chave de agrupamento podem ser feitas por mais colunas, aqui's 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 ...
Mais informações de utilização: DATASTAX DOCUMENTATION
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';
** conteúdo da mesa***
key | data
----+------
han | solo
*COMPOSITE/COMPOUND KEY** pode recuperar "linhas largas" (ou seja, pode consultar apenas pela chave de partição, mesmo que tenha 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 mesa***
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 9 | football player
ronaldo | 10 | ex-football player
Mas pode consultar com todas as chaves (tanto de partição como de agrupamento) ...
select * from stackoverflow_composite
where key_part_one = 'ronaldo' and key_part_two = 10;
**saída de 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 realizar uma consulta utilizando uma cláusula "where clause". Se tiver uma chave de partição composta, como a seguinte
eg: PRIMARY KEY((col1, col2), col10, col4))
Só se pode efectuar a consulta passando pelo menos col1 e col2, estas são as 2 colunas que definem a chave de partição. A "general" regra para fazer consulta é ter de passar pelo menos todas as colunas da chave de partição, depois pode adicionar opcionalmente cada chave de agrupamento na ordem que elas'reajustam.
por isso as consultas válidas são (excluindo índices secundários)
Inválido:
Espero que isto ajude.
Acrescentar uma resposta resumida como a aceite é bastante longa. Os termos "row" e "column" são utilizados no contexto do CQL, e não como a Cassandra é efectivamente implementada.
Exemplos:
: A chave de partição é
a`.: A chave de partição é
a, a chave de agrupamento é
b`.: A chave de partição composta é
(a, b)`.: A chave de partição é
a, a chave de agrupamento composta é
(b, c)`.: A chave de partição composta é
(a, b), a chave de aglomeração é
c`.: A chave de partição composta é
(a, b), a chave de aglomeração composta é
(c, d)`.CREATE TABLE Cass (
id int PRIMARY KEY,
name text
);
Create Table Cass (
id int,
name text,
PRIMARY KEY(id)
);
No CQL, a ordem em que as colunas são definidas para a CHAVE PRIMÁRIA é importante. A primeira coluna da chave chama-se chave de partição com a propriedade de que todas as linhas que partilham a mesma chave de partição (mesmo em toda a tabela de facto) são armazenadas no mesmo nó físico. Além disso, a inserção/actualização/apagamento nas linhas que partilham a mesma chave de partição para uma dada tabela são efectuados atomicamente e isoladamente. Note-se que é possível ter uma chave de partição composta, ou seja, uma chave de partição formada por múltiplas colunas, utilizando um conjunto extra de parênteses para definir quais as colunas que formam a chave de partição.
**Particionamento e Agrupamento*** A definição da CHAVE PRIMÁRIA é constituída por duas partes: a Chave de Partição e as Colunas de Aglomeração. A primeira parte mapeia a chave de linha do motor de armazenamento, enquanto a segunda é utilizada para agrupar colunas numa linha.
CREATE TABLE device_check (
device_id int,
checked_at timestamp,
is_power boolean,
is_locked boolean,
PRIMARY KEY (device_id, checked_at)
);
Aqui device_id é chave de partição e check_at é chave_de_agrupamento.
Também podemos ter múltiplas chaves de agrupamento, bem como chaves de partição que dependem da declaração.