在 Amazon Keyspaces 中使用表 - Amazon Keyspaces(针对 Apache Cassandra)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

在 Amazon Keyspaces 中使用表

本节提供有关在 Amazon Keyspaces (for Apache Cassandra) 中使用表的详细信息。

在 Amazon Keyspaces 中创建表

Amazon Keyspaces 执行数据定义语言 (DDL) 操作,例如异步创建和删除表。您可以在 AWS 管理控制台中监控新表的创建状态,该状态指示表何时处于待处理状态或处于活动状态。您还可以使用 系统架构表以编程方式监控新表的创建状态。

当表可供使用时,表在系统架构中显示为活动。用于检查新表何时可供使用的建议设计模式是轮询 Amazon Keyspaces 系统架构表 (system_schema_mcs.*)。有关表的 DDL 语句的列表,请参阅 CQL 语言参考中的 Tables 部分。

以下查询显示表的状态。

SELECT keyspace_name, table_name, status FROM system_schema_mcs.tables WHERE keyspace_name = 'mykeyspace' AND table_name = 'mytable';

对于仍在创建中且正在等待处理的表,查询的输出如下所示。

keyspace_name | table_name | status --------------+------------+-------- mykeyspace | mytable | CREATING

对于已成功创建且处于活动状态的表,查询的输出如下所示。

keyspace_name | table_name | status --------------+------------+-------- mykeyspace | mytable | ACTIVE

Amazon Keyspaces 中的静态列

当您将 Amazon Keyspaces 表中的列声明为静态时,存储在此列中的值将在逻辑分区中的所有行之间共享。当您更新此列的值时,Amazon Keyspaces 会自动将更改应用于分区中的所有行。

本节介绍如何在写入静态列时计算数据的编码大小。此过程与将数据写入行的非静态列的过程分开处理。除了静态数据的大小配额之外,对静态列的读取和写入操作还会独立影响表的计量和吞吐容量。

计算 Amazon Keyspaces 中每个逻辑分区的静态列大小

本节提供有关如何估算 Amazon Keyspaces 中静态列的编码大小的详细信息。在计算您的 账单和配额使用量时,将使用编码大小。您还应在计算表的预置吞吐容量需求时使用编码大小。要计算 Amazon Keyspaces 中静态列的编码大小,您可以使用以下准则。

  • 分区键最多可包含 2048 字节的数据。分区键中的每个键列最多需要 3 字节的元数据。这些元数据字节计入每个分区的静态数据大小配额 1 MB。在计算静态数据的大小时,您应该假定每个分区键列使用完整的 3 字节元数据。

  • 根据数据类型使用静态列数据值的原始大小。有关数据类型的更多信息,请参阅 数据类型

  • 将 104 字节添加到元数据的静态数据大小。

  • 聚类列和常规非主键列不计入静态数据的大小。要了解如何估计行中的非静态数据的大小,请参阅计算 Amazon Keyspaces 中的行大小

静态列的总编码大小基于以下公式:

partition key columns + static columns + metadata = total encoded size of static data

请考虑以下表示例,其中所有列均为整数类型。该表有两个分区键列:两个聚类列、一个常规列和一个静态列。

CREATE TABLE mykeyspace.mytable(pk_col1 int, pk_col2 int, ck_col1 int, ck_col2 int, reg_col1 int, static_col1 int static, primary key((pk_col1, pk_col2),ck_col1, ck_col2));

在此示例中,我们计算以下语句的静态数据的大小:

INSERT INTO mykeyspace.mytable (pk_col1, pk_col2, static_col1) values(1,2,6);

要估计此写入操作所需的总字节数,您可以使用以下步骤。

  1. 通过添加存储在 列和元数据字节中的数据类型的字节数来计算分区键列的大小。对所有分区键列重复此操作。

    1. 计算分区键 (pk_col1) 的第一列的大小:

      4 bytes for the integer data type + 3 bytes for partition key metadata = 7 bytes
    2. 计算分区键 (pk_col2) 的第二列的大小:

      4 bytes for the integer data type + 3 bytes for partition key metadata = 7 bytes
    3. 添加两列可获取分区键列的总估计大小:

      7 bytes + 7 bytes = 14 bytes for the partition key columns
  2. 添加静态列的大小。在本示例中,我们只有一个存储整数的静态列(这需要 4 个字节)。

  3. 最后,要获取静态列数据的总编码大小,请为主键列和静态列加上字节,并为元数据添加额外的 104 字节:

    14 bytes for the partition key columns + 4 bytes for the static column + 104 bytes for metadata = 122 bytes.

您还可以使用相同的 语句更新静态和非静态数据。要估算写入操作的总大小,您必须先计算非静态数据更新的大小。然后,计算行更新的大小,如示例 中所示计算 Amazon Keyspaces 中的行大小,并添加结果。在这种情况下,您可以写入总计 2 MB - 1 MB 是最大行大小配额,1 MB 是每个逻辑分区的最大静态数据大小的配额。

要计算同一语句中静态和非静态数据更新的总大小,您可以使用以下公式:

(partition key columns + static columns + metadata = total encoded size of static data) + (partition key columns + clustering columns + regular columns + row metadata = total encoded size of row) = total encoded size of data written

请考虑以下表示例,其中所有列均为整数类型。该表有两个分区键列:两个聚类列、一个常规列和一个静态列。

CREATE TABLE mykeyspace.mytable(pk_col1 int, pk_col2 int, ck_col1 int, ck_col2 int, reg_col1 int, static_col1 int static, primary key((pk_col1, pk_col2),ck_col1, ck_col2));

在此示例中,我们在向表中写入行时计算数据的大小,如以下语句中所示:

INSERT INTO mykeyspace.mytable (pk_col1, pk_col2, ck_col1, ck_col2, reg_col1, static_col1) values(2,3,4,5,6,7);

要估计此写入操作所需的总字节数,您可以使用以下步骤。

  1. 计算静态数据的总编码大小,如前所示。在此示例中,它为 122 字节。

  2. 根据非静态数据的更新,按照中的步骤添加行的总编码大小计算 Amazon Keyspaces 中的行大小。在此示例中,行更新的总大小为 134 字节。

    122 bytes for static data + 134 bytes for nonstatic data = 256 bytes.

计量 Amazon Keyspaces 中静态数据的读/写操作

静态数据与 Cassandra 中的逻辑分区关联,而不是单个行。Amazon Keyspaces 中的逻辑分区可通过跨多个物理存储分区几乎无限大小。因此,Amazon Keyspaces 计量对静态和非静态数据的写入操作。此外,同时包含静态和非静态数据的写入操作需要额外的底层操作以提供数据一致性。

如果您同时对静态和非静态数据执行混合写入操作,这会导致两个单独的写入操作 - 一个针对非静态数据,另一个针对静态数据。这适用于按需和预置的读/写容量模式。

以下示例提供有关在计算具有静态列的 Amazon Keyspaces 中的表的预置吞吐容量需求时如何估算所需读取容量单位 (RCUs) 和写入容量单位 (WCUs) 的详细信息。您可以使用以下公式估算表处理包含静态和非静态数据的写入所需的容量:

2 x WCUs required for nonstatic data + 2 x WCUs required for static data

例如,如果您的应用程序每秒写入 27 KBs 数据,并且每次写入包含 25.5 KBs 的非静态数据和 1.5 KBs 的静态数据,则您的表需要 56 WCUs (2 x 26 WCUs + 2 x 2 WCUs

Amazon Keyspaces 计量静态和非静态数据的读取与计量多个行的读取相同。因此,在同一操作中读取静态和非静态数据的价格取决于为执行读取而处理的数据的聚合大小。