cassandra的四种key
primary key,
partition key,
composite key
clustering key
primary key
用于数据分区的的key,其中primary key有以下几种形式:
1,最基本的形式:
create table stackoverflow (
key text PRIMARY KEY,
data text
);
2,组合类型:
create table stackoverflow (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
);
第一部分是partition key(key_part_one), 第二部分是clustering key(key_part_two),clustering key会让一个分区内的数据进行排序
3,partition key和clustering key都是可以由多列组合在一起的,如下
create table stackoverflow (
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)
);
上面的建表语句的分区规则如下:相同的k_part_one和相同的k_part_two会存储在一个分区内,相同的k_part_one 不同的k_part_two会存储在不同到分区内,当然依次类推。。。。
下面给出几个插入,查询的例子:
例子1,简单的primary key
insert into stackoverflow (key, data) VALUES ('han', 'solo');
select * from stackoverflow where key='han';
table content
key | data
----+------
han | solo
例子2:组合的primary key
insert into stackoverflow (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'football player');
insert into stackoverflow (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'ex-football player');
select * from stackoverflow where key_part_one = 'ronaldo';
select * from stackoverflow where key_part_one = 'ronaldo' and key_part_two = 10;
table content
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 9 | football player
ronaldo | 10 | ex-football player
需要注意的是:
partition key是最小的where查询条件的基础,举一个组合primary key的例子,
PRIMARY KEY((col1, col2), col10, col4))
其中col1和col2 组成了partition key ,col10和col4为 clustering key(注意 col10和col4也是有先后顺序的,这里的先后顺序类似于mysql中的最左前缀规则)
道理说不清楚,看以下几个例子就明白了
合法的where查询规则为(不考虑二级索引)
不合法对where查询规则为
http://docs.datastax.com/en/cql/3.0/cql/cql_reference/create_table_r.html