功能差异:Amazon Keyspaces 与 Apache Cassandra - Amazon Keyspaces(Apache Cassandra 兼容)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

功能差异:Amazon Keyspaces 与 Apache Cassandra

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

Apache Cassandra API、操作和数据类型

Amazon Keyspaces 支持所有常用的 Cassandra 数据面板操作,例如创建键空间和表、读取数据和写入数据。要查看当前支持的项,请参阅Amazon Keyspaces 中支持的 Cassandra API、操作、函数和数据类型

异步创建与删除键空间和表

Amazon Keyspaces 以异步方式执行数据定义语言 (DDL) 操作,例如创建和删除键空间和表。要了解如何监控资源的创建状态,请参阅在 Amazon Keyspaces 中创建键空间在 Amazon Keyspaces 中创建表。有关 CQL 语言参考中的 DDL 语句列表,请参阅Amazon Keyspaces 中的 DDL 语句(数据定义语言)

身份验证和授权

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

批处理

Amazon Keyspaces 支持未记录的批处理命令,批处理中最多包含 30 条命令。批处理中仅允许无条件的 INSERTUPDATEDELETE 命令。不支持记录的批处理。

集群配置

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

连接

您可以使用现有的 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 个请求。有关连接最佳实践的更多信息,请参阅客户端驱动程序与 Amazon Keyspaces(Apache Cassandra 兼容)的连接

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

IN 关键字

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

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

CQL 查询吞吐量调整

Amazon Keyspace 支持每个 TCP 连接每秒最多 3000 次 CQL 查询,但对驱动程序可建立的连接数没有限制。

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

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

FROZEN 集合

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

默认情况下,Amazon Keyspaces 支持嵌套最多五个级别的冻结集合。有关更多信息,请参阅Amazon Keyspaces 服务限额

在 Amazon Keyspaces 中,顶级集合不能为空。嵌套集合可以为空。

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

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

有关冻结集合的更多信息,请参阅集合类型

轻量级事务

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

负载均衡

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

分页

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

分区器

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

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

预准备语句

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

范围删除

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

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

系统表

Amazon Keyspaces 会填充 Apache 2.0 开源 Cassandra 驱动程序所需的系统表。对客户端可见的系统表包含经过身份验证的用户所特有的信息。系统表完全由 Amazon Keyspaces 控制,并且是只读的。

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

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

时间戳

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

只有在为表开启客户端时间戳时,USING TIMESTAMP 子句和 WRITETIME 功能才可以使用。要了解有关 Amazon Keyspaces 中的客户端时间戳的更多信息,请参阅在 Amazon Keyspaces 中使用客户端时间戳