cassandra的四种key



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 keykey_part_one, 第二部分是clustering keykey_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查询规则为(不考虑二级索引)

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

不合法对where查询规则为

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

http://docs.datastax.com/en/cql/3.0/cql/cql_reference/create_table_r.html

你可能感兴趣的:(数据库)