Cassandra key说明——Cassandra 整体数据可以理解成一个巨大的嵌套的Map Map<RowKey, SortedMap<ColumnKey, ColumnValue>>
Cassandra之中一共包含下面5种Key:
- Primary Key
- Partition Key
- Composite Key
- Compound Key
- Clustering Key
首先,Primary key 是用来获取某一行的数据, 可以是一列或者多列(复合列 composite)
Primary = Partition Key + [Clustering Key] (Clustering Key 可选)
Clustering keys 包括下面两种情况:
(1) composite key
(2) compound key
1
2
3
4
5
6
7
8
9
10
11
12
|
-- 一列
create table stackoverflow (
key text PRIMARY KEY,
data text
);
-- 复合列
create table stackoverflow (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
);
|
在上面复合列的table之中,全称: Composite Primary Key
并且:
(1) key_part_one –> partition key
(2) key_part_two –> clustering key
注意: partition key, clustering key 都可以是复合列。
Partition Key : Cassandra会对partition key 做一个hash计算,并自己决定将这一条记录放在哪个node
Partition Key的设计,可以完全的借用MySQL的主键。
Cassandra会给每一行数据一个timestamp,如果有多行数据,Cassandra会取时间最新的数据返回!
Clustering Key : 主要用于进行Range Query. 并且使用的时候需要按照建表顺序进行提供信息!
参考下面代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
-- 创建表
-- 注意state 这个field
CREATE TABLE users (
mainland text,
state text,
uid int,
name text,
zip int,
PRIMARY KEY ((mainland), state, uid)
)
-- 插入一些值
insert into users (mainland, state, uid, name, zip)
VALUES ( 'northamerica', 'washington', 1, 'john', 98100);
xxxx more
insert into users (mainland, state, uid, name, zip)
VALUES ( 'southamerica', 'argentina', 6, 'alex', 10840);
|
有效的查询:
1
|
select * from users where mainland = 'northamerica' and state > 'ca' and state < 'ny';
|
本质是先node上查找后,然后range筛选!