Amazon Keyspaces での行の操作 - Amazon Keyspaces (Apache Cassandra 向け)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Keyspaces での行の操作

このセクションでは、Amazon Keyspaces (Apache Cassandra 向け) における行の詳しい操作方法について説明します。テーブルは Amazon Keyspaces の主要なデータ構造であり、テーブル内のデータは列と行で構成されています。

Amazon Keyspaces での行サイズの計算

Amazon Keyspaces は、1 桁ミリ秒の読み取りおよび書き込みパフォーマンスを提供し、複数の AWS アベイラビリティーゾーンにデータを永続的に保存するフルマネージドストレージを提供します。Amazon Keyspaces では、効率的なデータアクセスと高可用性をサポートするために、すべての行とプライマリキー列にメタデータをアタッチします。

このセクションでは、Amazon Keyspaces でエンコードされた行サイズを推定する方法について説明します。エンコードされた行サイズは、請求額とクォータの使用量を計算するときに使用されます。また、テーブルのプロビジョンドスループット性能要件を計算するときにも、エンコードされた行サイズを使用すべきです。Amazon Keyspaces 内のエンコードされた行サイズを計算するには、次のガイドラインを使用します。

  • プライマリキー、クラスタリング列、または STATIC 列ではない通常の列の場合は、データ型に基づいた生のセルデータサイズを使用し、必要なメタデータを追加します。Amazon Keyspaces デベロッパーガイドでサポートされているのデータ型の詳細については、「データ型」参照してください。Amazon Keyspaces がデータ型値とメタデータを保存する方法の主な違いを以下に示します。

  • 各列名に必要な容量は列識別子を使用して保存され、列に格納されている各データ値に加算されます。列識別子の格納値は、テーブル内の列の総数によって異なります。

    • 1 ~ 62 カラム: 1 バイト

    • 63 ~ 124 カラム: 2 バイト

    • 125 ~ 186 カラム: 3 バイト

    62 列を追加するごとに 1 バイトを追加します。Amazon Keyspaces では、1 つの INSERT または UPDATE ステートメントで最大 225 個の標準列を変更できることに注意してください。詳細については、「Amazon Keyspaces サービスクォータ」を参照してください。

  • パーティションには、最大 2048 バイトのデータを保存できます。パーティションキーの各キー列には、最大 3 バイトのメタデータが必要です。行のサイズを計算するときには、各パーティションキー列で上限である 3 バイトのメタデータが使用されていることを想定しておくべきです。

  • クラスタリング列には最大 850 バイトのデータを保存できます。データ値のサイズに加えて、各クラスタリング列のメタデータにはデータ値サイズの最大 20% が必要です。行のサイズを計算するときには、5 バイトのクラスタリング列データ値ごとに 1 バイトのメタデータを追加する必要があります。

  • Amazon Keyspaces は、各パーティションキーとクラスタリングキー列のデータ値を 2 回保存します。余分なオーバーヘッドは、効率的なクエリと組み込みのインデックス作成に使用されます。

  • Cassandra ASCIITEXT、および VARCHAR 文字列データ型はすべて、UTF-8 バイナリエンコーディングの Unicode を使用して Amazon Keyspaces に保存されます。Amazon Keyspaces 文字列のサイズは、UTF-8 でエンコードされたバイト数と同じです。

  • Cassandra INTBIGINTSMALLINT、および TINYINT データ型は、有効桁数が最大 38 桁の可変長のデータ値として Amazon Keyspaces に保存されます。先頭と末尾の 0 は切り捨てられます。これらのデータ型のサイズはいずれも、有効数字 2 桁あたり約 1 バイト+1 バイトです。

  • Amazon Keyspaces の BLOB は、値の生のバイト長で保存されます。

  • Null 値または Boolean 値のサイズは 1 バイトです。

  • その内容にかかわらず、LIST または MAP などのコレクションデータ型を保存する列には、3 バイトのメタデータが必要です。LIST または MAP のサイズは、(列 ID) + 合計 (入れ子要素のサイズ) + (3 バイト) です。空の LIST または MAP のサイズは (列 ID) + (3 バイト) です。個々の LIST または MAP 要素にはそれぞれ、余分な 1 バイトが必要です。

  • STATIC 列データは、最大行サイズである 1 MB にカウントされません。静的列のデータサイズを計算するには、「Amazon Keyspaces の各論理パーティションの静的列サイズの計算」を参照してください。

  • この機能を有効にすると、クライアント側のタイムスタンプは各行の各列に保存されます。これらのタイムスタンプは約 20 ~ 40 バイト (データによって異なります) を占め、行のストレージとスループットのコストに影響します。詳細については、「Amazon Keyspaces におけるクライアントサイドのタイムスタンプの働き」を参照してください。

  • 行メタデータのために各行のサイズに 100 バイトを追加します。

エンコードされたデータ行の合計サイズは、次の式に基づいています。

partition key columns + clustering columns + regular columns + row metadata = total encoded size of row
重要

列 ID、パーティションキーメタデータ、クラスタリング列のメタデータなどの列のメタデータ、クライアント側のタイムスタンプ、行メタデータなど、すべての列メタデータは、最大行サイズ 1 MB にカウントされます。

すべての列が整数型であるテーブルの例を考えてみましょう。テーブルには、パーティションキー列が 2 つ、クラスタリング列が 2 つ、通常の列が 1 つあります。このテーブルには 5 つの列があるため、列名識別子に必要なスペースは 1 バイトです。

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

この例では、次のステートメントに示すように、テーブルに行を書き込むときにデータのサイズを計算します。

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

この書き込みオペレーションに必要な合計バイト数を見積もるために、次のステップを使用します。

  1. 列に保存されているデータ型のバイトとメタデータバイトを追加して、パーティションキー列のサイズを計算します。この計算をすべてのパーティションキー列に対して繰り返します。

    1. パーティションキー (pk_col1) の最初の列のサイズを計算します。

      (2 bytes for the integer data type) x 2 + 1 byte for the column id + 3 bytes for partition key metadata = 8 bytes
    2. パーティションキー (pk_col2) の 2 番目の列のサイズを計算します。

      (2 bytes for the integer data type) x 2 + 1 byte for the column id + 3 bytes for partition key metadata = 8 bytes
    3. 両方の列を足して、パーティションキー列の合計サイズを見積もります。

      8 bytes + 8 bytes = 16 bytes for the partition key columns
  2. 列に保存されているデータ型のバイトとメタデータのバイトを足して、クラスタリング列のサイズを計算します。すべてのクラスタリング列に対してこの計算を繰り返します。

    1. クラスタリング列 (ck_col1) の最初の列のサイズを計算します。

      (2 bytes for the integer data type) x 2 + 20% of the data value (2 bytes) for clustering column metadata + 1 byte for the column id = 6 bytes
    2. クラスタリング列 (ck_col2) の 2 番目の列のサイズを計算します。

      (2 bytes for the integer data type) x 2 + 20% of the data value (2 bytes) for clustering column metadata + 1 byte for the column id = 6 bytes
    3. 両方の列を足して、クラスタリング列の合計サイズを見積もります。

      6 bytes + 6 bytes = 12 bytes for the clustering columns
  3. 通常の列のサイズを足します。この例では、1 バイトが必要で列 ID が 1 バイトが必要で、余分な 1 バイトが必要です。

  4. 最後に、エンコードされた行サイズの合計を出すには、すべての列のバイトを合計し、行のメタデータに追加で 100 バイトを足します。

    16 bytes for the partition key columns + 12 bytes for clustering columns + 3 bytes for the regular column + 100 bytes for row metadata = 131 bytes.

Amazon でサーバーレスリソースをモニタリングする方法については CloudWatch、「」を参照してくださいアマゾンによるアマゾンKeyspaces モニタリング CloudWatch