本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
估計 Amazon Keyspaces 中的資料列大小
Amazon Keyspaces 提供全受管儲存,可提供單一位數毫秒的讀取和寫入效能,並持久地跨多個 AWS 可用區域存放資料。Amazon Keyspaces 會將中繼資料連接至所有資料列和主索引鍵資料欄,以支援高效率的資料存取和高可用性。
本主題提供如何估計 Amazon Keyspaces 中資料列編碼大小的詳細資訊。計算帳單和配額使用時,會使用編碼的資料列大小。在估算資料表的佈建輸送量需求時,您也可以使用編碼的資料列大小。
若要計算 Amazon Keyspaces 中資料列的編碼大小,您可以使用下列準則。
估算欄的編碼大小
本節說明如何預估 Amazon Keyspaces 中資料欄的編碼大小。
一般資料欄 – 對於非主索引鍵、叢集資料欄或
STATIC
資料欄的資料欄,請根據資料類型使用儲存格資料的原始大小,並新增必要的中繼資料。Amazon Keyspaces 存放資料類型值和中繼資料的方式,其資料類型和一些關鍵差異列於下一節。分割區索引鍵欄 – 分割區索引鍵最多可包含 2048 個位元組的資料。分割區索引鍵中的每個索引鍵欄最多需要 3 個位元組的中繼資料。計算資料列的大小時,您應該假設每個分割區索引鍵欄使用完整 3 個位元組的中繼資料。
叢集資料欄 – 叢集資料欄最多可存放 850 個位元組的資料。除了資料值的大小之外,每個叢集資料欄最多需要中繼資料資料值大小的 20%。計算資料列的大小時,您應該為叢集資料欄資料值的每個 5 個位元組新增 1 個位元組的中繼資料。
注意
為了支援高效查詢和內建索引,Amazon Keyspaces 會儲存每個分割區索引鍵和叢集索引鍵資料欄的資料值兩次。
資料欄名稱 – 每個資料欄名稱所需的空間會使用資料欄識別符來儲存,並新增至存放在資料欄中的每個資料值。資料欄識別符的儲存值取決於資料表中的資料欄總數:
1–62 欄:1 位元組
63–124 欄:2 個位元組
125–186 欄:3 個位元組
每增加 62 個資料欄,請新增 1 個位元組。請注意,在 Amazon Keyspaces 中,最多可以使用單一
INSERT
或UPDATE
陳述式修改 225 個一般資料欄。如需詳細資訊,請參閱Amazon Keyspaces 服務配額。
根據資料類型估計資料值的編碼大小
本節說明如何預估 Amazon Keyspaces 中不同資料類型的編碼大小。
字串類型 – Cassandra
ASCII
、TEXT
和VARCHAR
字串資料類型都使用 Unicode 搭配 UTF-8 二進位編碼儲存在 Amazon Keyspaces 中。Amazon Keyspaces 中字串的大小等於 UTF-8 個編碼位元組的數量。數值類型 – Cassandra
INT
、SMALLINT
、BIGINT
和TINYINT
資料類型會以可變長度的資料值儲存在 Amazon Keyspaces 中,最多 38 個有效數字。前後的零會截去。任何這些資料類型的大小約為每兩個有效數字 1 個位元組 + 1 個位元組。Blob 類型 – Amazon Keyspaces
BLOB
中的 是以值的原始位元組長度存放。布林值類型 –
Boolean
值的大小或Null
值為 1 位元組。集合類型 – 儲存集合資料類型的資料欄,例如
LIST
或MAP
需要 3 個位元組的中繼資料,無論其內容為何。LIST
或 的大小MAP
是 (資料欄 ID) + 總和 (巢狀元素的大小) + (3 個位元組)。空白LIST
或的大小MAP
是 (資料欄 ID) + (3 個位元組)。每個個別LIST
或MAP
元素也需要 1 個位元組的中繼資料。使用者定義類型 – 使用者定義類型 (UDT) 需要 3 個位元組的中繼資料,無論其內容為何。對於每個UDT元素,Amazon Keyspaces 需要額外 1 位元組的中繼資料。
若要計算 的編碼大小UDT,請從
field name
和field value
的 欄位開始UDT:欄位名稱 – 最上層的每個欄位名稱UDT都是使用 識別符來存放。識別符的儲存值取決於最上層 中的欄位整體數量UDT,並且可以介於 1 到 3 個位元組之間:
1–62 個欄位:1 位元組
63–124 欄位:2 個位元組
125 – 欄位上限:3 個位元組
欄位值 – 儲存最上層欄位值所需的位元組UDT取決於儲存的資料類型:
純量資料類型 – 儲存所需的位元組與儲存在一般資料欄中的相同資料類型相同。
凍結 UDT – 對於每個凍結巢狀 UDT,巢狀UDT具有與CQL二進位通訊協定相同的大小。對於巢狀 UDT,會為每個欄位 (包括空白欄位) 儲存 4 個位元組,而儲存欄位的值是欄位值的CQL二進位通訊協定序列化格式。
凍結集合:
LIST 和 SET – 對於巢狀凍結
LIST
或SET
,會針對集合的每個元素以及集合值的CQL二進位通訊協定序列化格式儲存 4 個位元組。MAP – 對於巢狀凍結
MAP
,每個鍵/值對具有下列儲存需求:對於每個金鑰配置 4 個位元組,然後新增金鑰的CQL二進位通訊協定序列化格式。
對於每個值配置 4 個位元組,然後新增值的CQL二進位通訊協定序列化格式。
FROZEN 關鍵字 – 對於在凍結集合內巢狀的凍結集合,Amazon Keyspaces 不需要任何額外位元組的中繼資料。
STATIC 關鍵字 –
STATIC
資料欄資料不會計入 1 MB 的資料列大小上限。若要計算靜態資料欄的資料大小,請參閱 計算 Amazon Keyspaces 中每個邏輯分割區的靜態資料欄大小。
考慮 Amazon Keyspaces 功能對資料列大小的影響
本節顯示 Amazon Keyspaces 中的功能如何影響資料列的編碼大小。
用戶端時間戳記 – 開啟功能時,用戶端時間戳記會針對每一列中的每一欄存放。這些時間戳記大約需要 20–40 個位元組 (取決於您的資料),並導致資料列的儲存和輸送量成本。如需用戶端時間戳記的詳細資訊,請參閱Amazon Keyspaces 間中的客戶端時間戳。
選擇正確的公式來計算資料列的編碼大小
本節顯示不同的公式,您可以用來估算 Amazon Keyspaces 中資料列的儲存體或容量輸送量需求。
一列資料的總編碼大小可根據下列其中一個公式,根據您的目標來估算:
輸送量容量 – 預估資料列的編碼大小,以評估所需的 read/write request units (RRUs/WRUs) or read/write capacity units (RCUs/WCUs):
total encoded size of row = partition key columns + clustering columns + regular columns
儲存體大小 – 若要預估要預測 的資料列編碼大小
BillableTableSizeInBytes
,請新增資料列儲存體所需的中繼資料:total encoded size of row = partition key columns + clustering columns + regular columns + row metadata (100 bytes)
重要
所有資料欄中繼資料,例如資料欄 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);
若要估計此寫入操作所需的總位元組數,您可以使用下列步驟。
透過新增存放在資料欄中的資料類型位元組和中繼資料位元組,來計算分割區索引鍵資料欄的大小。對所有分割區索引鍵資料欄重複此操作。
計算分割區索引鍵 (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
計算分割區索引鍵 (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
新增兩個資料欄,以取得分割區索引鍵資料欄的預估總大小:
8 bytes + 8 bytes = 16 bytes for the partition key columns
透過新增存放在資料欄中的資料類型位元組和中繼資料位元組,來計算叢集資料欄的大小。對所有叢集資料欄重複此操作。
計算叢集資料欄 (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
計算叢集資料欄 (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
新增兩個資料欄,以取得叢集資料欄的預估總大小:
6 bytes + 6 bytes = 12 bytes for the clustering columns
新增一般資料欄的大小。在此範例中,我們只有一個資料欄存放單一數字整數,這需要 2 個位元組,資料欄 ID 為 1 個位元組。
最後,若要取得總編碼資料列大小,請為所有資料欄新增位元組。若要預估儲存體的計費大小,請新增資料列中繼資料的額外 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。