我一直在网上阅读文章,以了解以下key种类型之间的不同之处.但这对我来说似乎很难理解.举例肯定会有助于更好地理解.

primary key,
partition key, 
composite key 
clustering key

推荐答案

围绕这一点的念力很多,我会尽量简单一点.

主键是一个通用概念,用于指示用于从表中检索数据的一个或多个列.

主键可以是100,甚至可以内联声明:

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

这意味着它是由一根柱子制成的.

但是主键也可以是100(也就是101),从更多的列生成.

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

在主键为100的情况下,键的"第一部分"称为101(在本例中为分区键),键的第二部分为103(在本例中为key_part_two)

Please note that both partition and clustering key can be made by more columns,这是如何做到的:

 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)      
  );

在这些名字背后...

  • Partition Key负责跨您的 node 分发数据.
  • Clustering Key负责分区内的数据排序.
  • Primary Key相当于单个字段密钥表中的Partition Key(即Simple).
  • Composite/Compound Key只是任意多列键

更多用法信息:DATASTAX DOCUMENTATION


Small usage and content examples
***SIMPLE*** KEY:
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';

table content

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

100可以检索"宽行"(即,即使您定义了聚集键,也可以只按分区键进行查询)

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';

table content

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

但是您可以使用所有键(分区和集群)进行查询.

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

query output

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

重要提示:分区键是使用where clause执行查询所需的最小说明符.

例句:PRIMARY KEY((col1, col2), col10, col4))

您只能通过至少同时传递col1和col2来执行查询,这两列定义了分区键.进行查询的"一般"规则是,您必须至少传递所有分区键列,然后您可以 Select 按设置的顺序添加每个聚集键.

因此,有效查询为(excluding secondary indexes)

  • col1和col2
  • col1和col2 and col10
  • col1和col2 and col10 and col 4

无效:

  • col1和col2 and col4
  • anything that does not contain both col1和col2

Database相关问答推荐

将数据拆分为月份(以Postgres为单位

如何使用聚合管道从对象数组中获取正确的百分比

有关托管默认 SQL Server 实例的 Azure VM 数据库服务器的问题

如何将 Scylla DB 中的计数器列重置为零?

数据库 struct 建议

更新查询 PHP MySQL

Android - SQLite 数据库存储在哪里?

MySQL 中的多个 OR 子句

将 XML 存储在数据库中是否不好?

有没有办法在一个脚本中创建多个触发器?

如何产生幻读?

Android 在用户之间同步数据

MongooseJS - 如何找到具有最大值的元素?

可以将 SQLAlchemy 配置为非阻塞吗?

数据库触发器的命名约定

如何在 SQL Server 中创建数据库的别名

如何在 MySQL 中清理或调整 ibtmp1 文件的大小?

如何在我的数据库中避免 NULL,同时还表示丢失的数据?

如何安装/更新到 Postgres 9.4?

清空数据库是什么意思?