

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Keyspaces（Apache Cassandra 兼容）
<a name="what-is-keyspaces"></a>

 Amazon Keyspaces（Apache Cassandra 兼容）是一种可扩展、高可用、托管式的 Apache Cassandra 兼容数据库服务。使用 Amazon Keyspaces，您无需预置、修补或管理服务器，也不需要安装、维护或操作软件。

Amazon Keyspaces 是一项无服务器服务，因此您只需为实际使用的资源付费，并且该服务会根据应用程序流量自动扩展和缩减表。您可以构建每秒可处理数千个请求且吞吐量和存储空间几乎无限的应用程序。

**注意**  
 Apache Cassandra 是一个开源宽列数据存储，设计为处理海量数据。有关更多信息，请参阅 [Apache Cassandra](http://cassandra.apache.org/)。

利用 Amazon Keyspaces，可以在 AWS 云中轻松迁移、运行和扩展 Cassandra 工作负载。只需在 AWS 管理控制台上单击几下或几行代码，您就可以在 Amazon Keyspaces 中创建密钥空间和表，而无需部署任何基础设施或安装软件。

借助 Amazon Keyspaces，您可以使用与当今相同的 Cassandra 应用程序代码和开发者工具 AWS 来运行现有的 Cassandra 工作负载。

借助 Github 上提供的[亚马逊密钥空间（适用于 Apache Cassandra）的定价计算器](https://aws-samples.github.io/sample-pricing-calculator-for-keyspaces/#cassandra)，您可以根据现有的 Apache Cassandra 工作负载估算亚马逊密钥空间的每月费用。输入您的 Cassandra 节点工具状态输出和 Amazon Keyspaces 的预期无服务器配置中的指标，以比较两种解决方案之间的直接成本。请注意，此计算器仅关注与您的现有 Cassandra 部署相比 Amazon Keyspaces 的运营成本。它不包括总拥有成本 (TCO) 因素，例如基础架构维护、运营开销或Cassandra的支持成本。

有关可用 AWS 区域 和终端节点的列表，请参阅 [Amazon Keyspaces 的服务终端节点](https://docs.aws.amazon.com/keyspaces/latest/devguide/programmatic.endpoints.html)。

我们建议您首先阅读以下部分：

**Topics**
+ [Amazon Keyspaces：工作原理](how-it-works.md)
+ [Amazon Keyspaces 使用案例](use-cases.md)
+ [什么是 Cassandra 查询语言 (CQL)？](what-is-cql.md)

# Amazon Keyspaces：工作原理
<a name="how-it-works"></a>

Amazon Keyspaces 消除了 Cassandra 的管理开销。要了解原因，不妨先从 Cassandra 架构开始，然后将其与 Amazon Keyspaces 进行比较。

**Topics**
+ [架构简析：Apache Cassandra 与 Amazon Keyspaces](#how-it-works.cassandra-arch)
+ [Cassandra 数据模型](#how-it-works.data-model)
+ [通过应用程序访问 Amazon Keyspaces](#how-it-works.keyspaces-arch.accessing)

## 架构简析：Apache Cassandra 与 Amazon Keyspaces
<a name="how-it-works.cassandra-arch"></a>

 传统的 Apache Cassandra 部署在由一个或多个节点组成的集群中。您负责管理各个节点，并随着集群的扩展添加和删除节点。

客户端程序通过连接到其中一个节点并发出 Cassandra 查询语言 (CQL) 语句，来访问 Cassandra。*CQL* 类似于 SQL，后者是关系数据库中常用的语言。虽然 Cassandra 并不是关系数据库，不过 CQL 提供了一个熟悉的界面，可用于查询和操作 Cassandra 中的数据。

下图显示了一个由四个节点构成的简单 Apache Cassandra 集群。

![\[Apache Cassandra 集群的图表，该集群包含 4 个节点并与客户端应用程序交互。\]](http://docs.aws.amazon.com/zh_cn/keyspaces/latest/devguide/images/keyspaces_cassandra-hi-level.png)


生产 Cassandra 部署可能由数百个节点构成，这些节点在一个或多个物理数据中心内的数百台物理计算机上运行。这会给应用程序开发人员带来运营负担，这些人员除了安装、维护和操作软件之外，还需要预置、修补和管理服务器。

使用 Amazon Keyspaces（Apache Cassandra 兼容），您无需预置、修补或管理服务器，因此可以专注于构建更好的应用程序。Amazon Keyspaces 提供两种读取和写入吞吐能力：按需和预置。您可以根据工作负载的可预测性和可变性选择表的吞吐容量模式，以优化读取和写入价格。

借助按需模式，您只需为您的应用程序实际执行的读取和写入付费。您无需事先指定表的吞吐能力。Amazon Keyspaces 几乎能在应用流量上升或下降时立即满足您的需求，因此对于流量不可预测的应用程序来说，它是一个不错的选择。

如果您的应用程序流量可预测，并且可以提前预测表的容量需求，那么预置容量模式可以帮助您优化吞吐量的价格。使用预置容量模式时，请指定您的应用程序预计每秒需要执行的读取和写入次数。您可以通过启用[自动扩展](https://docs.aws.amazon.com/keyspaces/latest/devguide/autoscaling.html)来自动增加和减少表的预置容量。

在以下情况下，您可以每天更改一次表的容量模式：您需要了解有关工作负载的流量模式的更多信息，或如果您预计流量会突增（例如，您预计会发生导致大量表流量的重大事件）。有关预置读取和写入容量的更多信息，请参阅[在 Amazon Keyspaces 中配置 read/write 容量模式](ReadWriteCapacityMode.md)。

Amazon Keyspaces（Apache Cassandra 兼容）将数据的三个副本存储在多个[可用区](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)中，以实现持久性和高可用性。此外，您可以从专为满足大多数安全敏感型组织的要求而打造的数据中心和网络架构中受益。在您创建新的 Amazon Keyspaces 表时，静态加密将自动启用，并且所有客户端连接都需要传输层安全性协议 (TLS)。其他 AWS 安全功能包括[监控[AWS Identity and Access Management](https://docs.aws.amazon.com/keyspaces/latest/devguide/security_iam_service-with-iam.html)](https://docs.aws.amazon.com/keyspaces/latest/devguide/monitoring.html)、和[虚拟私有云 (VPC) 端点](https://docs.aws.amazon.com/keyspaces/latest/devguide/vpc-endpoints.html)。有关所有可用安全功能的概述，请参阅[Amazon Keyspaces（Apache Cassandra 兼容）中的安全性](security.md)。

下图显示了 Amazon Keyspaces 的架构。

![\[与客户端应用程序交互的 Amazon Keyspaces 示意图。\]](http://docs.aws.amazon.com/zh_cn/keyspaces/latest/devguide/images/keyspaces-hi-level.png)


客户端程序通过连接到预先确定的端点（主机名和端口号）并发出 CQL 语句来访问 Amazon Keyspaces。有关可用端点的列表，请参阅[Amazon Keyspaces 的服务端点](programmatic.endpoints.md)。

## Cassandra 数据模型
<a name="how-it-works.data-model"></a>

业务案例数据的建模方式对于从 Amazon Keyspaces 实现最佳性能至关重要。较差的数据模型会显著地降低性能。

尽管 CQL 与 SQL 类似，但 Cassandra 后端与关系数据库后端存在明显的不同，必须采取不同的方法。下面是需要考虑的一些更重要的问题：

**存储**  
可以在表中直观地显示您的 Cassandra 数据，其中每行表示一条记录，每列表示该记录中的一个字段。

**表设计：查询优先**  
CQL 中没有 `JOIN`。因此，您应该根据数据的性质，以及需要如何访问数据来满足业务使用案例的要求，设计您的表。这可能会导致重复数据的逆规范化。您应该专门为特定的访问模式设计每个表。

**分区**  
 您的数据存储在磁盘分区中。存储数据的分区数以及数据在分区之间的分布方式由您的*分区键* 决定。分区键的定义方式会对查询的性能产生重大影响。有关最佳实践，请参阅[如何在 Amazon Keyspaces 中高效使用分区键](bp-partition-key-design.md)。

**主键**  
在 Cassandra 中，数据以键/值对的形式存储。每个 Cassandra 表必须有一个主键，这对于表中的每一行是唯一键。主键是一个必需的分区键与多个可选的聚类列的组合。组成主键的数据在表中的所有记录之间必须是唯一的。  
+ **分区键** - 主键的分区键部分是必需的，可确定数据存储在集群的哪个分区中。分区键可以是单个列，也可以是由两列或多个列组成的复合值。如果单列分区键会导致单个分区或极少数分区拥有大部分数据，从而承受大部分磁盘 I/O 操作，则可以使用复合分区键。
+ **聚类列** - 主键的可选聚类列部分决定如何在每个分区中聚类和排序数据。如果在主键中包含聚类列，则聚类列可以包含一列或多列。如果聚类列中有多列，则排序顺序由聚类列中列出的顺序从左到右确定。

有关 NoSQL 设计和 Amazon Keyspaces 的更多信息，请参阅 [NoSQL 设计的主要区别和设计原则](bp-general-nosql-design.md)。有关 Amazon Keyspaces 和数据建模的更多信息，请参阅[数据建模最佳实践：设计数据模型的建议](data-modeling.md)。

## 通过应用程序访问 Amazon Keyspaces
<a name="how-it-works.keyspaces-arch.accessing"></a>

Amazon Keyspaces（Apache Cassandra 兼容）实施 Apache Cassandra 查询语言 (CQL) API，因此您可以使用您已在使用的 CQL 和 Cassandra 驱动程序。要更新您的应用程序，只需更新您的 Cassandra 驱动程序或 `cqlsh` 配置以指向 Amazon Keyspaces 服务端点即可。有关所需凭证的更多信息，请参阅[为 Amazon Keyspaces 创建和配置 AWS 证书](access.credentials.md)。

**注意**  
为了帮助您入门，您可以在上的 Amazon Keyspaces end-to-end 代码示例存储库中找到使用各种 Cassandra 客户端驱动程序连接亚马逊密钥空间的代码示例。[GitHub](https://github.com/aws-samples/amazon-keyspaces-examples)

 考虑以下 Python 程序，该程序连接到 Cassandra 集群并查询表。

```
from cassandra.cluster import Cluster
#TLS/SSL configuration goes here

ksp = 'MyKeyspace'
tbl = 'WeatherData'

cluster = Cluster(['NNN.NNN.NNN.NNN'], port=NNNN)
session = cluster.connect(ksp)

session.execute('USE ' + ksp)

rows = session.execute('SELECT * FROM ' +  tbl)
for row in rows:
    print(row)
```

要对 Amazon Keyspaces 运行同一个程序，您需要：
+  **添加集群终端节点和端口：**例如，可以将主机替换为服务终端节点，例如端口号为 `9142` 的 `cassandra.us-east-1.amazonaws.com`。
+  **添加 TLS/SSL 配置**：有关使用 Cassandra 客户端 Python 驱动程序添加 TLS/SSL 配置以连接到 Amazon Keyspaces 的更多信息，请参阅。[使用 Cassandra Python 客户端驱动程序以编程方式访问 Amazon Keyspaces](using_python_driver.md)

# Amazon Keyspaces 使用案例
<a name="use-cases"></a>

下面列举您可以使用 Amazon Keyspaces 的一些方法：
+  **构建需要低延迟的应用程序** — 为需要延 single-digit-millisecond迟的应用程序高速处理数据，例如工业设备维护、交易监控、车队管理和路线优化。
+  **使用开源技术构建应用程序 — 使用开源** Cassandra APIs 和适用于各种编程语言（例如 Java、Python、Ruby、Microsoft .NET、Node.js、PHP、C\$1\$1、Perl 和 Go）的驱动程序构建应用程序。 AWS 有关代码示例，请参阅 [Amazon Keyspaces（Apache Cassandra 兼容）库和工具](examples-tools.md)。
+  **将您的 Cassandra 工作负载移动到云** – 自行管理 Cassandra 表非常耗时且成本高昂。借助 Amazon Keyspaces，您 AWS 云 无需管理基础设施即可在中设置、保护和扩展 Cassandra 表。有关更多信息，请参阅 [在 Amazon Keyspaces（Apache Cassandra 兼容）中管理无服务器资源](serverless_resource_management.md)。

# 什么是 Cassandra 查询语言 (CQL)？
<a name="what-is-cql"></a>

*Cassandra 查询语言* (CQL) 是与 Apache Cassandra 通信的主要语言。Amazon Keyspaces（Apache Cassandra 兼容）与 CQL 3.x API 兼容（向后兼容 2.x 版）。

在 CQL 中，数据存储在表、列和行中。在这方面，CQL 与结构化查询语言（SQL）相似。这些是 CQL 中的关键概念。
+ **CQL 元素** - CQL 的基本元素包括标识符、常量、术语和数据类型。
+ **数据定义语言 (DDL)**-DDL 语句用于管理数据结构，例如密钥空间和表，它们是 Amazon Keyspaces AWS 中的资源。DDL 语句是中的控制平面操作。 AWS
+ **数据操作语言（DML）**- DML 语句用于管理表中的数据。DML 语句用于选择、插入、更新和删除数据。这些是中的数据平面操作 AWS。
+ **内置函数** - Amazon Keyspaces 支持可在 CQL 语句中使用的各种内置标量函数。

有关 CQL 的更多信息，请参阅[Amazon Keyspaces（Apache Cassandra 兼容）的 CQL 语言参考](cql.md)。有关与 Apache Cassandra 之间的功能差异，请参阅[功能差异：Amazon Keyspaces 与 Apache Cassandra](functional-differences.md)。

要运行 CQL 查询，可以执行以下操作之一：
+ 在 AWS 管理控制台中使用 CQL 编辑器。
+ 使用 AWS CloudShell 和 [cql](programmatic.cqlsh.md#using_cqlsh) sh-expansion。
+ 使用 `cqlsh` 客户端。
+ 使用 Apache 2.0 许可的 Cassandra 客户端驱动程序。

除了 CQL 之外，您还可以使用和在 Amazon Keyspaces 中执行数据定义语言 (DDL) 操作。 AWS SDKs AWS Command Line Interface

有关使用这些方法访问 Amazon Keyspaces 的更多信息，请参阅[访问 Amazon Keyspaces（Apache Cassandra 兼容）](accessing.md)。