功能差异: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 APIs、操作和数据类型

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

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

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

身份验证和授权

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

批处理

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

集群配置

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

连接

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

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

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

作为最佳实践,我们建议将驱动程序配置为每个连接每秒使用 500 个CQL查询,以节省开销并改善分发。在这种情况下,计划每秒 18,000 个CQL查询需要 36 个连接。配置驱动程序,在 9 个端点上设置 4 个连接,这样可以实现 36 个连接,每秒执行 500 个请求。有关连接最佳实践的更多信息,请参阅优化无服务器环境的客户端驱动程序连接

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

IN 关键字

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

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

CQL查询吞吐量调整

Amazon Keyspaces 每秒最多支持每个TCP连接 3,000 个CQL查询,但对驱动程序可以建立的连接数量没有限制。

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

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

有关连接最佳实践的更多信息,请参阅优化无服务器环境的客户端驱动程序连接

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

FROZEN 集合

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

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

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

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

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

轻量级事务

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

负载均衡

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

分页

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

在包含静态列的表中,Apache Cassandra 和 Amazon Keyspaces 在多页查询中每页的开头都建立分区的静态列值。当表的数据行较大时,由于 Amazon Keyspaces 的分页行为,范围读取操作结果为 Amazon Keyspaces 返回的页面数可能高于 Apache Cassandra。因此,在 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 控制,并且是只读的。有关更多信息,请参阅 Amazon Keyspaces 中的系统密钥空间

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

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

时间戳

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

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