

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

# 功能差异：Amazon Keyspaces 与 Apache Cassandra
<a name="functional-differences"></a>

Apache Cassandra 与 Amazon Keyspaces 之间的功能差异如下。

**Topics**
+ [Apache Cassandra APIs、操作和数据类型](#functional-differences.cassandra-apis)
+ [异步创建与删除键空间和表](#functional-differences.table-keyspace-management)
+ [身份验证和授权](#functional-differences.auth)
+ [Batch](#functional-differences.batch)
+ [更改数据捕获 (CDC)](#functional-differences.cdc)
+ [集群配置](#functional-differences.cluster-config)
+ [Connections](#functional-differences.connections)
+ [`IN` 关键字](#functional-differences.IN-keyword)
+ [`FROZEN` 集合](#functional-differences.frozen-collections)
+ [轻量级事务](#functional-differences.light-transactions)
+ [负载均衡](#functional-differences.load-balancing)
+ [分页](#functional-differences.paging)
+ [分区器](#functional-differences.partitioners)
+ [预准备语句](#functional-differences.prepared-statements)
+ [范围删除](#functional-differences.range-delete)
+ [系统表](#functional-differences.system-tables)
+ [时间戳](#functional-differences.timestamps)
+ [用户定义的类型 (UDTs)](#functional-differences.UDTs)

## Apache Cassandra APIs、操作和数据类型
<a name="functional-differences.cassandra-apis"></a>

Amazon Keyspaces 支持所有常用的 Cassandra 数据面板操作，例如创建键空间和表、读取数据和写入数据。要查看当前支持的项，请参阅[支持 Cassandra APIs、操作、函数和数据类型](cassandra-apis.md)。

## 异步创建与删除键空间和表
<a name="functional-differences.table-keyspace-management"></a>

Amazon Keyspaces 执行数据定义语言 (DDL) 操作，例如异步创建和删除密钥空间、表和类型。要了解如何监控资源的创建状态，请参阅[在 Amazon Keyspaces 中查看键空间的创建状态](keyspaces-create.md)和[在 Amazon Keyspaces 中查看表的创建状态](tables-create.md)。有关 CQL 语言参考中的 DDL 语句列表，请参阅[Amazon Keyspaces 中的 DDL 语句（数据定义语言）](cql.ddl.md)。

## 身份验证和授权
<a name="functional-differences.auth"></a>

 Amazon Keyspaces（适用于 Apache Cassandra）使用 AWS Identity and Access Management (IAM) 进行用户身份验证和授权，并支持与 Apache Cassandra 等效的授权策略。因此，Amazon Keyspaces 不支持 Apache Cassandra 的安全配置命令。

## Batch
<a name="functional-differences.batch"></a>

Amazon Keyspaces 支持以下批处理命令：
+ **已记录的批处理**-每批最多支持 100 个命令。
+ **未记录批处理**-每批最多支持 30 个命令。

 批处理中只允许**INSERT****UPDATE**、或**DELETE**命令。

## 更改数据捕获 (CDC)
<a name="functional-differences.cdc"></a>

在 Apache Cassandra 中，变更数据捕获 (CDC) 会将捕获表更新的提交日志段复制到节点上的指定目录。CDC 日志中的每条更改记录都可能包含跨多个密钥空间和表格的更新。更新或删除行时，Apache Cassandra CDC 日志仅显示修改后的列。该日志不包括更改前数据的先前状态。要了解数据修改的全部细节，您需要使用特定的 Cassandra 工具对这些日志进行反序列化。

使用 Amazon Keyspaces CDC 流，您可以选择 CDC 数据流为每行收集的信息类型。默认情况下，Amazon Keyspaces CDC 流会捕获更改发生前后的行版本。Amazon Keyspaces CDC 在表级别提供经过重复数据删除和已排序的变更记录。

[在 Amazon Keyspaces 中，每个 CDC 流都是一个 AWS 带有亚马逊资源名称 (ARN) 的资源，您的应用程序可以使用其中一个可用的终端节点使用亚马逊密钥空间 CDC API 使用亚马逊密钥空间 CDC 数据流。](CDC_access-endpoints.md)

有关 Amazon Keyspaces CDC 的更多信息，请参阅。[在 Amazon Keyspaces 中处理变更数据捕获 (CDC) 流](cdc.md)

## 集群配置
<a name="functional-differences.cluster-config"></a>

Amazon Keyspaces 是无服务器的，因此无需配置集群、主机或 Java 虚拟机 (JVMs)。Cassandra 的压缩、缓存、垃圾回收和 bloom 筛选设置不适用于 Amazon Keyspaces，这些设置在指定后将被忽略。

## Connections
<a name="functional-differences.connections"></a>

您可以使用现有的 Cassandra 驱动程序与 Amazon Keyspaces 通信，但需要对驱动程序进行不同的配置。Amazon Keyspace 支持每个 TCP 连接每秒最多 3000 次 CQL 查询，但对驱动程序可建立的连接数没有限制。

大多数开源 Cassandra 驱动程序都会建立一个连接到 Cassandra 的连接池，并在该连接池上对查询进行负载均衡。Amazon Keyspaces 向驱动程序公开 9 个对等 IP 地址，而大多数驱动程序的默认行为是与每个对等 IP 地址建立单一连接。因此，使用默认设置的驱动程序的最大 CQL 查询吞吐量将是每秒 27000 次 CQL 查询。

要增大此数字，我们建议增加驱动程序在其连接池中维护的每个 IP 地址的连接数。例如，如果将每个 IP 地址的最大连接数设置为 2，则将使驱动程序的最大吞吐量增加一倍，达到每秒 54000 次 CQL 查询。

作为最佳实践，我们建议将驱动程序配置为每个连接每秒使用 500 个 CQL 查询，以减少开销并改善分配。在这种情况下，每秒 18000 次 CQL 查询需要 36 个连接。配置驱动程序，在 9 个端点上设置 4 个连接，这样可以实现 36 个连接，每秒执行 500 个请求。有关连接最佳实践的更多信息，请参阅[优化无服务器环境的客户端驱动程序连接](connections.md)。

与 VPC 端点连接时，可用的端点可能较少。这意味着您必须增加驱动程序配置中的连接数量。有关 VPC 连接最佳实践的更多信息，请参阅[如何在 Amazon Keyspaces 中通过 VPC 端点配置连接](connections.md#connections.VPCendpoints)。

## `IN` 关键字
<a name="functional-differences.IN-keyword"></a>

Amazon Keyspaces 支持 `SELECT` 语句中的 `IN` 关键字。`UPDATE` 和 `DELETE` 不支持 `IN`。在 `SELECT` 语句中使用 `IN` 关键字时，查询结果将按 `SELECT` 语句中的键的显示顺序返回。在 Cassandra 中，结果按字典顺序排列。

使用 ` ORDER BY` 时，不支持在禁用分页的情况下进行完全重新排序，结果排列在一个页面内。`IN` 关键字不支持切片查询。`IN` 关键字不支持 `TOKENS`。Amazon Keyspaces 通过创建子查询来处理使用 `IN` 关键字的查询。对于每秒每个 TCP 连接 3000 次 CQL 查询这一限制，每个子查询计为一个连接。有关更多信息，请参阅 [在 Amazon Keyspaces 的查询中将 `IN` 运算符与 `SELECT` 语句配合使用](in.select.md)。

## `FROZEN` 集合
<a name="functional-differences.frozen-collections"></a>

Cassandra 中的 `FROZEN` 关键字会将集合数据类型的多个组件序列化为单个不可变值，该值被视为一个 `BLOB`。`INSERT` 和 `UPDATE` 语句会覆盖整个集合。

默认情况下，Amazon Keyspaces 支持冻结收藏集的最多 8 个嵌套级别。有关更多信息，请参阅 [Amazon Keyspaces 服务限额](quotas.md#table)。

Amazon Keyspaces 不支持在条件性 `UPDATE` 或 `SELECT` 语句中使用整个冻结集合的不等式比较。在 Amazon Keyspaces 中，集合和冻结集合的行为是相同的。

当您使用带有客户端时间戳的冻结集合时，如果写入操作的时间戳与某个未过期或未被删除的现有列的时间戳相同，则 Amazon Keyspaces 不会进行比较。相反，它会让服务器确定最新的写入者，并以最新的写入者为准。

有关冻结集合的更多信息，请参阅[集合类型](cql.elements.md#cql.data-types.collection)。

## 轻量级事务
<a name="functional-differences.light-transactions"></a>

Amazon Keyspaces（适用于 Apache Cassandra）完全支持在、和**DELETE**命令上进行比较和设置功能 **INSERT****UPDATE**，这些功能在 Apache Cassandra 中被称为*轻量级事务* (LWTs)。作为一种无服务器产品，Amazon Keyspaces（Apache Cassandra 兼容）可以提供任何规模下（包括适用于轻量级事务）的一致性能。利用 Amazon Keyspaces，使用轻量级事务不会造成性能损失。

## 负载均衡
<a name="functional-differences.load-balancing"></a>

`system.peers` 表条目对应着 Amazon Keyspaces 负载均衡器。要获得最佳结果，我们建议使用轮询负载均衡策略并调整每个 IP 的连接数以满足应用程序需求。

## 分页
<a name="functional-differences.paging"></a>

Amazon Keyspaces 根据自己为处理请求而读取的行数（而不是结果中返回的行数）对结果进行分页。因此，某些页面包含的行数可能少于您针对筛选的查询在 PAGE SIZE 中指定的行数。此外，Amazon Keyspaces 会在读取 1 MB 的数据后自动对结果进行分页，从而为客户提供稳定的毫秒级读取性能。有关更多信息，请参阅 [对 Amazon Keyspaces 中的结果进行分页](paginating-results.md)。

在包含静态列的表中，Apache Cassandra 和 Amazon Keyspaces 均会在多页查询中每页的开头建立分区的静态列值。当表的数据行较大时，由于 Amazon Keyspaces 的分页行为，范围读取操作结果为 Amazon Keyspaces 返回的页面数可能高于 Apache Cassandra。因此，在 Amazon Keyspaces 中，对静态列的并行更新更有可能导致静态列值在范围读取结果集的不同页面中存在不同。

## 分区器
<a name="functional-differences.partitioners"></a>

Amazon Keyspaces 中的默认分区器是与 Cassandra 兼容的 `Murmur3Partitioner`。此外，您可以选择使用 Amazon Keyspaces `DefaultPartitioner` 或与 Cassandra 兼容的 `RandomPartitioner`。

使用 Amazon Keyspaces，您可以安全地更改账户的分区器，无需重新加载 Amazon Keyspaces 数据。配置更改完成后（大约需要 10 分钟），客户端就会在下次连接时自动看到新的分区器设置。有关更多信息，请参阅 [使用 Amazon Keyspaces 中的分区程序](working-with-partitioners.md)。

## 预准备语句
<a name="functional-differences.prepared-statements"></a>

Amazon Keyspaces 支持使用预准备语句执行数据操作语言 (DML) 操作，例如读取和写入数据。Amazon Keyspaces 目前不支持使用预准备语句执行数据定义语言 (DDL) 操作，例如如创建表和键空间）。DDL 操作必须在预准备语句范围之外执行。

## 范围删除
<a name="functional-differences.range-delete"></a>

**重要**  
从 2026 年 7 月 1 日起，范围删除操作将从同步处理过渡到异步处理。更改完成后，成功响应确认您的删除请求已被接受，但删除可能仍在进行中。要验证删除是否已完成，请查询指定范围内的项目。当查询未返回任何结果时，删除即告完成。

Amazon Keyspaces 支持删除一个范围内的行。范围是分区内的一组连续的行。您可以使用 WHERE 子句在 DELETE 操作中指定一个范围。您可以将范围指定为整个分区。

此外，您可以使用关系运算符（例如“>”、“<”），或者通过包含分区键并省略一个或多个集群列，将范围指定为一个分区内的连续行的子集。借助 Amazon Keyspaces，您通过一次操作最多可以删除一个范围内的 1000 行。

范围删除不是孤立的。在范围删除过程中，其他操作可以看到单个行的删除。

## 系统表
<a name="functional-differences.system-tables"></a>

Amazon Keyspaces 会填充 Apache 2.0 开源 Cassandra 驱动程序所需的系统表。对客户端可见的系统表包含经过身份验证的用户所特有的信息。系统表完全由 Amazon Keyspaces 控制，并且是只读的。有关更多信息，请参阅 [Amazon Keyspaces 中的系统键空间](working-with-keyspaces.md)。

用户需要对系统表具有只读访问权限，您可以使用 IAM 访问策略对其进行控制。有关更多信息，请参阅 [使用策略管理访问](security-iam.md#security_iam_access-manage)。根据您是使用 AWS SDK 还是通过 Cassandra 驱动程序和开发者工具调用 Cassandra 查询语言 (CQL) API，您必须以不同的方式为系统表定义基于标签的访问控制策略。有关针对系统表实现基于标签的访问控制的更多信息，请参阅[基于标签的 Amazon Keyspaces 资源访问](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-tags)。

如果您使用 [Amazon VPC 端点](vpc-endpoints.md)访问 Amazon Keyspaces，则会在 `system.peers` 表中看到 Amazon Keyspaces 有权查看的每个 Amazon VPC 端点的条目。因此，您的 Cassandra 驱动程序可能会发出关于 `system.peers` 表中的控制节点本身的[警告消息](vpc-endpoints.md#vpc_troubleshooting)。您可以放心地忽略这一警告。

## 时间戳
<a name="functional-differences.timestamps"></a>

在 Amazon Keyspaces 中，与 Apache Cassandra 中的默认时间戳兼容的单元格级时间戳是一项可选功能。

只有在为表开启客户端时间戳时，`USING TIMESTAMP` 子句和 `WRITETIME` 功能才可以使用。要了解有关 Amazon Keyspaces 中的客户端时间戳的更多信息，请参阅[Amazon Keyspaces 中的客户端时间戳](client-side-timestamps.md)。

## 用户定义的类型 (UDTs)
<a name="functional-differences.UDTs"></a>

Amazon Keyspaces 不支持 UDTs 不等式运算符。

要了解如何 UDTs 在 Amazon Keyspaces 中使用，请参阅。[Amazon Keys UDTs paces 中的用户定义类型 ()](udts.md)

要查看每个密钥空间支持 UDTs 多少密钥空间、支持的嵌套级别以及与之相关的其他默认值和配额 UDTs，请参阅。[Amazon Keyspaces 中用户定义类型 (UDTs) 的配额和默认值](quotas.md#quotas-udts)