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

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

在亚马逊 Keyspaces 中使用表

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

在亚马逊 Keyspaces 中创建表

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

当系统架构可供使用时,表将显示为活动状态。检查新表何时可供使用的推荐设计模式是轮询 Amazon Keyspaces 系统架构表(system_schema_mcs.*)。有关表的 DDL 语句列表,请参阅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 Keyspaces 将静态和非静态数据的读取量与对多行的读取量相同。因此,在同一操作中读取静态和非静态数据的价格取决于为执行读取而处理的数据的总大小。

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