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

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

在 Amazon Keyspaces 中使用表

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

在亚马逊 Keyspaces 中创建表

Amazon Keyspaces 以异步方式执行数据定义语言 (DDL) 操作,如创建和删除表。您可以在Amazon Web Services Management Console,它指示表处于挂起状态或活动状态的时间。您还可以使用系统架构表以编程方式监视新表的创建状态。

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

下面的查询显示表的状态。

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

亚马逊 Keyspaces 中的静态列

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

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

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

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

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

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

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

  • 聚类列和常规非主键列不计入静态数据的大小。要了解如何估计行内非静态数据的大小,请参阅计算亚马逊 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.

您还可以使用相同的语句更新静态和非静态数据。要估计写入操作的总大小,必须首先计算非静态数据更新的大小。然后计算行更新的大小,如计算亚马逊 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. 根据非静态数据的更新,添加行的总编码大小的大小,按照计算亚马逊 Keyspaces 中的行大小. 在此示例中,行更新的总大小为 134 字节。

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

在亚马逊Keyspaces 空间中测量静态数据的读/写操作

静态数据与 Cassandra 中的逻辑分区相关联,而不是单个行。通过跨多个物理存储分区,Amazon Keyspaces 中的逻辑分区可以实际上解除大小的绑定。因此,Amazon Keyspaces 分别计量静态数据和非静态数据的写入操作。此外,包含静态和非静态数据的写入需要额外的底层操作来提供数据一致性。

如果对静态数据和非静态数据执行混合写操作,则会产生两个独立的写操作 — 一个用于非静态数据,另一个用于静态数据。这适用于按需和预配置的读/写容量模式。

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

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

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

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

要了解如何使用 Amazon CloudWatch 监控无服务器资源,请参阅使用 Amazon CloudWatch 监控 Amazon Keyspaces.