cassandra权威指南读书笔记--cassandra查询语言
cassandra使用一个特殊主键(复合键)表示宽行,宽行也叫分区。复合键由一个分区键和一组可选的集群列组成。分区键用于确定存储行的节点,分区键也可以包含多个列。集群键用于控制数据如何排序以及在分区中如何存储。cassandra还支持静态列,这些列用于存储不属于主键但是由一个分区中的所有行共享的那些数据。
主键=分区键(用来确定分区)+集群键(确定一条记录在分区的位置)
集群-->keyspace-->表-->列
可以只查询,更新部分列。不像关系型,不是定义的所有列都会占空间,如果这一列没有值,存储的时候不占空间。CQL中的select,insert,update,delete都是按行操作。
时间戳
向cassandra写入数据,会为更新的各个列值生成一个时间戳。多次写入同一个值,cassandra内部用这个时间戳来解决冲突,一般会以最后的时间戳为准。用writetime()来查询。主键无法用这个函数。writetime也可以被更新,被指定,使用不当会导致新数据被老数据覆盖。
TTL(time to live)
cassandra使用TTL让不在需要的数据过期,用于列,默认为null,表示不会过期。只有可以取到writetime才可以设置ttl,所以主键没有ttl。
除了列级TTL,也有表级TTL。优先以列级为准,然后才是表级。
CQL
int(32),bigint(long),smallint(short),tinyint(byte),varint
float,double,decimal
没有枚举,只能用text代替。
text,varchar:UTF-8字符的同义词。
ascii:ascii字符串
ps:默认地,cqlsh使用反斜线转义显示控制字符和不可打印字符。
timstamp
date,time(2.2才开始支持)
uuid,uuid长度有限,所以没法保证绝对唯一。uuid(): TYPE4 UUID.
timeuuid: TYPE 1 UUID,基于计算机地MAC,系统时间和用来防止复制地一个序列号生成地。常用于无冲突时间戳。
ps:创建一个表,主键是无法修改的,因为决定数据的分布。
boolean
blob:二进制大对象。cassandra不会校验blob的字节。
inet:IPv4,ipv6
counter:提供64位有符号整数,值不能直接设置,只能自增或者自减。不能作为主键。如果使用了计数器,除了主键列,所有其他列都必须是counter。
自增和自减操作不是幂等的。没有直接重置一个counter的方法。可以通过读取counter再让这个值自增或者自减。但还是不可靠。
set:集合类型。无序,但是返回结果一般是字母排序。可以包含用户自定义类型。优点是能够插入额外的元素而无需先读取内容。或者删除,或者清空。 set 集合 + {}; set 集合-{}; set集合={};
list:按照插入顺序排序。[] + xxx ; xxx + []; list[n] = xxx; [] - xxx;
map:键值对。key和value不允许为null(驱动),不允许为counter。
用户自定义类型(UDT):限制在keyspace下面。用户自定义类型会被认为是一种集合类型。cassandra2.2之前不能充分支持。所以有个frozen关键字去修饰,这样可以支持嵌套,前向兼容。未来可能会有unfrozen之类的关键字去解冻。被frozen修饰的集合类型,可以作为主键。
二级索引
对非主键创建索引,可以对集合的值创建索引,删除索引。可以对map的键和值(默认是对值创建索引)单独创建索引,但不能同时创建,2选1。
cassandra数据分布多节点,每个节点得单独维护二级索引,以下场景不适合使用二级索引。
1、有很大基数的列,列的值太多。
2、数据基数非常低,就是这一列的值重复太多,不够离散。导致建索引没什么用,索引包含大量重复行。
3、频繁更新或者删除,墓碑多,compact慢的时候。
最好是另外设计表,或者使用物化视图。
SASI:cassandra 3.4支持。为SSTable添加二级索引。苹果公司开发。为每个SSTable计算SASI,并为每个SSTable文件计算SASI索引,作为SSTable文件存储一部分。原来的二级索引是把索引存储在单独的“隐藏”表中。SASI还是要读取多个节点。支持>,<,like.
cassandra权威指南读书笔记--cassandra查询语言的更多相关文章
- cassandra权威指南读书笔记--Cassandra架构(3)
分阶段事件驱动架构 SEDASEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stage,不同资源消耗的Stage使用不同数量的线程来处 ...
- cassandra权威指南读书笔记--Cassandra架构(2)
环和令牌cassandra的数据管理是用一个环来表示.为环中的每个节点分配一or多个数据范围,用token描述.token由64位整数ID表示,范围-2^(63)~2^(63)-1.使用对分区键进行一 ...
- cassandra权威指南读书笔记--Cassandra架构(1)
结构 集群-->数据中心-->机架-->节点. cassandra尽可能将数据副本存在多个数据中心,然后读取(查询路由到)尽可能在本地数据中心. 为了去中心化和分区容错性,使用gos ...
- cassandra权威指南读书笔记--cassandra概述
cassandra是一个开源的.分布式.去中心化.弹性可扩展.高可用.容错.可调一致性.面向行数据库,分布式设计基于Amazon Dynamo,数据模型基于Google BigTable.cassan ...
- cassandra权威指南读书笔记--安全
认证和授权driver,JMX和cassandra服务器支持SSL/TLS,cassandra节点间也支持SSL/TLS.密码认证器cassandra还支持自定义,可插拔的认证机制.默认的认证器:or ...
- cassandra权威指南读书笔记--客户端
DataStax驱动最成熟.默认,驱动程序会使用第一个连接的节点作为支持的版本协议.如果集群存在高低版本的节点(比如升级场景),如果驱动先连接不同不同版本的节点,可能会出现不兼容.驱动支持压缩客户端和 ...
- cassandra权威指南读书笔记--性能调优
cassandra自带测试工具cassandra-stress.nodetool proxyhistograms可以在多个节点运行,发现最慢的协调节点.nodetool tablehistograms ...
- cassandra权威指南读书笔记--监控&维护
cassandra SLF4J API记录日志,具体采用Logback实现.在终端启动cassandra时,可以向程序输入-f,就能在终端看到这个输出.Java Mangement Extension ...
- cassandra权威指南读书笔记--读写数据
写cassandra除了轻量级事务,不支持别的事务.cassandra是追加写,写的速度非常快.cassandra还有hint日志,这个数据库总是可写的,而且单个列的写操作是原子的.hint并不是一定 ...
随机推荐
- CSS卡片旋转
html{ perspective: 800px; } body{ display:flex; flex-wrap: wrap; } .card{ transform-style: preserve- ...
- 【Maven】Maven 高级应用
Maven 高级应用 Maven 基础 Maven 是一个项目管理工具,它有如下好处: 节省磁盘空间 可以一键构建 可以跨平台使用 依赖传递和管理,提高开发效率 一键构建:Maven 自身集成了 To ...
- TCP/IP五层模型-传输层-UDP协议
1.定义:UDP:是非面向连接.不可靠的用户数据包协议. 2.应用场景:适合对数据完整性要求不高,但对延迟很敏感,比如即时通信(语音视频聊天等). 3.UDP报文格式: 4.用UDP传输数据的应用层 ...
- 2021升级版微服务教程7-OpenFeign实战开发和参数调优
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...
- 【ORA】Specified value of MEMORY_TARGET is too small, needs to be at least 3072M解决办法
今天安装EM12C的时候遇到了一个报错: 修改好数据库中的参数大小后,重新启动报错 Specified value of MEMORY_TARGET is too small, needs to be ...
- service自动发现,yaml文件管理内外部端口访问
service服务发现 [root@k8s-master ~]# vim busybox-5d4f595646-dzjv4.yaml apiVersion: v1 kind: Pod metadata ...
- 记一次使用logmnr查找操作人流程
经常遇到开发的需求,帮我查一下是谁修改了表里面的记录,是谁对表进行了DDL操作,此类问题可以使用logmnr解决 1.根据操作时间定位归档日志 SELECT name FROM V$ARCHIVED_ ...
- ORA-00054: 資源正被使用中, 請設定 NOWAIT 來取得它, 否則逾時到期
1.查看被使用资源的OBJECT_ID SELECT *FROM DBA_OBJECTS WHERE OBJECT_NAME='OBJECT_NAME' 2.查看资源被谁占用SELECT * FROM ...
- 入门OJ:售货员的难题
题目描述 某乡有n个村庄(1<n<15),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村到B村与B村到A村的路大多不同.为了提高效率 ...
- JS编写的科学计算器
最近半个月编写了一个JS+CSS+HTML的网页计算器,从最初的具有简陋界面的简单计算器改版到最终具有科学/标准计算器转换功能并且界面非常友好的计算器,收获良多!总的来说,代码简单,通俗易读,下面贴上 ...