如何在Cassandra中创建键空间?详细操作指南

2021年11月20日19:17:57 发表评论 963 次浏览

Cassandra创建键空间教程介绍

Cassandra 是用于管理 NoSQL 数据库的软件。组织使用它以分布式方式处理大量数据。由于高度可用和容错,该软件的受欢迎程度有所增加。

为了实现这一点,Cassandra 从主节点或命名节点的概念转移到对称 P2P 分布式节点。集群中的每个节点都有一个或多个包含数据的键空间。

如何在Cassandra中创建键空间在本指南中,了解什么是键空间、它的组成部分以及如何创建、更改和删除键空间。

先决条件

  • Cassandra安装在你的系统上
  • 访问终端命令行
  • 运行 CQL 命令的必要权限

什么是 Cassandra 中的键空间?

键空间是Cassandra 中的数据容器,类似于关系数据库管理系统 (RDMBS) 中的数据库。一个集群的每个应用程序有一个键空间,根据需求和系统使用情况而定。键空间是完全独立的实体,它们包含的数据彼此无关。

在 Cassandra 集群中,键空间是最外层的对象,它决定了数据在节点上的复制方式。键空间由称为列族的核心对象(类似于 RDBMS 中的表)、按键索引的行、数据类型、数据中心意识、复制因子和键空间策略组成。

注意:通过阅读什么是 NoSQL了解更多关于非关系型数据库、它们的工作原理以及它们的核心特性。

Cassandra 键空间组件

Cassandra如何创建键空间?创建键空间时需要指定一些基本的键空间组件。这些组件是:

复制策略

定义键空间时,复制策略指定将放置副本的节点。通过使用多个节点来放置副本,你可以实现容错、高可用性和可靠性。

有两种可能的策略:

  1. 简单的策略。如果你不打算将集群部署到多个数据中心,请将此策略用于测试和开发环境。复制因子适用于整个集群。分区器决定在节点上放置第一个副本的位置。然后,其他副本顺时针分布在下一个节点上,而不管数据中心或位置。
  2. 网络拓扑策略。当你需要将集群部署到多个数据中心时,此策略适用。但是,你甚至可以在单个数据中心中使用它,以便你以后可以扩展。网络拓扑策略适用于生产和开发。它倾向于将副本放置在不在同一机架中的节点上,以避免在一个机架出现故障时出现问题。通过使用此选项,每个数据中心都可以有一个单独的复制因子。

复制因子

此设置定义要在每个节点上存储一行的多少副本。

每个数据中心最少应该有两个副本。这意味着一个节点的故障不会影响复制组的运行。因此,推荐的设置是在不同的节点上每行有三个副本,以达到令人满意的容错性。

经验法则是保持复制因子与节点数相同。

Cassandra创建键空间教程:基本键空间语法

你可以创建具有不同复制设置的键空间。下面是创建键空间的基本语法:

CREATE KEYSPACE keypsace_name WITH replication = {properties};

这些属性包括不同的设置,例如复制策略、因子或持久写入。

注意: CQL 命令以分号 ( ;)结尾。如果在查询结束时不使用分号,系统将等待其他输入。

使用 Cqlsh 创建键空间

如何在Cassandra中创建键空间?要创建键空间,请启动 CQL shell:

cqlsh

然后,按照基本语法,创建具有所需名称和复制设置的键空间。

在这种情况下,我们将使用SimpleStrategyreplication_factor 3创建test_keyspace

CREATE KEYSPACE test_keyspace
WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
如何在Cassandra中创建键空间?详细操作指南

当你不打算扩展到多个数据中心时,请使用上面的示例。此外,如果你只有一个节点并且你使用 Cassandra 进行测试,则可以将replication_factor设置为1

对于生产环境和多个 数据中心,使用网络拓扑复制策略创建一个keyspace。

为此,请输入:

CREATE KEYSPACE keyspace_network_topology
WITH replication = {'class':'NetworkTopologyStrategy', 'datacenter1' : 3};
如何在Cassandra中创建键空间?详细操作指南

默认数据中心名称是datacenter1。要检查数据中心的名称,请关闭 CQL shell 并使用nodetool

nodetool status
如何在Cassandra中创建键空间?详细操作指南

如果你有多个数据中心,请在查询中将它们全部列出,并带有各自的复制因子。

例如,对两个数据中心的查询如下所示:

CREATE KEYSPACE keyspace_network_topology
WITH replication = {'class':'NetworkTopologyStrategy', 'datacenter1' : 3, 'datacenter2' : 3};

验证键空间

Cassandra如何创建键空间?由于成功创建键空间的输出中没有响应,请使用此命令验证键空间是否在列表中:

DESCRIBE KEYSPACES;
如何在Cassandra中创建键空间?详细操作指南

系统返回所有可用 Cassandra 键空间的列表。我们突出显示了我们在上面的示例中创建的两个键空间。Cassandra 安装附带了几个默认的键空间。

禁用持久写入

如何在Cassandra中创建键空间?在 Cassandra 中,Durable_writes配置默认为true。你可以禁用它,但仅限于 NetworkTopologyStrategy。此选项告诉 Cassandra 是否应该使用commitlog在选定的键空间中进行更新。

当你在使用 SimpleStrategy 创建键空间时尝试禁用Durable_writes时,你会收到警告不要这样做。原因是如果你没有将数据从memtable同步到sstable,你可能会丢失数据,并且你的数据中心出现故障。

要在创建键空间时禁用持久写入,请输入以下查询:

CREATE KEYSPACE keyspace_durwrites
WITH replication = {'class':'NetworkTopologyStrategy', 'datacenter1' : 3}
AND DURABLE_WRITES = false;

Cassandra创建键空间教程:验证持久写入

你可以通过描述键空间来检查在创建键空间期间使用的查询。该durable_writes部分也出现:

DESCRIBE keyspace_durwrites
如何在Cassandra中创建键空间?详细操作指南

要检查所有键空间的持久写入设置,请查询system_schema

SELECT * FROM system_schema.keyspaces;

输出显示所有键空间及其设置,包括Durable_writes

如何在Cassandra中创建键空间?详细操作指南

使用键空间

Cassandra如何创建键空间?要在 Cassandra 中选择一个键空间并对其执行操作,请使用关键字USE

语法是:

USE keyspace_name

例如:

USE keyspace_durwrites;
如何在Cassandra中创建键空间?详细操作指南

CQL shell 切换到你指定的键空间的名称。要更改当前键空间,请使用具有另一个名称的相同命令。

注意:每当你在 Cassandra 中创建表时,你首先要定义键空间。

改变键空间

如何在Cassandra中创建键空间?创建键空间后,你可以使用关键字更改配置ALTER

唯一不能更改的是键空间名称。除此之外,你可以更改复制策略、复制因子和持久写入。

要更改键空间,请遵循与创建时相同的语法,但使用ALTER代替CREATE。更改你想要的值。

例如:

ALTER KEYSPACE keyspace_durwrites
WITH replication = {'class':'NetworkTopologyStrategy', 'datacenter1' : 2}
AND DURABLE_WRITES = true;

要验证更改是否生效,请使用DESCRIBE 关键字:

如何在Cassandra中创建键空间?详细操作指南

上图显示了更改前后的键空间配置。

删除或删除键空间

Cassandra如何创建键空间:如果删除键空间,它将从系统中删除。该DROP 关键字从键空间中删除所有列族,以及索引和数据类型。

要删除 Cassandra 中的键空间,请使用以下语法:

DROP keyspace_name;

例如:

DROP keyspace_durwrites;

要确保你删除了键空间,请使用DESCRIBE 查询。

注意:要更好地理解 Cassandra,请了解Cassandra 数据类型。

Cassandra创建键空间教程结论

如何在Cassandra中创建键空间?按照本指南中的步骤,你应该能够成功地在 Cassandra 中创建键空间。本指南中的示例向你展示了如何为不同的环境和不同的设置创建键空间。

我们还向你展示了如何在需要进行任何更改时更改和删除键空间

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: