如何估計 Amazon Keyspaces 中讀寫輸送量的容量消耗 - Amazon Keyspaces (適用於 Apache Cassandra)

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

如何估計 Amazon Keyspaces 中讀寫輸送量的容量消耗

當您在 Amazon 金 Keyspaces 中讀取或寫入資料時,查詢耗用的讀取/寫入請求單位 (RRUS/WRUS) 或讀取/寫入容量單位 (RCU/WCU) 數量取決於 Amazon 金 Keyspaces 執行查詢所需處理的資料總量。在某些情況下,傳回給用戶端的資料可以是 Amazon Keyspace 處理查詢時必須讀取的資料子集。對於條件式寫入,即使條件式檢查失敗,Amazon Keyspaces 也會消耗寫入容量。

若要估計要求所處理的資料總量,您必須考慮資料列的編碼大小和總列數。本主題涵蓋一些常見案例和存取模式的範例,以示範 Amazon Keyspaces 如何處理查詢,以及如何影響容量消耗。您可以按照範例估算表格的容量需求,並使用 Amazon CloudWatch 觀察這些使用案例的讀取和寫入容量消耗。

有關如何計算 Amazon Keyspaces 中行的編碼大小的信息,請參閱計算 Amazon Keyspaces 中的行大小

範圍查詢

要查看範圍查詢的讀取容量消耗,我們使用下面的示例表是使用按需容量模式。

pk1 | pk2 | pk3 | ck1 | ck2 | ck3 | value -----+-----+-----+-----+-----+-----+------- a | b | 1 | a | b | 50 | <any value that results in a row size larger than 4KB> a | b | 1 | a | b | 60 | value_1 a | b | 1 | a | b | 70 | <any value that results in a row size larger than 4KB>

現在,在此表上運行以下查詢。

SELECT * FROM amazon_keyspaces.example_table_1 WHERE pk1='a' AND pk2='b' AND pk3=1 AND ck1='a' AND ck2='b' AND ck3 > 50 AND ck3 < 70;

您會從查詢收到下列結果集,Amazon Keyspaces 執行的讀取作業會在LOCAL_QUORUM一致性模式下消耗 2 個 RRU。

pk1 | pk2 | pk3 | ck1 | ck2 | ck3 | value -----+-----+-----+-----+-----+-----+------- a | b | 1 | a | b | 60 | value_1

Amazon Keyspaces 會消耗 2 個 RRU 來評估含有值的資料列ck3=60並處理ck3=70查詢。不過,Amazon Keyspaces 只會傳回查詢中指定WHERE條件為真的列,也就是具有值ck3=60的資料列。若要評估查詢中指定的範圍,Amazon Keyspaces 會讀取符合範圍上限的資料列,在此情況下ck3 = 70,但不會在結果中傳回該資料列。讀取容量消耗是根據處理查詢時讀取的資料,而不是以傳回的資料為基礎。

限制查詢

當處理使用該LIMIT子句的查詢時,Amazon Keyspaces 會在嘗試符合查詢中指定的條件時,讀取最大頁面大小的列。如果 Amazon Keyspaces space 找不到足夠符合第一頁LIMIT值的相符資料,則可能需要一個或多個分頁呼叫。若要繼續閱讀下一頁,您可以使用分頁權杖。預設頁面大小為 1MB。若要在使用LIMIT子句時消耗較少的讀取容量,您可以減少頁面大小。如需分頁的詳細資訊,請參閱Amazon Keyspaces 中的分頁結果

舉個例子,讓我們來看看下面的查詢。

SELECT * FROM my_table WHERE partition_key=1234 LIMIT 1;”

如果您沒有設置頁面大小,Amazon Keyspaces 會讀取 1MB 的數據,即使它只返回 1 行給您。要只讓 Amazon Keyspaces 讀取一行,您可以將此查詢的頁面大小設置為 1。在這種情況下,如果您沒有基於 T ime-to-live 設置或客戶端時間戳的過期行,則 Amazon Keyspaces 間只會讀取一行。若要消耗較少的讀取容量,我們建議您將頁面大小設定為等於LIMIT值,以減少 Amazon Keyspaces 讀取的資料量。

表格掃描

導致完整資料表掃描的查詢 (例如使用ALLOW FILTERING選項的查詢) 是另一個查詢範例,這些查詢處理的讀取數量超過傳回的結果。讀取容量消耗是基於讀取的數據,而不是返回的數據。

對於資料表掃描範例,我們在隨選容量模式下使用下列範例表格。

pk | ck | value ---+----+--------- pk | 10 | <any value that results in a row size larger than 4KB> pk | 20 | value_1 pk | 30 | <any value that results in a row size larger than 4KB>

Amazon Keyspaces 預設會以隨需容量模式建立一個包含四個分割區的表格。在此範例資料表中,所有資料都儲存在一個磁碟分割中,其餘的三個分割區都是空的。

現在,在表上運行以下查詢。

SELECT * from amazon_keyspaces.example_table_2;

此查詢會產生資料表掃描作業,其中 Amazon Keyspaces 會掃描資料表的所有四個分區,並在LOCAL_QUORUM一致性模式下消耗 6 個 RRU。首先,Amazon Keyspaces 消耗 3 RU 來讀取三行。pk=‘pk’然後,Amazon Keyspaces 會耗用額外的 3 個 RRU 來掃描表格的三個空白分割區。由於此查詢會產生資料表掃描,因此 Amazon Keyspaces 會掃描資料表中的所有分區,包括沒有資料的分割區。

輕量型交易

輕量型交易 (LWT) 可讓您針對資料表資料執行條件式寫入作業。根據評估目前狀態的條件插入、更新和刪除記錄時,條件式更新作業非常有用。

在 Amazon Keyspaces 中,所有寫入作業都需要 LOCAL_QUARE 一致性,而且使用 LWT 無須額外付費。LWT 的差異在於,當 LWT 條件檢查結果為 FALSE 時,它會消耗寫入容量單位。使用的寫入容量單位數取決於資料列的大小。如果資料列大小為 2 KB,則失敗的條件式寫入會耗用兩個寫入容量單位。如果資料列目前不存在於資料表中,則作業會耗用一個寫入容量單位。透過監視中的ConditionalCheckFailed指標, CloudWatch 您可以判斷 LWT 條件檢查失敗所耗用的容量。

使用 Amazon 估算讀取和寫入容量消耗 CloudWatch

若要估算和監視讀取和寫入容量耗用量,您可以使用 CloudWatch 儀表板。如需 Amazon Keyspaces 可用指標的詳細資訊,請參閱Amazon Keyspaces 指標和維度

若要監視特定陳述式使用的讀取和寫入容量單位 CloudWatch,您可以遵循下列步驟。

  1. 使用範例資料建立新資料表

  2. 設定表格的 Amazon Keyspaces CloudWatch 儀表板。若要開始使用,您可以使用 Github 上提供的儀表板範本。

  3. 例如,使用ALLOW FILTERING選項執行 CQL 陳述式,並在儀表板中檢查用於完整表格掃描的讀取容量單位。