使用 Amazon Keyspaces 中的行 - Amazon Keyspaces (適用於 Apache Cassandra)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Keyspaces 中的行

本節提供了有關使用 Amazon Keyspaces 間行(對於 Apache 卡桑德拉)的詳細信息。表是在 Amazon Keyspaces 的主數據結構和表中的數據被組織成列和行。

計算 Amazon Keyspaces 中的行大小

Amazon Keyspaces 提供全受管儲存,可提供 10 毫秒的讀取和寫入效能,並在多個可用區域中持久存放資料。AWSAmazon Keyspaces 中繼資料附加到所有列和主索引鍵欄,以支援有效率的資料存取和高可用性。

本節提供有關如何估計 Amazon Keyspaces 中行的編碼大小的詳細信息。計算帳單和配額使用時,會使用編碼的資料列大小。在計算表格的佈建輸送量容量需求時,您也應該使用編碼的資料列大小。要計算 Amazon Keyspaces 中行的編碼大小,您可以使用以下準則。

  • 對於不是主索引鍵、叢集資料行或STATIC資料行的一般資料行,請根據資料類型使用儲存格資料的原始大小,並新增必要的中繼資料。如需 Amazon Keyspaces 支援之資料類型的詳細資訊,請參閱資料類型。下面列出了 Amazon 密 Keyspaces 存放資料類型值和中繼資料的一些主要差異。

  • 每個欄名稱所需的空間會使用欄識別碼儲存,並新增至儲存在欄中的每個資料值。資料行識別碼的儲存值取決於資料表中的整體資料欄數:

    • 1 至 62 個資料欄:1 個位元組

    • 6 至 124 個資料欄:2 個位元組

    • 1 至 6 個資料欄:3 個位元組

    對於每個額外 62 列添加 1 個字節。請注意,在 Amazon Keyspaces 中,最多可以使用單個INSERTUPDATE語句修改 225 個常規列。如需詳細資訊,請參閱Amazon Keyspaces 服務配額

  • 分割區索引鍵最多可包含 2048 個位元組的資料。分割區索引鍵中的每個索引鍵資料行最多需要 3 個位元組的中繼資料。計算資料列的大小時,您應該假設每個分割區索引鍵資料行都使用完整的 3 個位元組的中繼資料。

  • 叢集資料行最多可儲存 850 個位元組的資料。除了資料值的大小之外,每個叢集資料行最多需要中繼資料資料值大小的 20%。計算行的大小時,您應該為每 5 個字節的聚類列數據值添加 1 個字節的元數據。

  • Amazon 密 Keyspaces 會儲存每個分區金鑰和叢集索引鍵資料行兩次的資料值。額外的開銷用於高效查詢和內置索引。

  • 卡桑德拉 ASCIITEXT,和VARCHAR字符串數據類型都存儲在 Amazon Keyspaces 使用 Unicode 與 UTF-8 二進制編碼。Amazon Keyspaces 中的字符串大小等於 UTF-8 編碼字節的數量。

  • 卡桑德拉INTBIGINTSMALLINT,和TINYINT數據類型存儲在 Amazon Keyspaces 作為具有可變長度的數據值,具有多達 38 個有效數字。前後的零會截去。任何這些數據類型的大小約為每兩個有效數字 1 個字節 + 1 字節。

  • Amazon Keyspaces BLOB 中的 A 與值的原始字節長度存儲。

  • Null值或值的大小為 1 個Boolean位元組。

  • 儲存集合資料類型 (例如LISTMAP需要 3 個位元組的中繼資料) 的資料行,不論其內容為何。a LIST 或的大小MAP為(列 ID)+ 總和(嵌套元素的大小)+(3 個字節)。空白LIST或大小MAP為 (資料行識別碼) + (3 個位元組)。每個單獨LISTMAP元素還需要 1 個字節的元數據。

  • STATIC欄資料不會計入 1 MB 的最大列大小。若要計算靜態欄的資料大小,請參閱計算 Amazon Keyspaces 中每個邏輯分區的靜態列大小

  • 當功能開啟時,會儲存每一列中每一欄的用戶端時間戳記。這些時間戳記大約會佔用 20-40 個位元組 (視您的資料而定),而且會造成資料列的儲存和輸送量成本。如需詳細資訊,請參閱亞馬遜 Keyspaces 間中的客戶端時間戳如何工作

  • 將 100 個字節添加到行元數據的每行的大小。

已編碼資料列的總大小以下列公式為基礎:

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

所有資料行中繼資料,例如資料行 ID、分割索引鍵中繼資料、叢集資料行中繼資料,以及用戶端時間戳記和資料列中繼資料都會計入最大資料列大小 1 MB。

考慮一個表的下面的例子,其中所有列都是整數類型。此資料表有兩個分割索引鍵資料行、兩個叢集資料行,以及一個一般資料欄。由於此資料表有五個資料行,所以資料行名稱識別碼所需的空間為 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 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 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. 添加常規列的大小。在這個例子中,我們只有一個存儲一個數字整數的列,這需要 2 個字節,列 ID 為 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,請參閱用 Amazon 監控 Amazon Keyspaces CloudWatch