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并不是一定 ...
随机推荐
- Elasticsearch节点下线(退役)and unassigned shards
一.节点退役当集群中个别节点出现故障预警等情况,需要进行退役工作,即让所有位于该退役节点上的分片的数据分配到其他节点上后,再将此节点关闭并从集群中移除. 1.ES提供了让某个节点上所有数据都移走的功能 ...
- CentOS 7 网卡注释
TYPE=Ethernet # 网络类型为:EthernetPROXY_METHOD=none # 代理方式:关闭状态BROWSER_ONLY=no # 只是浏览器:否BOOTPROTO=static ...
- 项目实战--@Transactional 的使用
@Transactional 介绍 Spring 事务管理分为编码式和声明式的两种方式,编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP,将具体业务逻辑与事务处理解耦.@Transacti ...
- PHP jquer网页打印插件 PrintArea
<!DOCTYPE html> <head> <meta charset="utf-8"> <meta http-equiv=" ...
- 【JDBC核心】实现 CRUD 操作
实现 CRUD 操作 操作和访问数据库 数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果.其实一个数据库连接就是一个 Socket 连接. java.sql 包中有 ...
- 【C++】《C++ Primer 》第十九章
第十九章 特殊工具与技术 一.控制内存分配 1. 重载new和delete new表达式的工作机理: string *sp = new string("a value"); //分 ...
- 【Flutter】可滚动组件之CustomScrollView
前言 CustomScrollView是可以使用Sliver来自定义滚动模型(效果)的组件.它可以包含多种滚动模型,举个例子,假设有一个页面,顶部需要一个GridView,底部需要一个ListView ...
- MongoDB的管理-深度长文
(1) 启动和停止MongoDB: Ubuntu18下启动关闭MongoDB 启动MongoDB: 方法一: systemctl start mongod.service 方法二: 在MongoDB的 ...
- kubernets之pod简介
一 k8s集群里面的最小单位是pod 1.1 一个较为简单的pod的配置文件 apiverson: api的版本号 kind: 资源的种类 metadata: pod的种类等相关信息 spec: p ...
- 敏捷史话(四):敏捷是人的天性 —— Arie van Bennekum
敏捷是人的天性,是你与生俱来的东西.面对敏捷,Arie van Bennekum 下了这样一个结论. 但这并不意味着人们只能通过天赋获得敏捷,对于想要学习敏捷的人来说,敏捷绝不是仅仅靠学习僵化的框架. ...