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查询语言的更多相关文章

  1. cassandra权威指南读书笔记--Cassandra架构(3)

    分阶段事件驱动架构 SEDASEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stage,不同资源消耗的Stage使用不同数量的线程来处 ...

  2. cassandra权威指南读书笔记--Cassandra架构(2)

    环和令牌cassandra的数据管理是用一个环来表示.为环中的每个节点分配一or多个数据范围,用token描述.token由64位整数ID表示,范围-2^(63)~2^(63)-1.使用对分区键进行一 ...

  3. cassandra权威指南读书笔记--Cassandra架构(1)

    结构 集群-->数据中心-->机架-->节点. cassandra尽可能将数据副本存在多个数据中心,然后读取(查询路由到)尽可能在本地数据中心. 为了去中心化和分区容错性,使用gos ...

  4. cassandra权威指南读书笔记--cassandra概述

    cassandra是一个开源的.分布式.去中心化.弹性可扩展.高可用.容错.可调一致性.面向行数据库,分布式设计基于Amazon Dynamo,数据模型基于Google BigTable.cassan ...

  5. cassandra权威指南读书笔记--安全

    认证和授权driver,JMX和cassandra服务器支持SSL/TLS,cassandra节点间也支持SSL/TLS.密码认证器cassandra还支持自定义,可插拔的认证机制.默认的认证器:or ...

  6. cassandra权威指南读书笔记--客户端

    DataStax驱动最成熟.默认,驱动程序会使用第一个连接的节点作为支持的版本协议.如果集群存在高低版本的节点(比如升级场景),如果驱动先连接不同不同版本的节点,可能会出现不兼容.驱动支持压缩客户端和 ...

  7. cassandra权威指南读书笔记--性能调优

    cassandra自带测试工具cassandra-stress.nodetool proxyhistograms可以在多个节点运行,发现最慢的协调节点.nodetool tablehistograms ...

  8. cassandra权威指南读书笔记--监控&维护

    cassandra SLF4J API记录日志,具体采用Logback实现.在终端启动cassandra时,可以向程序输入-f,就能在终端看到这个输出.Java Mangement Extension ...

  9. cassandra权威指南读书笔记--读写数据

    写cassandra除了轻量级事务,不支持别的事务.cassandra是追加写,写的速度非常快.cassandra还有hint日志,这个数据库总是可写的,而且单个列的写操作是原子的.hint并不是一定 ...

随机推荐

  1. Codeforces Round #695 (Div. 2)

    比赛地址 A (水题) 题目链接 题目: 给出\(n\)个面板,每个面板初始时间相同,每过1s面板上数字会加1(数字在\(0\sim9\)循环播放),任意时刻选择一个面板\(x\)使他的时间停止,其他 ...

  2. C++语言基础——02数据的存取

    常量 常量是指在程序中使用的一些具体的数.字符.在程序运行过程中,其值不能更改.如123.1.23.'a'."abc".True等. 常量的定义 const 类型 常量名 = 常量 ...

  3. 获取微信Token值

    /** * 获取Token值 * @param $corpid * @param $corpsecret * @return mixed * @author 宁佳兵 <meilijing.nin ...

  4. 敏捷史话(三):笃定前行的勇者——Ken Schwaber

    很多人之所以平凡,并不在于能力的缺失,而是因为缺乏迈出一步的勇气.只有少部分的人可以带着勇气和坚持,走向不凡.Ken Schwaber 就是这样的人,他带着他的勇气和坚持在敏捷的道路上不断前行,以实现 ...

  5. 机器学习笔记·adaboost

    一.算法简介 Adaboost算法是一种集成算法,所谓集成算法就是将多个弱的分类器组合在一起变成一个强的分类器.弱分类器通常是指分类效果比随机分类稍微好一点的分类器.就像我们在做一个重要决定的时候,通 ...

  6. 深入理解MySQL索引(上)

    简单来说,索引的出现就是为了提高数据查询的效率,就像字典的目录一样.如果你想快速找一个不认识的字,在不借助目录的情况下,那我估计你的找好长时间.索引其实就相当于目录. 几种常见的索引模型 索引的出现是 ...

  7. 【Oracle】translate函数用法解析

    转自:https://blog.csdn.net/shwanglp/article/details/52814173 基本语法: translate(string,from_str,to_str); ...

  8. 干电池升压5V,功耗10uA

    PW5100干电池升压5V芯片 输出电容: 所以为了减小输出的纹波,需要比较大的输出电容值.但是输出电容过大,就会使得系统的 反应时间过慢,成本也会增加.所以建议使用一个 22uF 的电容,或者两个 ...

  9. uni-app 获取地址位置

    uni.getLocation 获取当前的地理位置.速度. 在微信小程序中,当用户离开应用后,此接口无法调用:当用户点击"显示在聊天顶部"时,此接口可继续调用 uni.getLoc ...

  10. 彻底解决小程序无法触发SESSION问题

    一.首先找到第一次发起网络请求的地址,将服务器返回set-cookie当全局变量存储起来 wx.request({ ...... success: function(res) { console.lo ...