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. umi3.2+ targets ie不生效的问题

    直接创建umi项目 config.ts对targets{ie:11}不生效 错误方法1: 在入口页app.tsx新增 import @babel/polyfill 错误方法2: 在入口页app.tsx ...

  2. [ABP教程]第六章 作者:领域层

    Web开发教程6 作者:领域层 关于此教程 在这个教程系列中,你将要构建一个基于ABP框架的应用程序 Acme.BookStore.这个应用程序被用于甘丽图书页面机器作者.它将用以下开发技术: Ent ...

  3. 一些php文件函数

    当读入一个巨大的字符串的时候不能使用file_get_contents('文件名') 应该 使用fopen('文件名','r') feof('文件名')  //判断是否读到了文件结尾 ******** ...

  4. Viser报错:dodge is not support linear attribute, please use category attribute!

    遇到这样的问题是因为x轴数据不能为为连续性的日期(日期格式为:YYYY-MM-DD),需要设置为分类属性(cat),有一些可能设置为timeCat,看具体情况 scale 参数支持以下类型 • ide ...

  5. Selenium WebDriver 8大定位方式

    Selenium WebDriver 8大定位方式: driver.find_element_by_id() driver.find_element_by_name() driver.find_ele ...

  6. yum -y install gnuplot

    [root@test~]# yum -y install gnuplotLoaded plugins: fastestmirrorLoading mirror speeds from cached h ...

  7. 【Oracle】如果有一个Oracle中的用户,想知道他有什么权限,怎么查看?

    假如那到了一个新用户,test,想查看这test的所有权限都有哪些,可以这么操作 登录到test用户上,执行下面的SQL 1.查看test用户被赋予了哪些角色. select * from user_ ...

  8. CTFHub - Web(二)

    目录遍历: 法一: 依次查看目录即可: 法二: 利用脚本:  #!/usr/bin/python3  # -*- coding: utf-8 -*-  # --author:valecalida-- ...

  9. iptables自动屏蔽访问网站最频繁的IP

    iptables自动屏蔽访问网站频繁的IP 屏蔽每分钟访问超过200的IP 方法1:根据访问日志(Nginx为例 #!/bin/bash DATE=$(date +%d/%b/%Y:%H:%M) AB ...

  10. java.net.NoRouteToHostException: 没有到主机的路由

    今天在配置Jenkins 的云服务器的时候提示:java.net.NoRouteToHostException: 没有到主机的路由,网上查到的没有主机路由问题提到的大多是防火墙问题. 查看防火墙状态: ...