环境介绍:

docker 安装 cassandra 3.11.1 , 然后进入docker 的终端,输入 > cqlsh , 即可使用Cassandra了,详细介绍如下:

查看表空间describe keyspaces;

查看已有表:describe tables;

查看表结构:describe table table_name;

key spaces

describe keyspaces; 

describe keyspace {keyspace}; 

use {keyspace}; 

select * from system.schema_keyspaces;

Column Families

describe tables; 

describe columnfamily {table}; 

select * from system.schema_columnfamilies;
describe tables table;

参考:datastax documention : CQL for cassandra 2.x

Cassandra 提供collection 用于处理某些特殊类型的需求,如单用户记录的多个邮件地址,此处翻译为 集合类型。

Cassandra 提供了三种集合类型,分别是Set,List,Map。

基本概念与操作

一、Set

Set存储了一组类型相同的不重复元素,当被查询时会返回排好序的结果,但是内部构成是无序的值,应该是在查询时对结果进行了排序。
使用示例:

1.创建带有Set类型列的表

CREATE TABLE users (
user_id text PRIMARY KEY,
first_name text,
last_name text,
emails set<text>
);

2.插入数据

INSERT INTO users (user_id, first_name, last_name, emails) VALUES('frodo', 'Frodo', 'Baggins', {'f@baggins.com', 'baggins@gmail.com'});

3.使用UPDATE命令和‘+’操作符向set列添加一个元素。

UPDATE users SET emails = emails + {'fb@friendsofmordor.org'} WHERE user_id = 'frodo';

4.查询

SELECT user_id, emails FROM users WHERE user_id = 'frodo';
结果如下
 user_id | emails
---------+-------------------------------------------------------------------
frodo | {"baggins@caramail.com","f@baggins.com","fb@friendsofmordor.org"}
注: Cassandra   会按照set内数据类型进行排序返回 查询结果,如果希望按照插入序返回结果,请使用list.

5.删除一个元素

UPDATE users SET emails = emails - {'fb@friendsofmordor.org'} WHERE user_id = 'frodo';

6.删除所有元素

可以使用UPDATA或DELETE命令
UPDATE users SET emails = {} WHERE user_id = 'frodo'; DELETE emails FROM users WHERE user_id = 'frodo';
一般来说,Set,list和Map要求最少有一个元素,否则Cassandra无法把其同一个空值区分。

二、List

list查询时会按照元素在list中的index顺序来返回结果,可以存储多个重复的值。
操作示例:

1.向users表添加一个list列

ALTER TABLE users ADD top_places list<text>;

2.使用UPDATA命令向list插入值。

UPDATE users SET top_places = [ 'rivendell', 'rohan' ] WHERE user_id = 'frodo';

3.在list前面插入值

UPDATE users SET top_places = [ 'the shire' ] + top_places WHERE user_id = 'frodo';

4.在list后面插入值

UPDATE users SET top_places = top_places + [ 'mordor' ] WHERE user_id = 'frodo';

5.使用列表索引设置特定位置的值

UPDATE users SET top_places[2] = 'riddermark' WHERE user_id = 'frodo';
原先的值会被覆盖,这种操作会读入整个list,效率比3,4低

6.使用DELETE命令和索引删除某个特定位置的值。

DELETE top_places[3] FROM users WHERE user_id = 'frodo';

7.使用UPDATE命令和‘-’移除list中所有的特定值。

UPDATE users SET top_places = top_places - ['riddermark'] WHERE user_id = 'frodo';
6和7相比,推荐使用7,因为6操作是非线程安全的,如果在操作时其它线程在前面添加了一个元素,会导致移除错误的元素。使用7不会有此问题。

三、Map

Map提供了名字到值的映射,Map可以存储时间戳相关的信息,每一个元素在内部作为一列存储,可以修改,替换,删除和查询,拥有一个单独的TTL值。
操作示例:

1.添加Map列

ALTER TABLE users ADD todo map<timestamp, text>;

2.使用Insert或Update命令,设置或更新数据。

UPDATE users SET todo =
{ '2012-9-24' : 'enter mordor', '2014-10-2 12:00' : 'throw ring into mount doom' } WHERE user_id = 'frodo';

3.使用UPDATE命令设置指定元素的value

UPDATE users SET todo['2014-10-2 12:00'] = 'throw my precious into mount doom' WHERE user_id = 'frodo';

4.使用INSERT命令设置指定行的map数据。

INSERT INTO users (user_id, todo) VALUES ('frodo', { '2013-9-22 12:01' : 'birthday wishes to Bilbo', '2013-10-1 18:00': 'Check into Inn of Pracing Pony'}) ;
旧的MAP数据会被覆盖。
    在 Cassandra  2.1.1后,可以使用如下语法增加map元素。如果key已存在,value会被覆盖,不存在则插入。
UPDATE users SET todo = todo + { '2013-9-22 12:01' : 'birthday wishes to Bilbo', '2013-10-1 18:00': 'Check into Inn of Pracing Pony'} WHERE user_id='frodo';

5.删除元素。

DELETE todo['2013-9-22 12:01'] FROM users WHERE user_id = 'frodo';

UPDATE users SET todo=todo - {'2013-9-22 12:01','2013-10-01 18:00:00-0700'} WHERE user_id='frodo';

6.查询元素。

SELECT user_id, todo FROM users WHERE user_id = 'frodo';
map输出顺序取决于map类型。

7.使用TTL

UPDATE users USING TTL <computed_ttl> SET todo['2012-10-1'] = 'find water' WHERE user_id = 'frodo';
INSERT INTO users (user_name, password) VALUES ('cbrown', 'ch@ngem4a') USING TTL 86400;
在设定的computed_ttl数值秒后,数据会自动删除。
 
使用集合类型要注意:
1.集合的每一项最大是64K。
2.保持集合内的数据不要太大,免得Cassandra 查询延时过长,只因Cassandra 查询时会读出整个集合内的数据,集合在内部不会进行分页,集合的目的是存储小量数据。
3.不要向集合插入大于64K的数据,否则只有查询到前64K数据,其它部分会丢失。
 

高级应用

一、给集合添加索引

从 Cassandra  2.1起,可以给集合添加索引。
示例:
CREATE INDEX ON users(emails); CREATE INDEX mymapvalues ON users(todo);
索引名字可以不指定。
上面第二个语句使用Map列的列名在其values上创建了索引,也可以在其keys上创建索引,如下:
DROP INDEX mymapvalues; CREATE INDEX mymapkeys ON playlists (KEYS(todo));
 

二、过滤集合中的数据

假设已经给集合添加了索引,就可以使用where子句的CONTAINS条件按照给定的值进行过滤。
SELECT user_id FROM users WHERE emails CONTAINS 'baggins@gmail.com';
注意给定的值是集合项的一项,短于集合某项不会进行模糊匹配。
对于MAP,可以使用key或value进行过滤。
SELECT user_id FROM users WHERE todo CONTAINS 'birthday wishes to Bilbo';
SELECT user_id FROM users WHERE todo CONTAINS KEY '2013-09-23 12:01:00-0700';

Cassandra docker 使用记录的更多相关文章

  1. Docker 操作记录

    Docker docker info 查看信息 docker 更改镜像目录 方式:1.配置文件修改 # cat /etc/sysconfig/docker |grep -v ^# |grep -v ^ ...

  2. 一、docker临时记录

    docker 临时记录(阿里云centos7.2.1511 ) 查看系统版本号 适用于Redhat/CentOS: [root@iz2zecm4ndtkaue32tynx5z ~]# cat /etc ...

  3. Docker入门 .Net Core 使用Docker全程记录

    https://www.cnblogs.com/flame7/p/9210986.html Docker入门 第一课 --.Net Core 使用Docker全程记录   微服务架构无疑是当前最火热的 ...

  4. docker学习记录1

    起因 现在自己学习微服务,服务器越来越多,虽然自己写了一些shell脚本来安装需要的软件,比如mysql,redis,jdk等等,但是还是好麻烦.希望学习docker能够快速安装部署这些东西. 记录一 ...

  5. [原创]Docker学习记录: Shipyard+Swarm+Consul+Service Discover 搭建教程

    网上乱七八糟的资料实在是太多了, 乱, 特别乱, 而看书呢, 我读了2本书, 一本叫做<>, 另一本叫做<< Docker进阶与实战>> 在 服务发现这块讲的又不清 ...

  6. 如何在mac上安装docker[记录自己在mac上安装docker的经历]

    0.引子 最近入手了一台mac笔记本,想在本地安装docker. 1.找安装文档. 文档地址:http://www.widuu.com/chinese_docker/installation/mac. ...

  7. docker入门记录1

    一. 什么是Docker 1.英文意思是集装箱,很形象.直白点就是将程序运行环境打包在一个箱子里,然后箱子扔到哪里,里边的程序都可以运行.这样以来一个显而易见的好处是:和以前的开发环境等相比,你不用每 ...

  8. The Docker学习记录[Doing]

    微服务 & Docker 译文:使用Java构建微服务 原文:Building Microservices With Java [编者的话]本文翻译自Dzone Guide to the Ja ...

  9. [原]docker 操作记录

    开启新容器 docker run --name 容器名字 -ti[d] 镜像 初始化命令(需要是阻塞的) 额外参数 -v 本地目录:容器目录[:ro] 映射本地路径和容器路径(时区同步.数据库dock ...

随机推荐

  1. Golang入门教程(十二)安装注意事项

    1.$GOPATH (1)go 命令依赖一个重要的环境变量:$GOPATH .注:这个不是Go安装目录 (2) (3) (4)git 安装 (5)包管理对应关系 (6)安装完之后bee 工具后,bee ...

  2. webService的介绍与简单使用

    webService开发项目介绍: 1 Webservice:跨语言跨平台的远程调用技术.Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术. ...

  3. Spring Boot中使用使用Spring Security和JWT

     目标 1.Token鉴权 2.Restful API 3.Spring Security+JWT 开始 自行新建Spring Boot工程 引入相关依赖 <dependency> < ...

  4. html 表格边线设置

    <table rules="all" style="margin-left: auto; margin-right: auto; margin-top: 50px; ...

  5. Map接口、HashMap类、LinkedHashSet类

    java.util.Map<K, V>接口 双列集合,key不可以重复 Map方法: 1.public V put(K key, V value):键值对添加到map,如果key不重复返回 ...

  6. 验证调用HttpServletResponse.getWriter().close()方法是否真的会关闭http连接

    起因 线上项目突然遭到大量的非法参数攻击,由于历史问题,之前的代码从未对请求参数进行校验. 导致大量请求落到了数据访问层,给应用服务器和数据库都带来了很大压力. 针对这个问题,只能对请求真正到Cont ...

  7. faster rcnn相关内容

    转自: https://zhuanlan.zhihu.com/p/31426458 faster rcnn的基本结构 Faster RCNN其实可以分为4个主要内容: Conv layers.作为一种 ...

  8. Canvas画圆形

    转载:https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#圆弧 function d ...

  9. 第21月第9日 windows下使用vim+ctags+taglist

    1. windows下使用vim+ctags+taglist 最近在公司的同事指导下,学会使用这个东西编写代码,效率提高了不少.所以记录下来,方便大家使用. 1. 下载gvim74.exe文件,并安装 ...

  10. flask的基础认识

    刚开始学习flask基础知识,有了一点点的认识,所以在此大概写一下自己的理解,详细步骤和功能在代码段介绍: from flask import Flask,render_template,reques ...