本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
功能差异:亚马逊 Keyspace 与 Apache Cassandra
以下是亚马逊密钥空间和Apache Cassandra之间的功能差异。
主题
Apache Cassandra API、操作和数据类型
Amazon Keyspaces 支持所有常用的 Cassandra 数据平面操作,例如创建密钥空间和表、读取数据和写入数据。要查看当前支持的项,请参阅亚马逊密钥空间中支持的 Cassandra API、操作、函数和数据类型。
异步创建和删除密钥空间和表
Amazon Keyspaces 异步执行数据定义语言 (DDL) 操作,例如创建和删除密钥空间和表。要了解如何监控资源的创建状态,请参阅在亚马逊密钥空间中创建密钥空间和在亚马逊Keyspaces 中创建表。有关 CQL 语言参考中的 DDL 语句列表,请参见。Amazon Keyspaces 中的 DDL 语句(数据定义语言)
身份验证和授权
亚马逊密钥空间(适用于 Apache Cassandra)使用 Amazon Identity and Access Management (IAM) 进行用户身份验证和授权,并支持与 Apache Cassandra 等效的授权策略。因此,亚马逊密钥空间不支持 Apache Cassandra 的安全配置命令。
Batch
Amazon Keyspaces 支持未记录的批处理命令,批处理中最多有 30 条命令。批处理中仅允许无条件的 INSERT、UPDATE 或 DELETE 命令。不支持记录的批处理。
集群配置
Amazon Keyspaces 是无服务器的,因此无需配置集群、主机或 Java 虚拟机 (JVM)。Cassandra 的压缩、压缩、缓存、垃圾收集和布隆过滤设置不适用于 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 终端节点连接时,可用的终端节点可能会减少,这意味着您必须增加驱动程序配置中的连接数量。有关更多信息,请参阅客户端驱动程序与 Amazon Keyspaces (for Apache Cassandra):
IN
关键字
亚马逊密钥空间支持SELECT
声明中的IN
关键字。 IN
不支持UPDATE
和DELETE
。在SELECT
语句中使用IN
关键字时,查询结果将按语SELECT
句中键的显示顺序返回。在卡桑德拉中,结果按字典顺序排序。使用时
ORDER BY
,不支持禁用分页的完全重新排序,结果在页面内排序。IN
关键字不支持切片查询。 TOKENS
IN
关键字不支持。Amazon Keyspaces 通过创建子查询来处理使用IN
关键字的查询。每个 TCP 连接每秒 3,000 个 CQL 查询的上限算作连接。有关更多信息,请参阅在亚马逊密钥空间中使用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 查询。
轻量级交易
Amazon Keyspaces(适用于 Apache Cassandra)完全支持、和DELETE命令的比较和设置功能INSERT,UPDATE在 Apache Cassandra 中,这些功能被称为轻量级交易 (LWT)。作为无服务器产品,Amazon Keyspaces(适用于 Apache Cassandra)可在任何规模下提供稳定的性能,包括轻量级交易。使用 Amazon Keyspaces,使用轻量级交易不会降低性能。
负载均衡
system.peers
表条目对应于 Amazon Keyspaces 负载均衡器。为了获得最佳结果,我们建议使用循环负载平衡策略并调整每个 IP 的连接数以满足应用程序的需求。
分页
Amazon Keyspaces 根据处理请求时读取的行数(而不是结果集中返回的行数)对结果进行分页。因此,某些页面包含的行数可能少于您在 PAGE SIZE 中为筛选的查询指定的行数。此外,Amazon Keyspaces 在读取 1 MB 的数据后自动对结果进行分页,为客户提供稳定的个位数毫秒读取性能。有关更多信息,请参阅在亚马逊密钥空间中对结果进行分页:
分区器
亚马逊密钥空间中的默认分区器与 Cassandra 兼容。Murmur3Partitioner
此外,您可以选择使用亚马逊密钥空间DefaultPartitioner
或兼容Cas RandomPartitioner
sandra的密钥空间。使用亚马逊密钥空间,您可以安全地更改账户的分区器,无需重新加载您的亚马逊密钥空间数据。配置更改完成后(大约需要 10 分钟),客户端将在下次连接时自动看到新的分区器设置。有关更多信息,请参阅在 Amazon Keyspaces 中使用分区器:
准备好的陈述
Amazon Keyspaces 支持使用准备好的语句进行数据操作语言 (DML) 操作,例如读取和写入数据。Amazon Keyspaces 目前不支持将准备好的语句用于数据定义语言 (DDL) 操作,例如创建表和密钥空间。DDL 操作必须在准备好的语句之外运行。
范围删除
亚马逊密钥空间支持删除范围内的行。范围是分区内一组连续的行。您可以使用 WHERE 子句在 DELETE 操作中指定范围。您可以将范围指定为整个分区。
此外,您可以使用关系运算符(例如,'>'、'<'),或者通过包含分区键并省略一个或多个群集列,将范围指定为分区内连续行的子集。使用 Amazon Keyspaces,您可以在单个操作中删除一个范围内的多达 1,000 行。此外,范围删除是原子性的,但不是孤立的。
系统表
亚马逊密钥空间填充 Apache 2.0 开源 Cassandra 驱动程序所需的系统表。客户端可见的系统表包含经过身份验证的用户所独有的信息。系统表完全由亚马逊密钥空间控制,并且是只读的。
需要对系统表进行只读访问权限,您可以使用 IAM 访问策略进行控制。有关更多信息,请参阅使用策略管理访问:根据您是通过 Cassandra 驱动程序和开发人员工具使用 Amazon SDK 还是 Cassandra 查询语言 (CQL) API 调用,您必须为系统表定义基于标签的访问控制策略。要了解有关基于标签的系统表访问控制的更多信息,请参阅 基于标签的亚马逊密钥空间资源访问权限。
如果您使用亚马逊 VPC 终端节点访问亚马逊密钥空间,则会在system.peers
表中看到亚马逊密钥空间有权查看的每个 Amazon VPC 终端节点的条目。因此,您的 Cassandra 驱动程序可能会发出有关表中控制节点本身的system.peers警告消息。你可以放心地忽略这个警告。
时间戳
在亚马逊密钥空间中,与 Apache Cassandra 中的默认时间戳兼容的单元格级时间戳是一项可选功能。
只有在为表启用客户端时间戳时,USING TIMESTAMP
子句和WRITETIME
函数才可用。要了解有关亚马逊密钥空间中客户端时间戳的更多信息,请参阅。在 Amazon Keyspaces 中使用客户端时间戳