cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf ·...

18
Cassandra 本章内容 Windows 环境运行单机版 Cassandra Linux 环境运行单机版 Cassandra Cassandra 的数据模型 Cassandra 的数据排序规则 配置数据类型 使用命令行工具与 Cassandra 交互 本章小结

Upload: others

Post on 26-Jul-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

书书书

第2章

Cassandra!"#$

本章内容在Windows环境运行单机版Cassandra

在Linux环境运行单机版Cassandra

Cassandra的数据模型

Cassandra的数据排序规则

配置数据类型

使用命令行工具与Cassandra交互

本章小结

Page 2: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

书书书

在第1章中,我们介绍了Cassandra和各种NoSQL产品。在本章中,我们主要讲解如何在Windows和Linux平台上快速安装、配置并使用Cassandra。

21 在Windows环境运行单机版Cassandra

Cassandra可以在多种环境中运行,包括 Windows、Linux和 UNIX系统。在 Windows系统中运行Cassandra是非常方便的,只要配置好JRE(Java运行环境),然后下载 Cassandra,并进行简单的配置就可以运行了。

211 配置JRE

JRE是 Java程序的运行环境。想要运行 Java程序,必须先安装 JRE。JRE的官方下载地址:http://wwwjavacom/zh_CN/download/manualjsp。打开 JRE的下载页面,如图2-1所示。

图2-1 下载JRE

下载完成之后,按照提示完成安装。如果没有更改 JRE的安装路径,那么默认的安装路径为C:\ProgramFiles\Java\jre6\。完成安装后,还需要设置 JRE的环境变量:JAVA_HOME=C:\ProgramFiles\Java\jre6。完成设置后,可以打开 “命令行窗口”检验 JRE是否配置成功,如果输入 “java

!

version”后,能够看到 JRE的版本信息,说明 JRE的配置成功了,如图2-2所示。

图2-2 JRE的版本信息

01   Cassandra实战

Page 3: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

212 配置运行Cassandra06x

在Cassandra官网下载Cassandra06x的压缩包。下载完成后,先将压缩包解压,假设解压的文件位置为:D:\apachecassandra06x。然后,需要修改Cassandra的日志配置文件(conf/log4jproperties)和存储配置文件 (conf/storageconfxml)。在 conf/log4jproperties文件中,需要修改Cassandra的运行日志的文件路径,将

  log4jappenderRFile=/var/log/cassandra/systemlog

修改为

  log4jappenderRFile=/apache-cassandra-06x/systemlog

在文件conf/storageconfxml中需要修改回滚日志 (commitlog)、数据文件 (data)和缓存数据文件 (saved_cache)的存放路径。将

  <SavedCachesDirectory>/var/lib/cassandra/saved_caches

</SavedCachesDirectory><CommitLogDirectory>/var/lib/cassandra/commitlog

</CommitLogDirectory><DataFileDirectories><DataFileDirectory>/var/lib/cassandra/data</DataFileDirectory></DataFileDirectories>

修改为

  <SavedCachesDirectory>/apache-cassandra-06x/saved_caches

</SavedCachesDirectory><CommitLogDirectory>

/apache-cassandra-06x/commitlog</CommitLogDirectory><DataFileDirectories><DataFileDirectory>/apache-cassandra-06x/data</DataFileDirectory>

</DataFileDirectories>

最后,还需要设置Cassandra的环境变量:

  CASSANDRA_HOME=D牶\apache-cassandra-06x

完成以上步骤以后,Cassandra的环境就配置完毕了。配置好Cassandra之后,打开 “命令行窗口”,进入到 D:\apachecassandra06x目录

下,然后直接执行 “bin\cassandrabat”命令就可以运行 Cassandra了,如图2-3所示。同时,我们会在 D:\apachecassandra06x目录下看到3个目录 (commitlog、data和 saved_

11第2章 Cassandra快速入门   

Page 4: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

cache)以及日志文件 (systemlog)。

图2-3 在Windows环境运行Cassandra06x

213 配置运行Cassandra07x

在Cassandra官网下载Cassandra07x的压缩包。下载完成后,先将压缩包解压,假设解压的文件位置为:C:\apachecassandra07x。然后,需要修改Cassandra的日志配置文件(conf/log4jserverproperties)和存储配置文件 (conf/cassandrayaml)。在 conf/log4jserverproperties文件中,需要修改Cassandra的运行日志的文件路径,将

  log4jappenderRFile=/var/log/cassandra/systemlog

修改为

  log4jappenderRFile=/apache-cassandra-07x/systemlog

在conf/cassandrayaml文件中,需要修改回滚日志 (commitlog)、数据文件 (data)和缓存数据 (saved_caches)的存放路径。将

  data_file_directories牶  -/var/lib/cassandra/datacommitlog_directory牶/var/lib/cassandra/commitlogsaved_caches_directory牶/var/lib/cassandra/saved_caches

修改为

  data_file_directories牶-/apache-cassandra-07x/data

commitlog_directory牶/apache-cassandra-07x/commitlogsaved_caches_directory牶/apache-cassandra-07x/saved_caches

最后,如果还没有设置Java的环境变量,请根据 Java的安装目录设置 JAVA_HOME路径,如

  JAVA_HOME=C牶\ProgramFiles\Java\jre6

完成以上步骤以后,Cassandra的环境就配置完毕了。

21   Cassandra实战

Page 5: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

配置好Cassandra之后,打开 “命令行窗口”,进入到 C:\apachecassandra07x目录下,然后直接执行 “bin\cassandrabat”命令就可以运行 Cassandra了,如图2-4所示。同时,我们会在 D:\apachecassandra07x目录下发现多了 3个目录 (commitlog、data和saved_caches)以及日志文件 (systemlog)。

图2-4 在Windows环境运行Cassandra07x

另外,由于Cassandra07x版本中添加了在线修改元数据 (Schema)信息的功能,所以系统在启动的时候,不会包含任何用户定义的元数据信息,需要自己手动创建,或者执

行如下命令将配置文件中定义的元数据信息导入系统中。

  C牶\apache-cassandra-072>bin\schematoolbatlocalhost8080import

31第2章 Cassandra快速入门   

Page 6: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

22 在Linux环境运行单机版Cassandra

在Linux环境中配置Cassandra与在Windows环境中配置类似,区别主要在于 JRE的配置方式和启动Cassandra的脚本不同。如启动Cassandra,在Windows系统中使用的脚本名为cassandrabat,而在Linux系统中使用的脚本名为cassandra。

下面演示的Linux系统版本为32位的Ubuntu1004。

221 配置JRE

在大多数Linux发行版中,Java都是默认安装的,可以直接在命令行中输入 “javaversion”来查看安装的JRE版本信息。

如果默认没有安装JRE,可以到官网下载。JRE的官方下载地址:http://wwwjavacom/zh_CN/download/manualjsp。打开JRE的下载页面,如图2-5所示。

图2-5 下载JRE

下载JRE后,对其执行解压缩操作,设解压后的文件目录为/home/aaron/Downloads/jre160_21。在~/bashrc文件中将 JAVA_HOME的环境变量设置到 JRE目录的 bin目录中,同时修改系统的PATH的环境变量。

  exportJAVA_HOME=/home/aaron/Downloads/jre160_21/binexportPATH=$JAVA_HOME牶$PATH

修改完成后,再执行以下命令,让修改的系统环境变量生效。

  ~/bashrc

最后校验JRE环境是否配置成功,如图2-6所示。

图2-6 校验JRE

41   Cassandra实战

Page 7: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

从图2-6中可以看出,JRE已经配置成功,并且可以正常使用。

222 配置运行Cassandra06x

从官网中下载 Cassandra06x,然后将下载的压缩包解压,假设解压的文件位置为/home/aaron/Downloads/apachecassandra06x。然后,需要修改 Cassandra的日志配置文件(conf/log4jproperties)和存储配置文件 (conf/storageconfxml)。在 conf/log4jproperties文件中,需要修改Cassandra的运行日志的文件路径,将

  log4jappenderRFile=/var/log/cassandra/systemlog

修改为

   log4jappenderRFile=/home/aaron/Downloads/apache-cassandra-06x/systemlog

在conf/storageconfxml文件中,需要修改回滚日志 (commitlog)、数据文件 (data)和缓存数据文件 (saved_cache)的存放路径。将

  <SavedCachesDirectory>/var/lib/cassandra/saved_caches

</SavedCachesDirectory><CommitLogDirectory>/var/lib/cassandra/commitlog

</CommitLogDirectory><DataFileDirectories><DataFileDirectory>/var/lib/cassandra/data</DataFileDirectory></DataFileDirectories>

修改为

  <SavedCachesDirectory>/home/aaron/Downloads/apache-cassandra-06x/saved_caches  </SavedCachesDirectory>  <CommitLogDirectory>

/home/aaron/Downloads/apache-cassandra-06x/commitlog  </CommitLogDirectory>  <DataFileDirectories>  <DataFileDirectory>/home/aaron/Downloads/apache-cassandra-06x/data</DataFileDirectory>  </DataFileDirectories>

完成以上步骤以后,Cassandra的运行环境就配置完毕了。配置好 Cassandra之后,打开 “命令行窗口”,进入到/home/aaron/Downloads/apache

cassandra06x目录下,然后直接执行 “bin/cassandra”命令就可以运行 Cassandra了,如图2-7所示。同时,/home/aaron/Downloads/apachecassandra06x目录下多了 3个目录

51第2章 Cassandra快速入门   

Page 8: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

(commitlog、data和saved_cache)以及日志文件 (systemlog)。

图2-7 在Linux环境运行Cassandra06x

223 配置运行Cassandra07x

从官网中下载 Cassandra07x,然后将下载的压缩包解压,假设解压的文件位置为/home/aaron/Downloads/apachecassandra07x。然后,需要修改 Cassandra的日志配置文件(conf/log4jserverproperties)和存储配置文件 (conf/cassandrayaml)。在 conf/log4jserverproperties文件中,需要修改Cassandra的运行日志的文件路径,将

  log4jappenderRFile=/var/log/cassandra/systemlog

修改为

   log4jappenderRFile=/home/aaron/Downloads/apache-cassandra-07x/systemlog

在conf/cassandrayaml文件中,需要修改回滚日志 (commitlog)、数据文件 (data)和缓存数据 (caches)的存放路径。将

  #directorieswhereCassandrashouldstoredataondiskdata_file_directories牶

-/var/lib/cassandra/data

#commitlogcommitlog_directory牶/var/lib/cassandra/commitlog

#savedcachessaved_caches_directory牶/var/lib/cassandra/saved_caches

修改为

    #directorieswhereCassandrashouldstoredataondisk  data_file_directories牶   -/home/aaron/Downloads/apache-cassandra-07x/data    #commitlog

61   Cassandra实战

Page 9: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

  commitlog_directory牶/home/aaron/Downloads/apache-cassandra-07x/commitlog    #savedcaches  saved_caches_directory牶/home/aaron/Downloads/apache-cassandra-07x/saved_caches

完成以上步骤以后,Cassandra的运行环境就配置完毕了。配置好 Cassandra之后,打开 “命令行窗口”,进入到/home/aaron/Downloads/apache

cassandra07x目录下,然后直接执行 “bin/cassandra”命令就可以运行 Cassandra了,如图2-8所示。同时,/home/aaron/Downloads/apachecassandra07x目录下多了 3个目录(commitlog、data和saved_caches)以及日志文件 (systemlog)。

图2-8 在Linux环境运行Cassandra07x

另外,由于Cassandra07x版本中添加了在线修改元数据 (Schema)信息的功能,所以系统在启动的时候不会包含任何用户定义的元数据信息,需要自己手动创建,或者执行

71第2章 Cassandra快速入门   

Page 10: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

如下命令将配置文件中定义的元数据信息导入系统中。

  shbin/schematoollocalhost8080import

23 Cassandra的数据模型

Cassandra的数据模型与传统的键值对类型不同,我们可以将Cassandra的数据模型想象成一个四维或者五维的HashMap。

在Cassandra中,数据类型有以下几种:Column、SuperColumn、ColumnFamily和 Keyspace。下面将分别介绍这4种数据类型。

231 Column

Column是Cassandra中最小的数据单元。它是一个三元的数据类型,包含 name、value和timestamp。

将一个Column用JSON的形式表现出来,如下所示:

  狖//这是一个Columnname牶"emailaddress"牞value牶"gpcuster@gmalicom"牞timestamp牶123456789

这里提到的name和value都是Java中的byte[]类型。

232 SuperColumn

我们可以将 SuperColumn想象成 Column的数组,它包含一个 name以及一系列相应的Column。

将一个SuperColumn用JSON的形式表现如下:

    狖  //这是一个SuperColumnname牶"email"牞//包含一系列的Columnvalue牶狖  狖name牶"address"牞value牶"gpcustr@gmailcom"牞timestamp牶123456789狚牞  狖name牶"id"牞value牶"gpcuster"牞timestamp牶123456789狚牞  狖name牶"password"牞value牶"123456"牞timestamp牶123456789狚牞狚

  狚

Column和SuperColumn都是name与value的组合,它们之间最大的不同在于 Column的value是Java中的String类型,而SuperColumn的value是Column的Map。

81   Cassandra实战

Page 11: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

注意:SuperColumn自身是不包含timestamp属性的。

233 ColumnFamily

ColumnFamily是一个包含了许多 Row的结构,可以将它想象成数据库中的表。Row是由Key以及与这个Key所关联的Column组成的。

代码清单2-1代表了一个ColumnFamily。

代码清单2-1 ColumnFamily示例

  UserProfile=狖//这是一个ColumnFamilygpcuster牶狖 //这是对应ColumnFamily的Key//这是Key下对应的Column狖name牶"username"牞value牶"aaron"牞timestamp牶123456789狚牞狖name牶"email"牞value牶"gpcuster@gmailcom"牞timestamp牶123456789狚牞狖name牶"phone"牞value牶"13912345678"牞timestamp牶123456789狚

   狚牞//第一个Row结束   ieure牶狖  //这是ColumnFamily的另一个Key     //这是另一个Key对应的column     狖name牶"username"牞value牶"bean"牞timestamp牶123456789狚牞     狖name牶"email"牞value牶"bean@gmailcom"牞timestamp牶123456789狚牞     狖name牶"phone"牞value牶"13312341234"牞timestamp牶123456789狚牞     狖name牶"age"牞value牶"23"牞timestamp牶123456789狚   狚//第二个Row结束狚

上面例子是一个Standard类型的ColumnFamily,Standard类型的 ColumnFamily包含了一系列Column。

ColumnFamily也可以是Super类型的,代码清单2-2代表了一个SuperColumnFamily。

代码清单2-2 SuperColumnFamily示例

  AddressBook=狖//这是一个Super类型的ColumnFamily gpcuster牶狖 //这是对应ColumnFamily的Key   狖    name牶"John"牞//这是SuperColumn的name    value牶狖      狖name牶"email"牞value牶"john@gmailcom"牞timestamp牶123456789狚牞      狖name牶"phone"牞value牶"13412341234"牞timestamp牶123456789狚牞    狚   狚牞   狖    name牶"Kim"牞//这是SuperColumn的name    value牶狖      狖name牶"email"牞value牶"kim@gmailcom"牞timestamp牶123456789狚牞      狖name牶"phone"牞value牶"13412340000"牞timestamp牶123456789狚牞    狚   狚牞   狖    name牶"Tod"牞//这是SuperColumn的name

91第2章 Cassandra快速入门   

Page 12: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

    value牶狖      狖name牶"email"牞value牶"tod@gmailcom"牞timestamp牶123456789狚牞      狖name牶"phone"牞value牶"13412341111"牞timestamp牶123456789狚牞    狚   狚 狚牞//第一个Row结束 ieure牶狖   //这是对应ColumnFamily的Key   狖    name牶"joey"牞//这是SuperColumn的name    value牶狖      狖name牶"email"牞value牶"joey@gmailcom"牞timestamp牶123456789狚牞      狖name牶"phone"牞value牶"13400001234"牞timestamp牶123456789狚牞    狚   狚牞   狖    name牶"William"牞//这是SuperColumn的name    value牶狖      狖name牶"email"牞value牶"william@gmailcom"牞timestamp牶123456789狚牞      狖name牶"phone"牞value牶"13011110000"牞timestamp牶123456789狚牞    狚   狚  狚//第二个Row结束狚

234 Keyspace

每一个Keyspace包含多个ColumnFamily,并且可以指定使用的数据备份策略和数据的备份数。

一般来说,Cassandra集群只需要一个Keyspace就足够了。但是当Cassandra集群足够庞大、业务足够复杂的时候,一个Keyspace就无法满足需求了。

比如有两个博客网站共用同一个Cassandra集群,每一个博客网站都需要一个叫做 BlogEntry的ColumnFamily,而且第一个博客网站的数据备份数为3,第二个博客网站的数据备份数为5,那么就需要使用2个不同的Keysapce才能满足这个条件。

24 Cassandra的数据排序规则

除了拥有灵活的数据模型,Cassandra还可以指定 ColumnFamily中 Column的排序规则。这个排序操作是在数据插入 Cassandra的时候完成的,读取的时候就已经是有序的了。

假设定义了一个ColumnFamliy,并且将某一个Key下面的4条数据分别写入 Cassandra。这4条数据的写入顺序如下:

  狖name牶123牞value牶"firstinsert"牞timestamp牶123456789狚狖name牶832416牞value牶"secondinsert"牞timestamp牶123456789狚

02   Cassandra实战

Page 13: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

狖name牶3牞value牶"thirdinsert"牞timestamp牶123456789狚狖name牶976牞value牶"fourthinsert"牞timestamp牶123456789狚

如果指定的排序规则为LongType,那么这4条数据写入Cassandra后的顺序如下:

  狖name牶3牞value牶"thirdinsert"牞timestamp牶123456789狚狖name牶123牞value牶"firstinsert"牞timestamp牶123456789狚狖name牶976牞value牶"fourthinsert"牞timestamp牶123456789狚狖name牶832416牞value牶"secondinsert"牞timestamp牶123456789狚

可以看到,按照LongType排序后,Key下面的所有Column都是以 Column的 name数值大小排序的。

也可以指定排序规则为UTF8Type,那么这4条数据写入Cassandra后的顺序如下:

  狖name牶123牞value牶"firstinsert"牞timestamp牶123456789狚狖name牶3牞value牶"thirdinsert"牞timestamp牶123456789狚狖name牶832416牞value牶"secondinsert"牞timestamp牶123456789狚狖name牶976牞value牶"fourthinsert"牞timestamp牶123456789狚

按照UTF8Type排序以后,排序的规则变为了按照Column的name字节大小。除了LongType和UTF8Type的排序规则之外,Cassandra还支持其他排序规则。表2-1

详细介绍了Cassandra支持的所有排序规则。

表2-1 Cassandra支持的所有排序规则

排 序 名 称    排 序 规 则

BytesType 按照Column名称的Byte顺序进行排序AsciiType 按照Column名称的ASCII顺序进行排序UTF8Type 按照Column名称的UTF8顺序进行排序LongType 按照Column名称的Long顺序进行排序LexicalUUIDType 按照Column名称的LexicalUUID顺序进行排序TimeUUIDType 按照Column名称的TimeUUID顺序进行排序

由于Super类型的ColumnFamily中包括的是 SuperColumn,所以除了可以指定 SuperColumn与SuperColumn之间的排序规则外,还可以额外指定SuperColumn中所包括的Column的排序规则,并且这些排序规则都是通用的,如下所示:

  狖//第一个SuperColumn  name牶"workAddress"牞  value牶狖    狖name牶"street"牞value牶"streetone"牞timestamp牶123456789狚牞    狖name牶"city"牞value牶"Beijing"牞timestamp牶123456789狚牞    狖name牶"zip"牞value牶"100000"牞timestamp牶123456789狚  狚狚狖//第二个SuperColumn  name牶"homeAddress"牞

12第2章 Cassandra快速入门   

Page 14: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

  value牶狖    狖name牶"street"牞value牶"streettwo"牞timestamp牶123456789狚牞    狖name牶"city"牞value牶"Hunan"牞timestamp牶123456789狚牞    狖name牶"zip"牞value牶"414000"牞timestamp牶123456789狚  狚狚

如果指定SuperColumn与SuperColumn之间的排序规则与 SuperColumn中所包括的 Column的排序规则为UTF8Type,那么排序后的结果如下:

  狖//第二个SuperColumn  name牶"homeAddress"牞  value牶狖   狖name牶"city"牞value牶"Hunan"牞timestamp牶123456789狚牞   狖name牶"street"牞value牶"streettwo"牞timestamp牶123456789狚牞   狖name牶"zip"牞value牶"414000"牞timestamp牶123456789狚  狚狚牞  狖 //第一个SuperColumn  name牶"workAddress"牞  value牶狖   狖name牶"city"牞value牶"Beijing"牞timestamp牶123456789狚牞   狖name牶"street"牞value牶"streetone"牞timestamp牶123456789狚牞   狖name牶"zip"牞value牶"100000"牞timestamp牶123456789狚  狚狚

可以看到,经过排序后,名称为 “homeAddress”的 SuperColumn排在了名称为 “workAddress”的SuperColumn前面。同时SuperColumn内部名称为 “city”的Column排在了名称为 “street”的Column前面。

25 配置数据类型

在Cassandra06x中,我们需要修改 storageconfxml来配置使用的数据类型,并且修改后的数据模型需要重启Cassandra才能生效。

在storageconfxml文件中,可以任意指定 Keyspace以及 Keyspace下面的 ColumnFamily和ColumnFamily的排序类型。

假设需要添加一个名为 School的 Keyspace,并且下面包括3个 ColumnFamily,分别为Student、Teacher和Class,我们可以在storageconfxml文件中的<Keyspaces>范围内添加如下内容:

  <KeyspaceName="School">  <ColumnFamilyName="Student"CompareWith="UTF8Type"/>  <ColumnFamilyName="Teacher"CompareWith="UTF8Type"/>

22   Cassandra实战

Page 15: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

  <ColumnFamilyName="Class"           ColumnType="Super"           CompareWith="UTF8Type"           CompareSubcolumnsWith="UTF8Type"/>  <ReplicaPlacementStrategy>orgapachecassandralocatorRackUnawareStrategy</ReplicaPlacementStrategy>  <ReplicationFactor>1</ReplicationFactor>  <EndPointSnitch>orgapachecassandralocatorEndPointSnitch</EndPointSnitch></Keyspace>

添加完这些内容后,我们再启动Cassandra就会多一个Keyspace可以使用。在指定 Keyspace包含ColumnFamily的同时,也通过 CompareWith指定了排序规则。对于 Super类型的ColumnFamily,我们需要指定 ColumnType,并且可以通过 CompareSubcolumnsWith指定 SuperColumn下Column的排序规则。

在指定新的 Keyspace的同时,也指定了备份策略 (ReplicaPlacementStrategy)、备份数(ReplicationFactor)和网络寻址规则 (EndPointSnitch),这些配置的详细信息会在后面的章节中介绍。

在Cassandra07x中,可以直接在 conf/cassandrayaml文件中修改 schema,然后使用bin/schematool文件将新定义的schema文件信息导入 Cassandra中,或者直接通过命令行执行需要修改的schema信息,无须重启Cassandra进程。

26 使用命令行工具与Cassandra交互

261 与Cassandra06x进行交互

打开一个命令行窗口,进入到 Cassandra的安装目录下,在启动 Cassandra命令行工具后,输入 “connectlocalhost/9160”就可以连接到本机的Cassandra了。连接成功后,会输出“Connectedto:"TestCluster"onlocalhost/9160”的字样,如图2-9所示。

图2-9 启动Cassandra06x命令工具

32第2章 Cassandra快速入门   

Page 16: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

接着,我们可以在School的Keyspace中插入如下两条数据到Student中:

  cassandra>setSchoolStudent犤′aaron′犦犤′no′犦=′123456′Valueinsertedcassandra>setSchoolStudent犤′aaron′犦犤′age′犦=′25′Valueinserted

在命令 “setSchoolStudent[′aaron′][′no′]=′123456′”中,“set”表示要添加新的值,“School”表示Keyspace的名称,“Student”表示 ColumnFamily的名称,“aaron”表示 Key,“no”表示Column的名称,“123456”表示Column的值。

然后,可以将插入的这两条数据取回来。

  cassandra>getSchoolStudent犤′aaron′犦=>牗column=no牞value=123456牞timestamp=1280502063365000牘=>牗column=age牞value=25牞timestamp=1280502069028000牘Returned2results

也可以分别取回aaron这个Key下面的Column。

  cassandra>getSchoolStudent犤′aaron′犦犤′no′犦=>牗column=no牞value=123456牞timestamp=1280502063365000牘cassandra>getSchoolStudent犤′aaron′犦犤′age′犦=>牗column=age牞value=25牞timestamp=1280502069028000牘

更多关于Cassandra命令行提供的功能,可以输入 “?”或者 “help”进行查看,部分功能的预览界面如图2-10所示。

图2-10 Cassandra06x命令工具提供的功能

262 与Cassandra07x进行交互

打开一个命令行窗口,进入到 Cassandra的安装目录下,在启动 Cassandra命令行工具后,输入 “connectlocalhost/9160”就可以连接到本机的Cassandra了。连接成功后,会输出“Connectedto:"TestCluster"onlocalhost/9160”的字样,如图2-11所示。

42   Cassandra实战

Page 17: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

图2-11 启动Cassandra07x命令工具

接着,我们可以在Cassandra中先删除之前通过 schematool加载的 Keyspace1,然后创建一个Keyspace1,如图2-12所示。

图2-12 创建一个Keyspace1

我们可以在Keyspace1中插入三条数据,然后再将这些数据读取出来,如图2-13所示。

图2-13 在Keyspace1中插入三条数据,并读取出来

更多关于Cassandra命令行提供的功能,可以输入 “?”或者 “help”进行查看,部分功能的预览界面如图2-14所示。

图2-14 Cassandra07x命令工具提供的功能

52第2章 Cassandra快速入门   

Page 18: Cassandra!#$images.china-pub.com/ebook195001-200000/198207/ch02.pdf · log4jappenderRFile=/var/log/cassandra/systemlog 修改为 log4j appender R File=/apache-cassandra-0

提示:如果在Linux平台中使用该命令行工具,只需要在 Cassandra的目录下输入 bin\cassandracli即可。

27 本章小结

本章的目的是引导读者快速搭建 Cassandra的使用环境和掌握 Cassandra的基本操作方法。首先演示了如何在Windows和Linux系统中配置和运行Cassandra,接着详细讲解了Cassandra的数据模型、排序规则以及如何配置数据类型,最后讲解了如何使用 Cassandra自带的命令工具与Cassandra进行交互。

62   Cassandra实战