

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

# 估算 Amazon Keyspaces 中静态列的容量消耗
<a name="static-columns"></a>

在包含聚类列的 Amazon Keyspaces 表中，您可以使用 `STATIC` 关键字来创建静态列。存储在静态列中的值在逻辑分区的所有行之间共享。当您更新此列的值时，Amazon Keyspaces 会自动将更改应用于该分区中的所有行。

本节介绍在写入静态列时如何计算编码数据大小。此过程与将数据写入行中的非静态列的过程是分开处理的。除了静态数据的大小限额外，对静态列的读取和写入操作也会单独影响表的计量和吞吐容量。如需了解使用静态列和分页范围读取结果时 Apache Cassandra 的功能差异，请参阅[分页](functional-differences.md#functional-differences.paging)。

**Topics**
+ [计算 Amazon Keyspaces 中每个逻辑分区静态列的大小](static-columns-estimate.md)
+ [估算对 Amazon Keyspaces 中的静态数据进行 read/write 操作所需的容量吞吐量](static-columns-metering.md)

# 计算 Amazon Keyspaces 中每个逻辑分区静态列的大小
<a name="static-columns-estimate"></a>

本节详细介绍如何估算 Amazon Keyspaces 中的编码静态列大小。在计算账单和限额使用量时，应使用编码大小。在计算表的预置吞吐容量需求时，也应使用编码大小。要计算 Amazon Keyspaces 中的编码静态列大小，可以遵循以下准则。
+ 分区键最多可包含 2048 个字节的数据。分区键中的每个键列最多需要 3 个字节的元数据。这些元数据字节计入每个分区 1MB 的静态数据大小限额。计算静态数据大小时，应假设每个分区键列使用全部 3 个字节的元数据。
+ 根据数据类型使用静态列数据值的原始大小。有关数据类型的更多信息，请参阅 [数据类型](cql.elements.md#cql.data-types)。
+ 在元数据的静态数据大小上增加 104 个字节。
+ 聚类列和常规非主键列不计入静态数据的大小。要了解如何估算行中的非静态数据大小，请参阅[估算 Amazon Keyspaces 中的行大小](calculating-row-size.md)。

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

```
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\$1col1) 的大小：

      ```
      4 bytes for the integer data type + 3 bytes for partition key metadata = 7 bytes
      ```

   1. 计算分区键第二列 (pk\$1col2) 的大小：

      ```
      4 bytes for the integer data type + 3 bytes for partition key metadata = 7 bytes
      ```

   1. 将两列相加，得出分区键列的估算总大小：

      ```
      7 bytes + 7 bytes = 14 bytes for the partition key columns
      ```

1. 加上静态列的大小。在此示例中，我们只有一个静态列用于存储一个整数（需要 4 个字节）。

1. 最后，要得出编码静态列数据的总大小，请将主键列和静态列的字节相加，再加上元数据所需的 104 个字节：

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

您也可以使用相同的语句更新静态数据和非静态数据。要估算写入操作的总大小，必须先计算非静态数据更新的大小。然后计算行更新的大小（如[估算 Amazon Keyspaces 中的行大小](calculating-row-size.md)中的示例所示），并将结果相加。

在此示例中，您总共可以写入 2MB，1MB 是最大行大小限额，1MB 是每个逻辑分区的最大静态数据大小限额。

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

```
(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 个字节。

1. 按照[估算 Amazon Keyspaces 中的行大小](calculating-row-size.md)中的步骤，根据非静态数据的更新，加上编码行总大小。在此示例中，行更新的总大小为 134 个字节。

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

# 估算对 Amazon Keyspaces 中的静态数据进行 read/write 操作所需的容量吞吐量
<a name="static-columns-metering"></a>

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

如果您执行包含静态数据和非静态数据的混合写入操作，则会产生两个不同的写入操作，一个用于非静态数据，另一个用于静态数据。这适用于按需和预配置 read/write 容量模式。

以下示例详细介绍了在计算 Amazon Keyspaces 中具有静态列的表的预配置吞吐量需求时，如何估算所需的读取容量单位 (RCUsWCUs) 和写入容量单位 ()。您可以使用以下公式估算表处理同时包含静态数据和非静态数据的写入操作所需的容量：

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

例如，如果您的应用程序每秒写入 27 KBs 个数据，并且每次写入包括 25.5 个 KBs 非静态数据和 1. KBs 5 个静态数据，则您的表需要 56 WCUs （2 x 26 WCUs \$1 2 x 2 WCUs）。

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

要了解如何使用 Amazon 监控无服务器资源 CloudWatch，请参阅[使用亚马逊监控亚马逊密钥空间 CloudWatch](monitoring-cloudwatch.md)。