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

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

使用亚马逊Keyspaces 中的表

本节提供有关在 Amazon Keyspaces space(for 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 字节。

  • 聚类列和常规非主键列不计入静态数据的大小。要了解如何估计行内非静态数据的大小,请参阅计算 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 中具有静态列的表的预置吞吐量要求时,如何估计所需的读取容量单位 (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,请参阅使用亚马逊监控亚马逊Keyspaces CloudWatch