对于那些喜欢即时满足的人,我们首先要安装Cassandra。因为Cassandra引入了许多新词汇,所以我们可能会有一些不熟悉的术语。没关系;这里的想法是在一个简单的配置中快速设置,以确保一切正常运行。这将作为一个方向。然后,我们将退后一步,了解Cassandra在更大的背景下。
安装Apache Distribution
Cassandra可从网站http://cassandra.apache.org 下载。只需单击主页上的链接即可将版本下载为gzip压缩包。通常提供两种版本的Cassandra。对于尚未投入生产的新项目,建议使用最新版本。最稳定的版本是推荐用于生产的版本。对于所有版本,预构建的二进制文件名为apache-cassandra-x.x.x-bin.tar.gz,其中x.x.x表示版本号。下载大约23MB。
提取下载
最简单的入门方法是下载预构建的二进制文件。您可以使用任何常规ZIP实用程序解压缩压缩文件。在基于Unix的系统(如Linux或MacOS)上,应预先安装GZip提取实用程序;在Windows上,你需要获得一个程序,如WinZip,这是商业的,或类似7-Zip,这是免费软件。
打开你的提取程序。您可能需要在单独的步骤中提取ZIP文件和TAR文件。一旦文件系统上有一个名为apache-cassandra-x.x.x的文件夹,就可以运行Cassandra了。
那里有什么?
解压缩tarball后,您会看到Cassandra二进制分发包含多个文件和目录。
这些文件包括NEWS.txt文件,其中包含描述当前版本和之前版本中包含的功能的发行说明,以及CHANGES.txt,它类似于错误修复。您需要确保在升级到新版本时查看这些文件,以便了解所期望的更改。
-
bin
此目录包含运行Cassandra以及客户端的可执行文件,包括查询语言shell(cqlsh)和命令行界面(CLI)客户端。它还具有运行nodetool的脚本,该工具是用于检查群集以确定其是否已正确配置以及执行各种维护操作的实用程序。我们稍后会深入研究nodetool。该目录还包含几个用于对SSTable执行操作的实用程序,包括列出SSTable(sstablekeys)的键,批量提取和恢复SSTable内容(sstableloader),以及将SSTable升级到新版本的Cassandra(sstableupgrade)。
-
conf
此目录包含用于配置Cassandra实例的文件。所需的配置文件包括:cassandra.yaml文件,这是运行Cassandra的主要配置;和logback.xml文件,它允许您更改日志记录设置以满足您的需要。可以选择使用其他文件来配置网络拓扑,归档和恢复命令以及触发器。我们在第7章讨论配置时会看到如何使用这些配置文件。
-
interface
该目录包含一个名为cassandra.thrift的文件。此文件基于Thrift语法定义传统的远程过程调用(RPC)API。在创建CQL之前,Thrift接口用于在Java,C ++,PHP,Ruby,Python,Perl和C#中创建客户端。 Thrift API已在3.2版本中正式标记为已弃用,将在4.0版本中删除。
-
javadoc
该目录包含使用Java的JavaDoc工具生成的文档网站。请注意,JavaDoc仅反映直接存储在Java代码中的注释,因此不代表全面的文档。如果您想了解代码的布局方式,这将非常有用。此外,Cassandra是一个很棒的项目,但代码包含的注释相对较少,因此您可能会发现JavaDoc的用处有限。如果您熟悉Java,那么直接读取类文件可能会更有成效。尽管如此,要读取JavaDoc,请在浏览器中打开javadoc / index.html文件。
-
lib
该目录包含Cassandra需要运行的所有外部库。例如,它使用两个不同的JSON序列化库,Google集合项目和几个Apache Commons库。
-
pylib
该目录包含cqlsh使用的Python库。
-
tools
此目录包含用于维护Cassandra节点的工具。我们将在第11章中介绍这些工具。
如果您已经使用默认配置运行Cassandra,您会注意到Cassandra主目录下的另外两个目录:data和log。 我们将暂时讨论这些目录的内容。
从Source构建
Cassandra使用Apache Ant构建脚本语言,使用Maven进行依赖管理。
您可以从http://ant.apache.org下载Ant。 您不需要单独下载Maven来构建Cassandra。
从源代码构建需要完整的Java 7或8 JDK,而不仅仅是JRE。 如果您看到有关Ant如何缺少tools.jar的消息,您要么没有完整的JDK,要么指向环境变量中的错误路径。 Maven从Internet下载文件,因此如果您的连接无效或Maven无法确定代理,则构建将失败。
如果您想下载最前沿的版本,可以从Jenkins获取源代码,Cassandra项目将其用作持续集成工具。 有关最新版本和测试覆盖率信息,请访问http://cassci.datastax.com。
如果您是Git粉丝,可以使用以下命令获取Cassandra源的只读中继版本:
git clone git://git.apache.org/cassandra.git
Git是由Linus Torvalds创建的用于管理Linux内核开发的源代码管理系统。 它越来越受欢迎,并被Android,Fedora,Ruby on Rails,Perl和许多Cassandra客户端等项目使用(我们将在第8章中看到)。 如果您使用的是Ubuntu等Linux发行版,那么获取Git就不容易了。 在控制台上,只需键入> apt-get install git即可安装并准备好命令。 有关更多信息,请访问http://git-scm.com。
因为Maven负责所有的依赖关系,所以一旦你拥有了源代码,很容易构建Cassandra。 只需确保您位于源代码下载的根目录中并执行ant程序,该程序将在当前目录中查找名为build.xml的文件并执行默认构建目标。 Ant和Maven负责其余的工作。 要执行Ant程序并开始编译源代码,只需键入:
$ ant
而已。 Maven将检索所有必需的依赖项,Ant将构建数百个源文件并执行测试。 如果一切顺利,你应该看到一个BUILD SUCCESSFUL消息。 如果一切都不顺利,请确保您的路径设置都正确,您拥有所需程序的最新版本,并且您下载了稳定的Cassandra构建。 您可以检查Jenkins报告以确保您下载的源实际上可以编译。
额外的构建目标
要编译服务器,您只需执行如前所示的ant。此命令执行默认目标jar。此目标将执行包括单元测试的完整构建,并将文件输出到名为apache-cassandra-x.x.x.jar的构建目录中。
如果要查看构建文件支持的所有目标的列表,只需传递Ant -p选项以获取每个目标的描述。以下是您可能感兴趣的其他几个:
-
test
用户可能会发现这是最有帮助的,因为它执行单元测试的电池。您还可以查看单元测试源本身,以获取有关如何与Cassandra交互的一些有用示例。
-
stress-build
这个目标构建了Cassandra压力工具,我们将在第12章中尝试。
-
clean
此目标删除本地创建的工件,例如生成的源文件和类以及单元测试结果。相关的目标realclean执行清理并另外删除由Maven下载的Cassandra分发JAR文件和JAR文件。
运行Cassandra
在早期版本的Cassandra中,在启动服务器之前,需要一些步骤来编辑配置文件和设置环境变量。 但开发人员已经做了一个非常棒的工作,让它很容易立即开始使用Cassandra。 我们将会注意到一些可用的配置选项。
Cassandra需要Java 7或8 JVM,最好是最新的稳定版本。 它已经在Open JDK和Oracle的JDK上进行了测试。 您可以通过打开命令提示符并执行java -version来检查已安装的Java版本。 如果您需要JDK,可以访问http://www.oracle.com/technetwork/java/javase/downloads/index.html。
在Windows上
下载并编译二进制文件或源代码后,就可以启动数据库服务器了。
建议设置JAVA_HOME环境变量。要在Windows 7上执行此操作,请单击“开始”按钮,然后右键单击“计算机”。单击“高级系统设置”,然后单击“环境变量…”按钮。单击“新建…”以创建新的系统变量。在“变量名称”字段中,键入JAVA_HOME。在“变量值”字段中,键入Java安装的路径。如果运行Java 8,如果运行Java 7或C:\ Program Files \ Java \ jre1.8.0_25,则可能类似于C:\ Program Files \ Java \ jre7。
请记住,如果创建新的环境变量,则需要重新打开任何当前打开的终端,以便系统了解新变量。要确保正确设置环境变量并且Cassandra随后可以在Windows上找到Java,请在新终端中执行此命令:echo%JAVA_HOME%。这将打印环境变量的值。
您还可以定义一个名为CASSANDRA_HOME的环境变量,该变量指向您放置或构建Cassandra的顶级目录,因此您不必太多地关注从哪里开始使用Cassandra。这对于除数据库服务器之外的其他工具(例如nodetool和cqlsh)非常有用。
一旦您第一次启动服务器,Cassandra将向您的系统添加目录以存储其数据文件。默认配置在CASSANDRA_HOME目录下创建这些目录。
-
data
这个目录是Cassandra存储数据的地方。默认情况下,数据目录下有三个子目录,对应于Cassandra使用的各种数据文件:commitlog,data和saved_caches。我们将在第6章中探讨每个数据文件的重要性。如果您一直在尝试不同版本的数据库并且不担心丢失数据,则可以删除这些目录并作为最后的手段重新启动服务器。
-
logs
此目录是Cassandra将其日志存储在名为system.log的文件中的目录。 如果遇到任何困难,请查阅日志以查看可能发生的情况。
数据文件位置可在位于conf目录中的cassandra.yaml文件中进行配置。 这些属性称为data_file_directories,commit_log_directory和saved_caches_目录。 我们将在第7章讨论这些目录的推荐配置。
在Linux上
Linux和其他* nix操作系统(包括Mac OS)上的过程与Windows上的过程类似。 根据前面的描述,确保正确设置了JAVA_HOME变量。 然后,你需要使用gunzip提取Cassandra gzipped tarball。 许多用户更喜欢使用/ var / lib目录进行数据存储。 如果要更改此配置,则需要编辑conf / cassandra.yaml文件并为Cassandra创建引用的目录以存储其数据和日志,确保为将运行Cassandra的用户配置写入权限:
$ sudo mkdir -p / var / lib / cassandra
$ sudo chown -R username / var / lib / cassandra
当然,不要使用用户名替换自己的用户名。
启动服务器
要在任何操作系统上启动Cassandra服务器,请打开命令提示符或终端窗口,导航到解压缩Cassandra的 / bin,然后运行命令cassandra -f启动服务器。
使用-f开关告诉Cassandra保持在前台而不是作为后台进程运行,因此所有服务器日志都将打印到标准输出,您可以在终端窗口中看到它们,这对测试非常有用。 在任何一种情况下,日志都会附加到system.log文件中,如前所述。
在干净安装中,当服务器运行时,您应该会看到很多日志语句。 日志记录语句的确切语法将根据您使用的版本而有所不同,但我们可以查找一些重点。 如果您搜索“cassandra.yaml”,您将很快遇到以下问题:
DEBUG [main] 2015-12-08 06:02:38,677 YamlConfigurationLoader.java:104 -
Loading settings from file:/.../conf/cassandra.yaml
INFO [main] 2015-12-08 06:02:38,781 YamlConfigurationLoader.java:179 -
Node configuration:[authenticator=AllowAllAuthenticator;
authorizer=AllowAllAuthorizer; auto_bootstrap=false; auto_snapshot=true;
batch_size_fail_threshold_in_kb=50; ...
这些日志语句指示包含已配置设置的cassandra.yaml文件的位置。节点配置语句列出配置文件中的设置。
现在搜索“JVM”,你会发现这样的东西:
INFO [main] 2015-12-08 06:02:39,239 CassandraDaemon.java:436 -
JVM vendor/version: Java HotSpot(TM) 64-Bit Server VM/1.8.0_60
INFO [main] 2015-12-08 06:02:39,239 CassandraDaemon.java:437 -
Heap size: 519045120/519045120
这些日志语句提供了描述正在使用的JVM的信息,包括内存设置。
接下来,搜索使用中的版本 - “Cassandra版本”,“Thrift API版本”,“CQL支持的版本”:
INFO [main] 2015-12-08 06:02:43,931 StorageService.java:586 -
Cassandra version: 3.0.0
INFO [main] 2015-12-08 06:02:43,932 StorageService.java:587 -
Thrift API version: 20.1.0
INFO [main] 2015-12-08 06:02:43,932 StorageService.java:588 -
CQL supported versions: 3.3.1 (default: 3.3.1)
我们还可以找到Cassandra正在初始化内部数据结构(如缓存)的语句:
INFO [main] 2015-12-08 06:02:43,633 CacheService.java:115 -
Initializing key cache with capacity of 24 MBs.
INFO [main] 2015-12-08 06:02:43,679 CacheService.java:137 -
Initializing row cache with capacity of 0 MBs
INFO [main] 2015-12-08 06:02:43,686 CacheService.java:166 -
Initializing counter cache with capacity of 12 MBs
如果我们搜索“JMX”,“gossip”和“clients”等术语,我们可以找到如下语句:
WARN [main] 2015-12-08 06:08:06,078 StartupChecks.java:147 -
JMX is not enabled to receive remote connections.
Please see cassandra-env.sh for more info.
INFO [main] 2015-12-08 06:08:18,463 StorageService.java:790 -
Starting up server gossip
INFO [main] 2015-12-08 06:02:48,171 Server.java:162 -
Starting listening for CQL clients on /127.0.0.1:9042 (unencrypted)
这些日志语句表明服务器开始启动与群集中其他服务器的通信,并公开可公开的接口。 默认情况下,禁用通过Java Management Extensions(JMX)的管理界面进行远程访问。 我们将在第10章中探讨管理界面。
最后,搜索“状态跳转”,您将看到以下内容:
INFO [main] 2015-12-08 06:02:47,351 StorageService.java:1936 -
Node /127.0.0.1 state jump to normal
恭喜! 现在,您的Cassandra服务器应该启动并运行一个名为Test Cluster侦听端口9160的新单节点集群。如果继续监视输出,您将开始看到定期输出,例如memtable flushing和compaction,我们将 马上学习。
提交者努力确保数据可以从一个小点发布到下一个,从一个主要版本到下一个主要版本。 但是,提交日志需要从版本到版本(甚至是次要版本)完全清除。
如果您安装了任何以前版本的Cassandra,您可能希望暂时清除数据目录,只是为了启动并运行。 如果您搞砸了Cassandra安装并希望再次干净利落,则可以删除数据文件夹。
停止Cassandra
既然我们已经成功启动了Cassandra服务器,您可能想知道如何阻止它。您可能已经注意到bin目录中的stop-server命令。让我们尝试运行该命令。以下是您在Unix系统上看到的内容:
$ ./stop-server
请在使用前阅读stop-server脚本
所以你看到我们的服务器还没有停止,但我们被指示阅读脚本。看看我们最喜欢的代码编辑器,您将了解到阻止Cassandra的方法是杀死运行Cassandra的JVM进程。该文件提供了几种不同的技术,您可以通过这些技术识别JVM进程并将其终止。
第一种技术是使用-p选项启动Cassandra,它为Cassandra提供了一个文件的名称,它应该在启动时写入进程标识符(PID)。这可以说是确保我们杀死正确流程的最直接的方法。
但是,因为我们没有使用-p选项启动Cassandra,所以我们需要自己找到该进程并将其杀死。该脚本建议使用pgrep为包含术语“cassandra”的当前用户定位进程:
user=`whoami`
pgrep -u $user -f cassandra | xargs kill -9
在Windows安装中,您可以找到JVM进程并使用任务管理器将其终止。
其他Cassandra发行版
我们刚刚审核的说明向我们展示了如何安装Cassandra的Apache发行版。除了Apache发行版之外,还有其他几种获取Cassandra的方法:
-
DataStax社区版
这个免费发布由DataStax通过Planet Cassandra网站提供。各种平台的安装选项包括RPM和Debian(Linux),MSI(Windows)和MacOS库。社区版提供了其他工具,包括称为DevCenter的集成开发环境(IDE)和OpsCenter监视工具。另一个有用的功能是能够在Windows上将Cassandra配置为OS管理的服务。社区版的发布通常会跟踪Apache版本,并在每次Apache发布后很快提供。
-
DataStax企业版
DataStax还提供经过生产验证的完全支持版本。该产品线提供了一个集成的数据库平台,支持Hadoop和Apache Spark等互补数据技术。我们将在第14章中探讨其中的一些集成。
-
虚拟机映像
部署Cassandra的常用模型是将前面的一个发行版打包在虚拟机映像中。例如,Amazon Web Services(AWS)市场中提供了多个此类图像。
我们将在第14章深入探讨在生产环境中部署Cassandra的几个选项,包括云计算环境。
选择正确的分发将取决于您的部署环境;您对规模,稳定性和支持的需求;以及您的开发和维护预算。拥有开源和商业部署选项可以灵活地为您的组织做出正确的选择。
运行CQL Shell
现在您已经启动并运行了Cassandra安装,让我们快速尝试确保所有设置都正确。 我们将使用CQL shell(cqlsh)连接到我们的服务器并浏览一下。
如果您在3.0之前的版本中使用过Cassandra,那么您可能也熟悉命令行客户端界面cassandra-cli。 CLI已在3.0版本中删除,因为它取决于传统的Thrift API。
要运行shell,请创建一个新的终端窗口,切换到Cassandra主目录,然后键入以下命令(您应该看到类似于此处所示的输出):
$ bin/cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.0.0 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh>
因为我们没有指定我们想要连接的节点,所以shell有助于检查在本地主机上运行的节点,并找到我们之前启动的节点。 shell还指示您已连接到名为“Test Cluster”的Cassandra服务器群集。 这是因为默认情况下为localhost设置了一个localhost节点。
在生产环境中,请确保将群集名称更改为更适合您的应用程序的名称。
要连接到特定节点,请在命令行上指定主机名和端口。 例如,以下内容将连接到我们的本地节点:
$ bin/cqlsh localhost 9042
配置cqlsh连接的另一种方法是设置环境变量$ CQLSH_HOST和$ CQLSH_PORT。 如果您经常连接到另一台主机上的特定节点,则此方法很有用。 如果在命令行上指定主机和端口,则将覆盖环境变量。
尝试连接服务器时是否遇到过这样的错误?
Exception connecting to localhost/9160. Reason:
Connection refused.
如果是这样,请确保在该主机和端口启动Cassandra实例,并且您可以ping您尝试访问的主机。 可能存在阻止您连接的防火墙规则。
要查看cqlsh支持的命令行选项的完整列表,请键入命令cqlsh -help。
基本的cqlsh命令
让我们快速浏览一下cqlsh,了解可以发送到服务器的命令类型。 我们将看到如何使用基本环境命令以及如何进行插入和检索某些数据的往返。
cqlsh命令都是不区分大小写的。 对于我们的示例,我们将采用大写约定,以便与shell在帮助主题和输出中描述自己的命令的方式一致。
cqlsh帮助
要获得cqlsh的帮助,请键入HELP或? 查看可用命令列表:
cqlsh> HELP
Documented shell commands:
===========================
CAPTURE COPY DESCRIBE EXPAND PAGING SOURCE
CONSISTENCY DESC EXIT HELP SHOW TRACING
CQL help topics:
================
ALTER CREATE_TABLE_TYPES PERMISSIONS
ALTER_ADD CREATE_USER REVOKE
ALTER_ALTER DATE_INPUT REVOKE_ROLE
ALTER_DROP DELETE SELECT
ALTER_RENAME DELETE_COLUMNS SELECT_COLUMNFAMILY
ALTER_USER DELETE_USING SELECT_EXPR
ALTER_WITH DELETE_WHERE SELECT_LIMIT
APPLY DROP SELECT_TABLE
ASCII_OUTPUT DROP_AGGREGATE SELECT_WHERE
BEGIN DROP_COLUMNFAMILY TEXT_OUTPUT
BLOB_INPUT DROP_FUNCTION TIMESTAMP_INPUT
BOOLEAN_INPUT DROP_INDEX TIMESTAMP_OUTPUT
COMPOUND_PRIMARY_KEYS DROP_KEYSPACE TIME_INPUT
CREATE DROP_ROLE TRUNCATE
CREATE_AGGREGATE DROP_TABLE TYPES
CREATE_COLUMNFAMILY DROP_USER UPDATE
CREATE_COLUMNFAMILY_OPTIONS GRANT UPDATE_COUNTERS
CREATE_COLUMNFAMILY_TYPES GRANT_ROLE UPDATE_SET
CREATE_FUNCTION INSERT UPDATE_USING
CREATE_INDEX INT_INPUT UPDATE_WHERE
CREATE_KEYSPACE LIST USE
CREATE_ROLE LIST_PERMISSIONS UUID_INPUT
CREATE_TABLE LIST_ROLES
CREATE_TABLE_OPTIONS LIST_USERS
您会注意到列出的帮助主题与实际的命令语法略有不同。 CREATE_TABLE帮助主题描述了如何使用语法> CREATE TABLE …,例如。
要获取有关特定命令的其他文档,请键入HELP 。 许多cqlsh命令可以在没有参数的情况下使用,在这种情况下,它们会打印出当前设置。 示例包括CONSISTENCY,EXPAND和PAGING。
在cqlsh中描述环境
连接到Cassandra实例测试集群后,如果您正在使用二进制发行版,则会设置空键空间或Cassandra数据库供您测试。
要了解您正在使用的当前群集,请键入:
cqlsh> DESCRIBE CLUSTER;
Cluster: Test Cluster
Partitioner: Murmur3Partitioner
...
对于3.0及更高版本,此命令还会打印出群集中每个节点拥有的令牌范围列表,为简洁起见,此处省略了这些令牌范围。
要查看群集中可用的键空间,请发出以下命令:
cqlsh> DESCRIBE KEYSPACES;
system_auth system_distributed system_schema
system system_traces
最初,此列表将包含多个系统键空间。 一旦创建了自己的键空间,它们也会被显示出来。 系统密钥空间由Cassandra内部管理,不适合我们放入数据。 这样,这些键空间类似于Microsoft SQL Server中的主数据库和临时数据库。 Cassandra使用这些键空间来存储模式,跟踪和安全信息。 我们将在第6章中了解有关这些键空间的更多信息。
您可以使用以下命令来了解正在使用的客户端,服务器和协议版本
cqlsh> SHOW VERSION;
[cqlsh 5.0.1 | Cassandra 3.0.0 | CQL spec 3.3.1 | Native protocol v4]
您可能已经注意到,当cqlsh启动时会打印出此版本信息。 您可以使用其他各种命令进行实验。 现在,让我们将一些数据添加到数据库并再次将其取回。
在cqlsh中创建一个Keyspace和表
Cassandra键空间有点像关系数据库。 它定义了一个或多个表或“列族”。当你在没有指定键空间的情况下启动cqlsh时,提示符如下所示:cqlsh>,没有指定键空间。
让我们创建自己的键空间,这样我们就可以将数据写入。 在创建键空间时,有一些必需的选项。 要浏览这些选项,我们可以使用命令HELP CREATE_KEYSPACE,但我们将使用cqlsh的有用命令完成功能。 键入以下内容,然后单击Tab键:
cqlsh> CREATE KEYSPACE my_keyspace WITH
当你点击Tab键时,cqlsh开始完成我们命令的语法:
cqlsh> CREATE KEYSPACE my_keyspace WITH replication = {'class': '
这告诉我们,为了指定密钥空间,我们还需要指定复制策略。 再次让我们看看我们有哪些选项:
cqlsh> CREATE KEYSPACE my_keyspace WITH replication = {'class': '
NetworkTopologyStrategy SimpleStrategy
OldNetworkTopologyStrategy
现在cqlsh给了我们三种策略可供选择。 我们将在第6章中详细了解这些策略。现在,我们将通过键入名称来选择SimpleStrategy。
cqlsh> CREATE KEYSPACE my_keyspace WITH replication = {'class':
'SimpleStrategy', 'replication_factor':
我们提出的下一个选项是复制因子。 对于简单策略,这表示将写入此密钥空间中的数据的节点数。 对于生产部署,我们希望将数据的副本存储在多个节点上,但由于我们目前只运行单个节点,因此我们会要求提供单个副本。 让我们再次指定值“1”和Tab:
cqlsh> CREATE KEYSPACE my_keyspace WITH replication = {'class':
'SimpleStrategy', 'replication_factor': 1};
我们看到cqlsh现在添加了一个结束括号,表示我们已经完成了所有必需的选项。 让我们用分号完成我们的命令并返回,我们的键空间将被创建。
对于生产密钥空间,我们可能永远不会希望将值1用作复制因子。 根据所选的复制策略,还有其他创建键空间的选项。 命令完成功能将介绍不同的选项。
让我们使用DESCRIBE KEYSPACE命令查看我们的键空间:
cqlsh> DESCRIBE KEYSPACE my_keyspace
CREATE KEYSPACE my_keyspace WITH replication = {'class':
'SimpleStrategy', 'replication_factor': '1'} AND
durable_writes = true;
我们看到该表是使用SimpleStrategy创建的,复制因子为1,持久写入。 请注意,我们的键空间的描述与我们用于创建它的语法大致相同,还有一个我们未指定的附加选项:durable_writes = true。 现在不要担心这些设置; 我们稍后会详细介绍它们。
创建自己的密钥空间后,可以通过键入以下命令切换到shell中:
cqlsh> USE my_keyspace;
cqlsh:my_keyspace>
请注意,提示已更改为表示我们正在使用键空间。
您可能想知道为什么我们选择在“snake case”(my_keyspace)中命名我们的键空间而不是“camel case”(MyKeyspace),这对于使用Java和其他语言的开发人员来说是熟悉的。
事实证明,Cassandra自然地将键空间,表格和列名称处理为小写。 当您以混合大小写形式输入名称时,Cassandra将它们全部存储为小写。
可以通过用双引号括起您的名字来覆盖此行为(例如,CREATE KEYSPACE“MyKeyspace”…)。 然而,使用蛇壳比使用谷物更容易。
现在我们有了一个键空间,我们可以在键空间中创建一个表。 要在cqlsh中执行此操作,请使用以下命令:
cqlsh:my_keyspace> CREATE TABLE user ( first_name text ,
last_name text, PRIMARY KEY (first_name)) ;
这将在我们当前的键空间中创建一个名为“user”的新表,其中包含两列,用于存储类型为text的名字和姓氏。 text和varchar类型是同义词,用于存储字符串。 我们已将first_name列指定为主键,并采用其他表选项的默认值。
我们也可以通过使用语法CREATE TABLE my_keyspace.user(…来创建这个表而不切换到我们的键空间。
我们可以使用cqlsh来获取我们刚刚使用DESCRIBE TABLE命令创建的表的描述:
cqlsh:my_keyspace> DESCRIBE TABLE user;
CREATE TABLE my_keyspace.user (
first_name text PRIMARY KEY,
last_name text
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.
SizeTieredCompactionStrategy', 'max_threshold': '32',
'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class':
'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
您会注意到cqlsh打印了我们刚刚输入的CREATE TABLE命令的格式良好的版本,但也包含了我们未指定的所有可用表选项的值。 这些值是默认值,因为我们没有指定它们。 我们稍后会担心这些设置。 目前,我们已经足够开始了。
在cqlsh中写和读取数据
现在我们有了一个键空间和一个表,我们会将一些数据写入数据库并再次将其读回。 在这一点上可以不知道发生了什么。 我们稍后将深入了解Cassandra的数据模型。 现在,你有一个密钥空间(数据库),它有一个表,它保存列,数据存储的原子单元。
要写入值,请使用INSERT命令:
cqlsh:my_keyspace> INSERT INTO user (first_name, last_name )
VALUES ('Bill', 'Nguyen');
在这里,我们创建了一个新行,其中包含两个用于键Bill的列,用于存储一组相关值。 列名是first_name和last_name。 我们可以使用SELECT COUNT命令来确保写入行:
cqlsh:my_keyspace> SELECT COUNT (*) FROM user;
count
-------
1
(1 rows)
既然我们知道数据存在,那么让我们使用SELECT命令读取它:
cqlsh:my_keyspace> SELECT * FROM user WHERE first_name='Bill';
first_name | last_name
------------+-----------
Bill | Nguyen
(1 rows)
在此命令中,我们请求返回与主键Bill匹配的行,包括所有列。 您可以使用DELETE命令删除列。 这里我们将删除Bill行键的last_name列:
cqlsh:my_keyspace> DELETE last_name FROM USER WHERE
first_name='Bill';
为了确保删除它,我们可以再次查询:
cqlsh:my_keyspace> SELECT * FROM user WHERE first_name='Bill';
first_name | last_name
------------+-----------
Bill | null
(1 rows)
现在我们将通过删除整行来清理自己。 它是相同的命令,但我们没有指定列名:
cqlsh:my_keyspace> DELETE FROM USER WHERE first_name='Bill';
为了确保删除它,我们可以再次查询:
cqlsh:my_keyspace> SELECT * FROM user WHERE first_name='Bill';
first_name | last_name
------------+-----------
(0 rows)
如果我们真的想要自己清理,我们可以使用TRUNCATE命令从表中删除所有数据,甚至可以使用DROP TABLE命令删除表模式。
cqlsh:my_keyspace> TRUNCATE user;
cqlsh:my_keyspace> DROP TABLE user;
既然您已经使用了cqlsh一段时间了,您可能已经注意到可以使用向上和向下箭头键浏览先前执行的命令。 此历史记录存储在名为cqlsh_history的文件中,该文件位于主目录中名为.cassandra的隐藏目录中。 这就像你的bash shell历史一样,按照Cassandra执行它们的顺序在纯文本文件中列出命令。太好了!
总结
现在你应该启动并运行Cassandra安装。 您已经使用cqlsh客户端来插入和检索一些数据,并且您已准备好退后一步,在真正深入细节之前了解Cassandra的全貌。