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 ...
随机推荐
- (三)羽夏看C语言——进制
写在前面 由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...
- 五分钟搞懂MySQL索引下推
大家好,我是老三,今天分享一个小知识点--索引下推. 如果你在面试中,听到MySQL5.6"."索引优化" 之类的词语,你就要立马get到,这个问的是"索引下推 ...
- JS_DOM操作之绑定事件
1 - 静态绑定:直接把事件写在标签元素中 <div id="div" onclick="foo(this)">click</div> ...
- 尚硅谷Java基础学习笔记
综述: Java学习图谱: 常见dos命令: 操作案例: Java语言的特点: 面向对象 两个基本概念:类.对象 三个基本特性:封装.继承.多态 健壮性.可继承性 write once,run any ...
- 在开发中使用GMap.Net 控件的心得一
首先必须先加载GMap.Net这个控件,先通过"添加引用"来加载相应的.dll文件,如果在工具箱中找不到GMapControl这个控件,也别心急. 点击"工具" ...
- 利用GetInvalidFileNameChars()得到有效的文件名
public static string GetValidName(string fileName) { foreach (char c in System.IO.Path.GetInvali ...
- Python脚本运行出现语法错误:IndentationError:unexpected indent
对于py来说典型错误就是缩进,,烦不胜烦,整理一下解决方法:一个python脚本,本来都运行好好的,然后写了几行代码,而且也都确保每行都对齐了,但是运行的时候,却出现语法错误: Indentation ...
- 跨域分布式系统单点登录的实现(CAS单点登录)
1. 概述 上一次我们聊了一下<使用Redis实现分布式会话>,原理就是使用 客户端Cookie + Redis 的方式来验证用户是否登录. 如果分布式系统中,只是对Tomcat做了负载均 ...
- Java环境搭建与HelloWprld—改变世界的第一步
1. JDK下载 访问oracle官网:http://www.oracle.com 在首页点击Downloads,进入oracle软件下载页. 在下载页面,点击Java. 选择Java (JDK) f ...
- 38KHz,NEC红外模拟发送和接收程序
/*************************************************************************************************/ ...