cassandra表中主键的类型及区分?

一、类型及区分

Cassandra的4种Key

  1. Primary Key 主键
  2. Composite Key,Compound Key 复合键
  3. Partition Key 分区键
  4. 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:

  1. 创建键空间

  2. 切换到students_details键空间:

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

  4. 向表中插入数据

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

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

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

二、参考文章

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表中主键的类型的更多相关文章

  1. mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

    [CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...

  2. oracle查询A表中主键都被哪些表引用了?

    select r.TABLE_NAME from USER_CONSTRAINTS p, USER_CONSTRAINTS r where p.TABLE_NAME = 'IAM_AUDIT_FIND ...

  3. 给表追加主键-----报错ORA-02437: 无法验证 (DENGCHAO.TEST) - 违反主键

    由于 这次 项目 做了 数据库 迁移(从 mysql 转到oracle  用的是navicat) 的工具  所以导致很多主键都丢失了 导致数据库很多 数据的id重复  导致系统修改一条数据的时候 出现 ...

  4. Oracle表添加主键、外键

    1.创建表的同时创建主键约束 (1)无命名 create table student ( studentid int primary key not null, studentname varchar ...

  5. 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类

    http://www.cnblogs.com/lbangel/p/3487796.html 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的 ...

  6. 两种获取MySql数据库中所有表的主键和外键约束信息的Sql语句

    最近在写Rafy底层的一些东西,在数据库方面把MySql数据库集成到里面去,里面有一个需求,需要获取非系统数据库,也就是我们自己建立的数据库中所有表的主键和外键元数据列表. 第一种方法:是网上的方法, ...

  7. 如何使用sqlalchemy获取表的主键、以及每一个字段名和对应类型

    使用sqlalchemy获取到的结果只包含数据,不包含字段,那么我们如何获取到对应字段和其属性呢?以及如何获取某张表的主键呢? # -*- coding:utf-8 -*- # @Author: Wa ...

  8. sql查询如何将A表数据name字段对应B表name字段得到对应的B表id主键然后添加A到表usel_id中

    1.写这个的原因 最近在写公司项目的时候一个功能很是让我头疼如标题看到的一样,平时我们一般都只负责数据表的查询或者连表查询某一个字段和A表字段一起显示出来. 但是添加到A表还是头一次,第一天想了很久都 ...

  9. 如何通过phoenix中查看表的主键信息

    需求描述: 今天一个开发的同事让帮忙查看下表的主键列,在此记录下. 操作过程: 1.通过!primarykeys命令查看表的主键 !primarykeys SYNC_BUSINESS_INFO_BYD ...

随机推荐

  1. (三)羽夏看C语言——进制

    写在前面   由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...

  2. 五分钟搞懂MySQL索引下推

    大家好,我是老三,今天分享一个小知识点--索引下推. 如果你在面试中,听到MySQL5.6"."索引优化" 之类的词语,你就要立马get到,这个问的是"索引下推 ...

  3. JS_DOM操作之绑定事件

    1 - 静态绑定:直接把事件写在标签元素中 <div id="div" onclick="foo(this)">click</div> ...

  4. 尚硅谷Java基础学习笔记

    综述: Java学习图谱: 常见dos命令: 操作案例: Java语言的特点: 面向对象 两个基本概念:类.对象 三个基本特性:封装.继承.多态 健壮性.可继承性 write once,run any ...

  5. 在开发中使用GMap.Net 控件的心得一

    首先必须先加载GMap.Net这个控件,先通过"添加引用"来加载相应的.dll文件,如果在工具箱中找不到GMapControl这个控件,也别心急. 点击"工具" ...

  6. 利用GetInvalidFileNameChars()得到有效的文件名

    public static string GetValidName(string fileName) {     foreach (char c in System.IO.Path.GetInvali ...

  7. Python脚本运行出现语法错误:IndentationError:unexpected indent

    对于py来说典型错误就是缩进,,烦不胜烦,整理一下解决方法:一个python脚本,本来都运行好好的,然后写了几行代码,而且也都确保每行都对齐了,但是运行的时候,却出现语法错误: Indentation ...

  8. 跨域分布式系统单点登录的实现(CAS单点登录)

    1. 概述 上一次我们聊了一下<使用Redis实现分布式会话>,原理就是使用 客户端Cookie + Redis 的方式来验证用户是否登录. 如果分布式系统中,只是对Tomcat做了负载均 ...

  9. Java环境搭建与HelloWprld—改变世界的第一步

    1. JDK下载 访问oracle官网:http://www.oracle.com 在首页点击Downloads,进入oracle软件下载页. 在下载页面,点击Java. 选择Java (JDK) f ...

  10. 38KHz,NEC红外模拟发送和接收程序

    /*************************************************************************************************/ ...