CQL3语法简介

本文已迁移到我的新博客地址:blog.favorstack.io 欢迎访问~

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

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

1.   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了,如:

 

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

这里的命令主要分为两种:一种是shell式命令;另一种是CQL帮助主题,也即CQL相关的操作语句。每个命令都可以用help command 的形式查看详细语法,如:

CQL3语法简介_第1张图片

 

这无疑是一份很好的命令参考文档。

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

2.创建和更新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  with replication = {'class':'' [,'

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

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

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

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

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

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

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

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

$ bin/nodetool status

CQL3语法简介_第2张图片

 

 

 

示例:

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

 

 

 

此时我们可以使用desc keyspaces;来查看一下我们刚创建的keyspace:

 

 

 

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

cqlsh> use mykeyspace;

 

3.更新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

本文已迁移到我的新博客地址:blog.favorstack.io 欢迎访问~

 

 

 

 

你可能感兴趣的:(NoSQL,Cassandra)