估計 Amazon Keyspaces 中的行大小 - Amazon Keyspaces (適用於 Apache Cassandra)

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

估計 Amazon Keyspaces 中的行大小

Amazon Keyspaces 提供全受管儲存,可提供 10 毫秒的讀取和寫入效能,並在多個間持久存放資料 AWS 可用區域。Amazon 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字符串數據類型都使用 Unicode 和 UTF -8 二進制編碼存儲在 Amazon Keyspaces 中。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 個位元組 (視您的資料而定),而且會造成資料列的儲存和輸送量成本。如需詳細資訊,請參閱Amazon 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