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

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

如何估计 Amazon Keyspaces 的容量消耗

当您在 Amazon Keyspaces 中读取或写入数据时,您的查询消耗的读/写请求单元 (RRU/WRU) 或读/写容量单位 (RCU/WCU) 的数量取决于运行查询时亚马逊密钥空间必须处理的数据总量。在某些情况下,返回给客户端的数据可能是 Amazon Keyspaces 为处理查询而必须读取的数据的子集。对于条件写入,即使条件检查失败,Amazon Keyspaces 也会消耗写入容量。

要估算请求处理的总数据量,必须考虑行的编码大小和总行数。本主题涵盖一些常见场景和访问模式的示例,以展示 Amazon Keyspaces 如何处理查询以及这如何影响容量消耗。您可以按照示例估算表的容量需求,并使用 Amazon CloudWatch 观察这些用例的读取和写入容量消耗。

有关如何计算 Amazon Keyspaces 中行的编码大小的信息,请参阅。计算 Amazon Keyspaces 中的行大小

范围查询

要查看范围查询的读取容量消耗,我们使用以下示例表,该表使用按需容量模式。

pk1 | pk2 | pk3 | ck1 | ck2 | ck3 | value -----+-----+-----+-----+-----+-----+------- a | b | 1 | a | b | 50 | <any value that results in a row size larger than 4KB> a | b | 1 | a | b | 60 | value_1 a | b | 1 | a | b | 70 | <any value that results in a row size larger than 4KB>

现在对该表运行以下查询。

SELECT * FROM amazon_keyspaces.example_table_1 WHERE pk1='a' AND pk2='b' AND pk3=1 AND ck1='a' AND ck2='b' AND ck3 > 50 AND ck3 < 70;

您从查询中收到以下结果集,Amazon Keyspaces 执行的读取操作在一致模式下消耗 2 个 RRU。LOCAL_QUORUM

pk1 | pk2 | pk3 | ck1 | ck2 | ck3 | value -----+-----+-----+-----+-----+-----+------- a | b | 1 | a | b | 60 | value_1

Amazon Keyspaces 消耗 2 个 RRU 来评估包含这些值的行ck3=60ck3=70并处理查询。但是,Amazon Keyspaces 仅返回查询中指定的WHERE条件为真的那一行,即有值的行。ck3=60为了评估查询中指定的范围,在本例中,Amazon Keyspaces 会读取与该范围上限匹配的行ck3 = 70,但不会在结果中返回该行。读取容量消耗基于处理查询时读取的数据,而不是返回的数据。

限制查询

在处理使用该LIMIT子句的查询时,Amazon Keyspaces 会在尝试匹配查询中指定的条件时读取最大页面大小的行。如果 Amazon Keyspaces 找不到符合第一页LIMIT值的足够匹配数据,则可能需要进行一次或多次分页调用。要继续阅读下一页,您可以使用分页令牌。默认页面大小为 1MB。要在使用LIMIT子句时减少读取容量,可以减小页面大小。有关分页的更多信息,请参阅对 Amazon Keyspaces 中的结果进行分页

举个例子,让我们看一下以下查询。

SELECT * FROM my_table WHERE partition_key=1234 LIMIT 1;”

如果您不设置页面大小,Amazon Keyspaces 会读取 1MB 的数据,即使它只向您返回 1 行。要让 Amazon Keyspaces 只读取一行,您可以将此查询的页面大小设置为 1。在这种情况下,Amazon Keyspaces 只能读取一行,前提是您没有基于 T ime-to-live 设置或客户端时间戳的过期行。为了减少读取容量,我们建议将页面大小设置为等于该LIMIT值,以减少 Amazon Keyspaces 读取的数据量。

表格扫描

导致全表扫描的查询(例如使用该ALLOW FILTERING选项的查询)是处理的读取次数多于返回结果的查询的另一个示例。读取容量消耗基于读取的数据,而不是返回的数据。

对于表扫描示例,我们在按需容量模式下使用以下示例表。

pk | ck | value ---+----+--------- pk | 10 | <any value that results in a row size larger than 4KB> pk | 20 | value_1 pk | 30 | <any value that results in a row size larger than 4KB>

默认情况下,Amazon Keyspaces 在按需容量模式下创建包含四个分区的表。在此示例表中,所有数据都存储在一个分区中,其余三个分区为空。

现在对表运行以下查询。

SELECT * from amazon_keyspaces.example_table_2;

此查询将生成表扫描操作,其中 Amazon Keyspaces 会扫描表的所有四个分区,并在一致性模式下消耗 6 个 RRU。LOCAL_QUORUM首先,Amazon Keyspaces 消耗 3 个 RRU 来读取这三行。pk=‘pk’然后,Amazon Keyspaces 会消耗额外的 3 个 RRU 来扫描表的三个空分区。由于此查询会生成表扫描,因此 Amazon Keyspaces 会扫描表中的所有分区,包括没有数据的分区。

轻量级事务

轻量级事务 (LWT) 允许您对表数据执行有条件的写入操作。根据评估当前状态的条件插入、更新和删除记录时,条件更新操作非常有用。

在 Amazon Keyspaces 中,所有写入操作都需要 LOCAL_QUORUM 一致性,并且使用 LWT 不收取额外费用。LWT 的不同之处在于,当 LWT 条件检查结果为 FALSE 时,它会消耗写入容量单位。消耗的写入容量单位数取决于行的大小。如果行大小为 2 KB,则失败的条件写入将消耗两个写入容量单位。如果表中当前不存在该行,则该操作将消耗一个写入容量单位。通过监控中的ConditionalCheckFailed指标, CloudWatch 您可以确定 LWT 条件检查失败所消耗的容量。

估计 Amazon 的读取和写入容量消耗 CloudWatch

要估算和监控读取和写入容量消耗,您可以使用 CloudWatch 控制面板。有关 Amazon Keyspaces 可用指标的更多信息,请参阅。Amazon Keyspaces 指标与维度

要监控特定语句使用的读取和写入容量单位 CloudWatch,可以按照以下步骤操作。

  1. 使用示例数据创建新表

  2. 为表格配置 Amazon Keyspaces CloudWatch 控制面板。首先,你可以使用 Github 上提供的仪表板模板。

  3. 运行 CQL 语句,例如使用ALLOW FILTERING选项,然后在控制面板中检查全表扫描所消耗的读取容量单位。