相比之前的Thrift APICQL为新应用提供了更为简单的接口来访问Cassandra。Thrift API和传统版本的CQL面向的是Cassandra的内部存储结构。新的CQL增加了一个抽象层,隐藏了这种结构的实现细节,并且为集合和其他常见编码提供了本地化的语法,DataStax文档中推荐使用这种方式来访问Cassandra。这种语法跟SQL非常类似,感觉好像在操作关系数据库一样。

有许多方式可以使用CQL,比如之前用过的cqlsh、各种语言客户端驱动,或者DataStax DevCenter等,最简单的方式就是客户端cqlsh了。

一 cqlsh

其语法如下:

cqlsh [选项] [主机 [端口]]

常用选项如下:

--version 显示cqlsh的版本号并退出

--ssl 使用SSL

-u USERNAME, --username=USERNAME 用户名

-p PASSWORD, --password=PASSWORD 密码

-k KEYSPACE, --keyspace=KEYSPACE 指定keyspace

-f FILE, --file=FILE 从文件执行命令并退出

-e EXECUTE, --execute=EXECUTE 执行语句并退出

更多选项可以使用cqlsh –h 来查看。

Cassandra2.1默认监听localhost,端口9042;如果修改过集群默认配置,比如rpc_address

conf/cassandra.yaml)这个变量,那么在连接时就需要指定该IP了,如:
2019-03-16T15:29:26.png

登录之后可以尽情的使用Tab键来查看各种命令了,任意时刻都可以用Tab来查看一下当前可用的命令,或者我们可以输入help来查看所有的命令。

这里的命令主要分为两种:一种是shell式命令;另一种是CQL帮助主题,也即CQL相关的操作语句。每个命令都可以用help command 的形式查看详细语法,如:
2019-03-16T15:29:41.png
这无疑是一份很好的命令参考文档。

需要提醒的是,这些命令都不区分大小写,但是cqlsh默认显示为大写,这就要看个人习惯了。

二 创建和更新keyspace

CQL许多语法都可以类比到SQL,虽然它们并不一样,但这种类比未尝不是一种便于理解的方式,别认为这样会产生误导,因为CQL这个东西本身就在向SQL靠拢。

CQL创建keyspace就好像SQL创建database一样,但还是有些区别的。Cassandra中的keyspace定义数据在节点之间如何复制(分布)。典型地,一个集群中每个应用都有单独的一个keyspace。副本是在每个keyspace基础上来控制的,所以有不同副本需求的数据通常分布在不同的keyspace中。Keyspaces并不是设计用来作为数据模型的重要映射层。Keyspaces是设计用来控制一组列族(表)的数据副本的。

当创建一个keyspace时,需要指定一种复制策略类(strategy class)。SimpleStrategy(简单策略)这个类用来学习Cassandra还是不错的,生产环境或混合工作负载模式下应该使用NetworkTopologyStrategy(网络拓扑策略)类,能够感知数据中心和机架。

创建keyspace的语法如下:

create keyspace <ksname> with replication = {'class':'<strategy>' [,'<option>':<val>]};

ksname可以是任意字母数字下划线,有必要的话可以加双引号引起来作为字符串;

strategy等属性应该以键值对的形式出现在replication中,不同的策略语法会稍有不同。

注意,你应该记得随时使用help命令来了解一下详细语法。

如果使用SimpleStrategy策略类,并且指定副本因子为1,我们可以这样创建:

create keyspace <ksname> with replication = {'class':'SimpleStrategy', 'replication_factor':1};

如果使用NetworkTopologyStrategy网络拓扑策略,并且数据中心1指定副本因子为2,则可以这样创建:

create keyspace <ksname> with replication = {'class':'NetworkTopologyStrategy', ' datacenter1 ':2};

其中数据中心的名字可以使用nodetool来查询:

$ bin/nodetool status

2019-03-16T15:30:46.png

示例:

cqlsh> create keyspace mykeyspace with replication = {'class':'SimpleStrategy','replication_factor':1};

2019-03-16T15:30:58.png

此时我们可以使用desc keyspaces;来查看一下我们刚创建的keyspace:
2019-03-16T15:31:10.png

创建好后可以使用use命令切换到该keyspace下:

cqlsh> use mykeyspace;

三 更新keyspace:

更新跟创建差不多,就把create换成alter即可:

更新副本因子为2

alter keyspace mykeyspace with replication = {'class':'SimpleStrategy', 'replication_factor' : 2};

修改完后对于每个受影响的节点,需要挨个运行一下nodetool repair,并且需要等一个执行完再执行另一个。

注:副本因子决定一份数据在一个集群中有多少个副本,1代表只有一个节点保存数据,即只有一份数据,该参数是非常重要的,对于系统类的数据(如使用了认证的数据库用户信息)该值应该等于节点数,以确保不会因为单个节点down掉导致无法登录数据库;对于业务数据,应该根据集群的网络拓扑来权衡一个适当的值,以保证系统的高可用。

(待续..)

参考:http://docs.datastax.com/en/cql/3.1/cql/cql_using/about_cql_c.html


注: 本文原文最初发表在我的CSDN博客,现归档于此。
文章目录