Cassandra学习2 - Primary Key, Partition Key, and Clustering Key

Cassandra学习2 - Primary Key, Partition Key, and Clustering Key

Primary Key

这个很容易理解。比如,我们新创建一个表,

CREATE TABLE IF NOT exists message (
id            timeuuid,
creation_time timestamp,
recipient     ascii,
content       text,
PRIMARY KEY (id, creation_time)
) WITH CLUSTERING ORDER BY (creation_time DESC);

idcreation_time就是复合主键,Compound primary key
在主键中的列又可分为partition key和clustering key。

Partition Key

理解partition key必须要了解Cassandra数据库的物理结构。Cassandra数据库是由很多个Node组成的Cluster。所有的数据都是分布在不同的Node上,只有partition key可以决定数据到底是存在哪一个Node上面。
Cassandra使用自身的HashFunction,把partition key作为参数来计算出一个Hash值。每个Node都有自己的Hash值范围,当一条记录所计算出的Hash值复合某个Node,那么这条数据就将保存在这个Node上面。
5 nodes in the cluster
比如哈希值是17的记录被存储在node 2上。哈希值41的记录会被存储在node 5上面。
message表compound primary key中的第一列就是partition key。它只包含了一列。实际中partition key可以包含多个列,这种情况称为composite key
例如,

CREATE TABLE IF NOT exists <TABLE> (
col_1            <data_type>,
col_2            <data_type>,
col_3            <data_type>,
col_4            <data_type>,
col_5            <data_type>,
PRIMARY KEY ((col_1,col_2,col_3),col_4,col_5)
) WITH CLUSTERING ORDER BY (col_4 DESC,col_5 ASC);

col_1col_2col_3,三个column是composite partition key。

Clustering Key

Clustering keys are responsible for sorting data within a partition. Each primary key column after the partition key is considered a clustering key.
Clustering key是给数据排序用的。在primary key中除了partition key外的所有key都是clustering key。
但是必须要注意的是,clustering key的排序只对同一个node上数据才起作用。
比较一下保存在message表中的两组数据。
A组
B组
Table message的partition key是id。A组数据使用不同的id,如果错误的理解了clustering key,你可能会误以为clustering key creation_time失效。B组数据使用完全相同的id,明显可以发现clustering key的作用。

和SELECT语句的关系

Cassandra不同于关系数据库,查询语句中的条件受primary key的限制。远远不如关系型数据库的查询自由。
比如,

  • 如果有查询条件必须包括partition key。
  • 查询条件中column的顺序必须和primary key中clustering key定义的顺序一致。比如,

SELECT * FROM

WHERE col_1=? AND col_2=? AND col_3 AND col_4=?;
或者
SELECT * FROM
WHERE col_1=? AND col_2=? AND col_3 AND col_4=? AND col_5;
这些在设计表的时候都必须考虑进去。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值