现在的位置: 首页 > 综合 > 正文

Cassandra 常用命令

2012年08月26日 ⁄ 综合 ⁄ 共 4752字 ⁄ 字号 评论关闭

1,启动客户端工具并连接到某一个具体的Cassandra实例,连接时需要提供实例的–host 和-port参数,如果提供的参数正确那么客户端工具将会帮你连接到在cassandra.yaml定义的群集服务器实例上,比如,你在localhost运行着单节点的群集,那么客户端采用如下命令连接到localhost:

[default@unknown] connect localhost/9160;

或是通过节点的ip地址和端口连接到一个多节点群集中的一个节点:

[default@unknown] connect -host 110.123.4.5 -port 9160;

查看各个指令的帮助和说明可以在命令行打入

[default@unknown] help;

如果想查看具体某个指令的帮助信息可以在命令行打入 help <命令的名称>,例如:

[default@unknown] help set;

这样既可以查看SET指令的help信息了。

备注

每一个指令的结尾都必须带上一个“;”才会被发送到服务器上执行,如果没有输入“;”直接回车,那么命令行界面会出现“……”提示,意思客户端等待更多的输入内容。

创建一个 Keyspace对象

你可以使用客户端工具创建Keydspace对象,在本例子中,我们将创建一个命名为demo的keyspace。 它带有一个复制因子1和使用simplestrategy副本放置策略。

注意单引号内placement_strategy的字符串值:

[default@unknown] create keyspace demo with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy' and strategy_options = [{replication_factor:1}];

这时候你可以看到在命令行创建之后的现实情况。

 

查看keyspace的信息,和列族的定义

[default@unknown] descibe demo;

创建一个列族

首先你要使用use指令连接到你要创建列族的keyspace。

[default@unknown] USE demo;

在本例子中我们在名为demo的keyspace创建一个名为users的列族,而且在这个列族里面我们定义了几个列:full_name, email,state, gender, 和 birth_year。这被认为是一个静态的列族-一种预先定义列的列族,注意key_validation_class和validation_class的设置,这些设置是让这些列和key以及列值默认使用的编码。在这个案例中我们也定义了排序的方法。

[default@demo] create column  family users with comparator = UTF8Type and key_validation_class=UTF8Type and column_metadata = [

{column_name: full_name, validation_class:UTF8Type}

{column_name: email, validation_class:UTF8Type}

{column_name: state, validation_class:UTF8Type}

{column_name: gender, validation_class:UTF8Type}

{column_name: birth_year, validation_class:LongType}

];

接下来我们创建一个名为blog_entry的动态列族,注意到这里我们并没有预先定义列名和其他参数,而在后面的客户端操作中提供这些参数。

[default@demo] create  column  family blog_entry with comparator = TimeUUIDType and key_validation_class=UTF8Type and default_validation_class = UTF8Type;

创建一个计算器的列族

计数器列族主要包含计数器列,这个列是一个64位的有符号数的值,可供客户端使用,采用递增或是递减的方式提供给客户端使用。计数器列跟踪最近的值或是计算使用它的值,并不断更新自己,你必须创建一个列族专门给客户端做计数用。

我们同时创建一个使用该计数器的列族,并使这个列族的CounterColumnType的default_validation_class默认指向该计数器。比如:

[default@demo] create  column  family Ypage_view_counts  with  default_validation_class=CounterColumnType and key_validation_class=UTF8Type and comparator=UTF8Type;

插入一行数据时和计数器列同时更新(与计数器的初始值设置为0)

[default@demo] INCR page_view_counts['www.datastax.com'][home]BY 0;

计算器增量:

[default@demo] INCR page_view_counts['www.datastax.com'][home]BY 1;

译文

插入一行数据或是一列数据

下面的例子说明了使用set指令为user列族插入列值。在这个例子中我们采用key为bobbyjo,在bobbyjo上插入了很多列,它们属于users这个列族,记住bobbyjo只是一行的标识。注意我们每次只能插入一列。

[default@demo] set  users['bobbyjo']['full_name']='RobertJones';

[default@demo] set  users['bobbyjo']['email']='bobjones@gmail.com';

[default@demo] set  users['bobbyjo']['state']='TX';

[default@demo] set  users['bobbyjo']['gender']='M';

[default@demo] set  users['bobbyjo']['birth_year']='1975';

在接下来的例子中我们采用yomama作为行的key,在users这个列族中插入若干列和值。

[default@demo] set  users['yomama']['full_name']='CathySmith';

[default@demo] set  users['yomama']['state']='CA';

[default@demo] set  users['yomama']['gender']='F';

[default@demo] set users['yomama']['birth_year']='1969';

在下面的例子中,我们为创blog_entry列族建一个key为yomama的列:

[default@demo] set  blog_entry['yomama'][timeuuid()]= 'I love my new shoes!';

备注

Cassandra客户端采用ONE作为读写的一致性验证级别,客户端不支持其他的一致性验证级别。(译者注:一致性验证我们再往后的文档中会提及)

读取行和列的数据

在Cassandra客户端中我们使用get指令从指定的列族中读取数据。

采用List指令冲指定的列族中读取相关的列值出来(默认是返回100行的数据)。

下面的例子就是从users列族中返回100行的数据:

[default@demo] list users;

Cassandra内部默认采用十六进制的字节存放数据。假如你没有指定行key的校验类型,那么列的比较器和校验器都是采用列族定义的默认值,Cassandra客户端将按照默认的的方式为行插入数据,不管是行key还是列名,还是列值都是一样的采用十六进制的方式(同样数据也是以十六进制的方式返回)。

想输入和返回我们可读的数据格式,我们就必须指定编码格式,Cassandra可以提供的编码格式有:

  • ascii
  • bytes
  • integer (a generic variable-length integer type)
  • lexicalUUID
  • long
  • utf8

比如以下例子采用UTF-8的格式返回数据:

[default@demo] get  users[utf8('bobby')][utf8('full_name')];

你也可以通过ASSUME指令在客户端的整个会话过程中采用那一种数据格式,比如下面的例子中采用ASCII-encoded作为数据返回值。

[default@demo] assume users keys  as ascii;

[default@demo] assume  users comprator ASascii;

[default@demo] sssume users validatior  ASascii;

设置一个过期的列

当你在Cassandra设置一个列时,你可以指定它的过期时间,或是他的生命周期属性time-to-live。

比如:我们的用户跟踪优惠证券的过期时限是10天,我们就能定义一个优惠卷的列过期时间指定为10天,如:

[default@demo] set  users['bobbyjo'][utf8('coupon_code')] = utf8('SAVE20') with  ttl=864000;

那么过了十天或是864000秒,该列将不可读,然而它的值并没有从磁盘中删除知道Cassandra完成压缩和收缩。

列的索引

Cassandra客户端可以创建第二索引(列值的索引),当创建该列族是你可以指定它的第二索引或是在后期使用update  column  family修改它的索引。

比如在users列族中的birth_year列添加第二索引:

[default@demo] update  column  family  users with  comparator = UTF8Type and column_metadata = [{column_name:birth_year, validation_class: LongType, index_type:KEYS}];

因为在birth_year添加了第二索引,所以它的值可以作为条件直接查询。

[default@demo] get  users where birth_date =1969;

删除行和列

Cassandra提供del指令删除行或是列(或是子列)

比如在uses列族中的'yomama'行删除coupon_code列:

[default@demo] del users ['yomama']['coupon_code'];

通过以下指令验证删除的情况

[default@demo] get users ['yomama'];

或是直接删除整行

[default@demo] del users ['yomama'];

删除列族和keyspaces

Cassandra提供了类似关系数据库一样删除表和数据库的方式删除列族和keyspaces,以下的例子显示如何通过Drop指令删除users列族和名为demo的keyspace。

[default@demo] drop  column family users;

[default@demo] drop  keyspace demo;

 

查看环上节点的信息,终端下 将当前目录切换到bin/下

nodetool -h 192.168.32 ring

查看节点的信息,同样将终端切换到bin下

nodeltool -h 192.168.32 info

 

抱歉!评论已关闭.