cassandra表中主键的类型

一、类型及区分
Cassandra的4种Key
- Primary Key 主键
- Composite Key,Compound Key 复合键
- Partition Key 分区键
- Clustering Key 集群
1.主键 Primary Key(简单主键)
- 是用来获取某一行的数据, 可以是单一列(Single column Primary Key)或者多列(Composite Primary Key)。
- 在 Single column Primary Key 决定这一条记录放在哪个节点。
例:Student_id是student的主键
create table student (Student_id int primary key, Sname text, Sbirth timestamp, Snum text, Sphone text );
查询后会发现主键和普通键的颜色不一样。

2.复合键 Composite Primary Key
- 如果 Primary Key 由多列组成,那么这种情况称为 Compound Primary Key 或 Composite Primary Key。
查询testtab,会发现key_one和key_two 的颜色与其他列不一样
复合主键由主键中引用的一个或多个列组成。复合主键的一个组件称为分区键,而另一个组件称为分簇列。以下是主键的不同变化。请注意,C1、C2、C3,…等表示表中的列。
- C1:主键只有一个分区键,没有分簇列。
- (C1,C2):列C1是分区键,列C2是分簇列。
- (C1,C2,C3,…):列C1是分区键,列C2,C3等构成分簇列。
- (C1,(C2,C3,…)):与3相同,即C1列是分区键,C2,C3…列构成分簇列。
- ((C1,C2),C3),C1,C2,C3作为复合主键,C1,C2作为复合的分区键,C3作为分簇键
- (((C1,C2,…),(C3,C4,…))):列C1,C2作分区键,列C3,C4,…作分簇列。
需要注意的是,当复合键是 C1、C2、C3 时,第一个键C1 将成为分区键,其余键成为集群键的一部分。为了制作复合分区键,我们必须在括号中指定键,例如:((C1,C2),C3,C4)。在这种情况下,C1 和 C2 是分区键的一部分,C3 和 C4 是集群键的一部分。
3.分区键 Partition Key
- 在组合主键的情况下(上面的例子),第一部分称作Partition Key(key_one就是partition key),第二部分是clustering key(key_two)
- Cassandra会对Partition key 做一个hash计算,并自己决定将这一条记录放在哪个节点。
- 如果 Partition key 由多个字段组成,称之为 Composite Partition key
例:
create table testTab (
key_part_one int,
key_part_two int,
key_clust_one int,
key_clust_two int,
key_clust_three uuid,
name text,
PRIMARY KEY((key_part_one,key_part_two), key_clust_one, key_clust_two,key_clust_three)
查询后会发现分区键,集群键和普通键的颜色不一样。

分区键在assandra中具有特殊用途,除了显示数据库中记录的独特性。另一个目的,即在分布式系统中非常关键的一个目的是确定数据位置。当数据插入集群时,第一步是在分区键上应用哈希功能。输出用于确定哪个节点(和副本)将获取数据。阿帕奇·卡桑德拉使用的算法使用Murmur3,这将采取任意输入,并创建一致的令牌值。该令牌值将属于单个节点拥有的令牌范围。简言之,分区键始终属于一个节点,该分区的数据始终位于该节点上。为什么这很重要?如果没有分区数据的绝对位置,则需要搜索集群中的每个节点以查找您的数据。在小集群中,这可能很快完成,但在更大的集群中,速度会非常缓慢。
4. 集群-分簇列(Clustering Key)
- 分簇列的目的是按排序顺序存储行数据。数据排序基于列,列包含在聚类密钥中。此排列可高效使用聚类密钥检索数据。
create table test_demo (name text,No int,phone list<text>,primary key(name,No))
with clustering order by (No desc)
// 定义分列簇为No,并说明分列簇按降序排序(DESC),升序为(ASC)
由于cassandra 底层采用键值对数据结构,因此,理论上主键、分区键和分簇键都属于行键的一部分
Example:
创建键空间

切换到students_details键空间:

创建一个表,其中包含有关任何学生的一般信息。student

向表中插入数据

使用 cqlsh 中的扩展命令,我们可以查看查询的详细信息。在没有参数的扩展中显示扩展设置的当前值。

- 注意如果扩展关闭(disable),要开启它(expand on),关闭为(expand off)
- 然后查看插入上述详细信息(研究将以 cqlsh 中的红色呈现,代表主键/行键)
- 从上述输出中,我们可以看到num已成为行键,并且它标识了单个行。

我们可以看到有三个tokens。
- 我们可以使用主键中的列来过滤

二、参考文章
https://dzone.com/articles/cassandra-data-modeling-primary-clustering-partiti
https://www.datastax.com/blog/2016/02/most-important-thing-know-cassandra-data-modeling-primary-key
cassandra表中主键的类型的更多相关文章
- mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法
[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...
- oracle查询A表中主键都被哪些表引用了?
select r.TABLE_NAME from USER_CONSTRAINTS p, USER_CONSTRAINTS r where p.TABLE_NAME = 'IAM_AUDIT_FIND ...
- 给表追加主键-----报错ORA-02437: 无法验证 (DENGCHAO.TEST) - 违反主键
由于 这次 项目 做了 数据库 迁移(从 mysql 转到oracle 用的是navicat) 的工具 所以导致很多主键都丢失了 导致数据库很多 数据的id重复 导致系统修改一条数据的时候 出现 ...
- Oracle表添加主键、外键
1.创建表的同时创建主键约束 (1)无命名 create table student ( studentid int primary key not null, studentname varchar ...
- 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类
http://www.cnblogs.com/lbangel/p/3487796.html 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的 ...
- 两种获取MySql数据库中所有表的主键和外键约束信息的Sql语句
最近在写Rafy底层的一些东西,在数据库方面把MySql数据库集成到里面去,里面有一个需求,需要获取非系统数据库,也就是我们自己建立的数据库中所有表的主键和外键元数据列表. 第一种方法:是网上的方法, ...
- 如何使用sqlalchemy获取表的主键、以及每一个字段名和对应类型
使用sqlalchemy获取到的结果只包含数据,不包含字段,那么我们如何获取到对应字段和其属性呢?以及如何获取某张表的主键呢? # -*- coding:utf-8 -*- # @Author: Wa ...
- sql查询如何将A表数据name字段对应B表name字段得到对应的B表id主键然后添加A到表usel_id中
1.写这个的原因 最近在写公司项目的时候一个功能很是让我头疼如标题看到的一样,平时我们一般都只负责数据表的查询或者连表查询某一个字段和A表字段一起显示出来. 但是添加到A表还是头一次,第一天想了很久都 ...
- 如何通过phoenix中查看表的主键信息
需求描述: 今天一个开发的同事让帮忙查看下表的主键列,在此记录下. 操作过程: 1.通过!primarykeys命令查看表的主键 !primarykeys SYNC_BUSINESS_INFO_BYD ...
随机推荐
- 20210819 Emotional Flutter,Medium Counting,Huge Counting,字符消除2
考场 T1 一下想到了这题,将白块缩短 \(s\) 后维护类似的区间即可. T2 T3 俩计数,直接跳了. T4 的可行 \(t\) 集合相同相当与从 \(n\) 往前跳 kmp 数组,途径点相同,从 ...
- 20210719 noip20
考场 后两题是原题,教练说不用写了(ycx 不讲武德) T1 先手模了 \(n\le5\) 的情况,尝试找规律失败.那就只能 DP 了,最终没搞出来. 记忆化搜索打了 \(n\le20\) 的表,交了 ...
- Python常见问题 - python3 使用requests发送HTTPS请求报certificate verify failed 错误
当你使用 requests 发送HTTPS请求时 requests.get(url, parmas=parmas, headers=header, cookies=cookie) 出现了以下错误 HT ...
- JDBC使用案例
一.结果集中获取数据并对实体set值,封装成对象返回: 2.封装JDBC工具类 只要执行一次的,如读取配置文件,则写静态代码块: 异常抛出要写明方法才可以throw,静态代码块异常只能捕捉try ca ...
- python模块--datetime
datatime.date类 构造器 返回值类型 说明 (year, month, day) date 类方法/属性 .max date datetime.date(9999, 12, 3 ...
- Emit优化反射(属性的设置与获取)
在频繁的通过反射来设置和获取属性的值时是比较耗时的,本章通过Emit技术优化反射来提高获取和设置属性值的效率 一.实现代码: /// <summary> /// 设置器委托 /// < ...
- jupyter notebook在代码块中多行注释方法
Ctrl+\是pycharm等IDE内的使用方法,而不是jupyter中的,正确的方法如下: 按住alt后光标变为十字形,沿着行标向下拖,光标变得很长,这时 shift+3 即可注释多行 想要取消注释 ...
- 记录centos下nl与cat -n的不同
nl命令列出文件行不包含空格,cat -n包含空格 [root@bogon ~]# cat -n test.txt 1 a 2 aa 3 aaa 4 aaaa 5 aaaaa 6 7 aaaaaa [ ...
- PHP的可变变量与可变函数
什么叫可变.在程序世界中,可变的当然是变量.常量在定义之后都是不可变的,在程序执行过程中,这个常量都是不能修改的.但是变量却不同,它们可以修改.那么可变变量和可变函数又是什么意思呢?很明显,就是用另一 ...
- dede后台栏目管理文章统计数量和实际文章数不一致解决办法
操作dede_arctiny表,将和栏目对应的typeid所有文章去掉即可.