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 ...
随机推荐
- Mysql常用sql语句(4)- distinct 去重数据
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 我们使用select进行数据查询时是会返回所有匹 ...
- Java中short和int的转换
例子[1]: 第一种情况: short a = 1; a = a + 1; // 这一步会报错 System.out.print(a); 编译器会报错,原因如下: 第二种情况: short a = 1 ...
- 机器学习——最优化问题:拉格朗日乘子法、KKT条件以及对偶问题
1 前言 拉格朗日乘子法(Lagrange Multiplier) 和 KKT(Karush-Kuhn-Tucker) 条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等 ...
- CodeForce-813B The Golden Age(数学+枚举)
The Golden Age CodeForces - 813B 题目大意:如果一个数t=x^a+y^b(a,b都是大于等于0的整数)那就是一个unlucky数字.给你x,y,l,r(2 ≤ x, y ...
- Java面向对象系列(11)- instanceof和类型转换
instanceof 先看引用类型的类和instanceof比较的类有没有父子关系,有则可以编译,IDEA不报错 new一个对象,对象new所在的类和instanceof比较的类有没有父子关系,有则为 ...
- Xshell和Xftp - 下载安装
简介 Xshell 实际工作运用:连接Linux Xftp 实际工作运用:传输文件到Linux系统 下载安装 三连后评论区留言私发,此贴长期有效!!!
- 使用uView UI+UniApp开发微信小程序--微信授权绑定和一键登录系统
在前面随笔<使用uView UI+UniApp开发微信小程序>和<使用uView UI+UniApp开发微信小程序--判断用户是否登录并跳转>介绍了微信小程序的常规登录处理和验 ...
- openldap 双主模式部署
规划两台机器 系统版本centos7.5 master1上部署ldap: 一.安装启动openldap软件 yum -y install openldap compat-openldap openld ...
- django 自定义auth中user登陆认证以及自写认证
第一种: 重写自定义auth中user登陆认证模块, 引入MobelBackend from django.contrib.auth.backends import ModelBackend 重写验证 ...
- HTML 网页开发、CSS 基础语法——六. HTML基本结构
1.基本骨架 HTML文件最基本的四个标签,组成了网页的基本骨架,包括:<html>. <head>.<title>.<body>四组标签. ① < ...