

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

# 預估 Amazon Keyspaces 中讀取和寫入輸送量的容量耗用
<a name="capacity-examples"></a>

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

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

如需如何計算 Amazon Keyspaces 中資料列編碼大小的資訊，請參閱 [估計 Amazon Keyspaces 中的資料列大小](calculating-row-size.md)。

**Topics**
+ [估計 Amazon Keyspaces 中範圍查詢的容量消耗](range_queries.md)
+ [預估限制查詢的讀取容量耗用量](limit_queries.md)
+ [估算資料表掃描的讀取容量耗用量](table_scans.md)
+ [預估 Amazon Keyspaces 中輕量型交易的容量消耗](lightweight_transactions.md)
+ [預估 Amazon Keyspaces 中靜態資料欄的容量耗用](static-columns.md)
+ [Amazon Keyspaces 中多區域資料表的估計和佈建容量](tables-multi-region-capacity.md)
+ [使用 Amazon Keyspaces 中的 Amazon CloudWatch 估計讀取和寫入容量消耗](estimate_consumption_cw.md)

# 估計 Amazon Keyspaces 中範圍查詢的容量消耗
<a name="range_queries"></a>

 若要查看範圍查詢的讀取容量耗用，我們使用下列使用隨需容量模式的範例資料表。

```
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 RRUs。

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

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

# 預估限制查詢的讀取容量耗用量
<a name="limit_queries"></a>

 處理使用 `LIMIT`子句的查詢時，Amazon Keyspaces 會在嘗試符合查詢中指定的條件時，讀取最大頁面大小的資料列。如果 Amazon Keyspaces 找不到符合第一頁`LIMIT`上值的足夠相符資料，則可能需要一或多個分頁呼叫。若要在下一頁繼續讀取，您可以使用分頁字符。預設頁面大小為 1MB。若要在使用 `LIMIT`子句時減少讀取容量，您可以減少頁面大小。如需分頁的詳細資訊，請參閱 [在 Amazon Keyspaces 中分頁結果](paginating-results.md)。

如需範例，讓我們來看看下列查詢。

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

如果您未設定頁面大小，Amazon Keyspaces 會讀取 1MB 的資料，即使只傳回 1 列給您。若要讓 Amazon Keyspaces 只讀取一列，您可以將此查詢的頁面大小設定為 1。在此情況下，如果根據Time-to-live設定或用戶端時間戳記沒有過期的資料列，Amazon Keyspaces 只會讀取一列。

`PAGE SIZE` 參數會決定 Amazon Keyspaces 從磁碟掃描每個請求的資料列數，而不是 Amazon Keyspaces 傳回用戶端的資料列數。Amazon Keyspaces 會套用您提供的篩選條件，例如非金鑰資料欄上的不等式，或掃描磁碟上的資料`LIMIT`之後的 。如果您未明確設定 `PAGE SIZE`，Amazon Keyspaces 會在套用篩選條件之前讀取最多 1MB 的資料。例如，如果您使用 `LIMIT 1`而不指定 `PAGE SIZE`，Amazon Keyspaces 可以在套用限制子句並僅傳回單一資料列之前，從磁碟讀取數千個資料列。

為了避免過度讀取，請減少 `PAGE SIZE`，以減少 Amazon Keyspaces 掃描每個擷取的資料列數。例如，如果您在查詢`LIMIT 5`中定義 ，請將 `PAGE SIZE` 設定為介於 5 - 10 之間的值，以便 Amazon Keyspaces 在每個分頁呼叫上只會掃描 5 - 10 列。您可以修改此數字以減少擷取的數量。對於大於頁面大小的限制，Amazon Keyspaces 會以分頁狀態維持總結果計數。在 10，000 個資料列`LIMIT`的 中，Amazon Keyspaces 可以在兩頁各 5，000 個資料列中擷取這些結果。1MB 限制是任何頁面大小集的上限。

# 估算資料表掃描的讀取容量耗用量
<a name="table_scans"></a>

導致完整資料表掃描的查詢，例如使用 `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 RRUs。首先，Amazon Keyspaces 會使用 3 RRUs 來讀取具有 的三列`pk=‘pk’`。然後，Amazon Keyspaces 會使用額外的 3 RRUs 來掃描資料表的三個空白分割區。由於此查詢會導致資料表掃描，Amazon Keyspaces 會掃描資料表中的所有分割區，包括不含資料的分割區。

# 預估 Amazon Keyspaces 中輕量型交易的容量消耗
<a name="lightweight_transactions"></a>

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

在 Amazon Keyspaces 中，所有寫入操作都需要 LOCAL\$1QUORUM 一致性，而且使用 LWTs無需額外付費。LWTs的差異在於，當 LWT 條件檢查導致 時`FALSE`，Amazon Keyspaces 會使用寫入容量單位 WCUs) 或寫入請求單位 WRUs)。使用的 WCUs/WRUs 數量取決於資料列的大小。

例如，如果資料列大小為 2 KB，則失敗的條件式寫入會耗用兩個 WCUs/WRUs。如果資料列目前不存在於資料表中，則操作會耗用一個 WCUs/WRUs。

若要判斷導致條件檢查失敗的請求數量，您可以在 CloudWatch 中監控 `ConditionalCheckFailed` 指標。

## 預估存留時間 (TTL) 資料表的 LWT 成本
<a name="lightweight_transactions_ttl"></a>

對於使用不使用用戶端時間戳記的 TTL 設定的資料表，LWTs 可能需要額外的讀取容量單位 (RCUs) 或讀取請求單位 (RRUs)。在 中使用 `IF EXISTS`或 `IF NOT EXISTS`關鍵字條件檢查結果時`FALSE`，會耗用下列容量單位：
+ RCUs/RRUs 如果資料列存在，使用的 RCUs/RRUs會根據現有資料列的大小而定。
+ RCUs/RRUs如果資料列不存在，則會使用單一 RCU/RRU。

如果評估的條件導致寫入操作成功，WCUs/WRUs會根據新資料列的大小耗用。

# 預估 Amazon Keyspaces 中靜態資料欄的容量耗用
<a name="static-columns"></a>

在具有叢集資料欄的 Amazon Keyspaces 資料表中，您可以使用 `STATIC`關鍵字來建立靜態資料欄。儲存在靜態資料欄中的值會在邏輯分割區中的所有資料列之間共用。當您更新此欄的值時，Amazon Keyspaces 會自動將變更套用至分割區中的所有資料列。

本節說明如何在寫入靜態資料欄時計算資料的編碼大小。此程序與將資料寫入資料至資料列非靜態資料欄的程序分開處理。除了靜態資料的大小配額之外，靜態資料欄上的讀取和寫入操作也會獨立影響資料表的計量和輸送量容量。如需使用靜態資料欄和分頁範圍讀取結果時 Apache Cassandra 的功能差異，請參閱 [分頁](functional-differences.md#functional-differences.paging)。

**Topics**
+ [計算 Amazon Keyspaces 中每個邏輯分割區的靜態資料欄大小](static-columns-estimate.md)
+ [預估 Amazon Keyspaces 中靜態資料的讀取/寫入操作的容量輸送量需求](static-columns-metering.md)

# 計算 Amazon Keyspaces 中每個邏輯分割區的靜態資料欄大小
<a name="static-columns-estimate"></a>

本節提供如何估計 Amazon Keyspaces 中靜態資料欄編碼大小的詳細資訊。當您計算帳單和配額用量時，會使用編碼大小。當您計算資料表的佈建輸送量容量需求時，也應該使用編碼的大小。若要計算 Amazon Keyspaces 中靜態資料欄的編碼大小，您可以使用下列準則。
+ 分割區索引鍵最多可包含 2048 個位元組的資料。分割區索引鍵中的每個索引鍵資料欄最多需要 3 個位元組的中繼資料。這些中繼資料位元組會計入每個分割區 1 MB 的靜態資料大小配額。計算靜態資料的大小時，您應該假設每個分割區索引鍵資料欄使用完整 3 個位元組的中繼資料。
+ 根據資料類型使用靜態資料欄資料值的原始大小。如需資料類型的詳細資訊，請參閱 [資料類型](cql.elements.md#cql.data-types)。
+ 將 104 個位元組新增至中繼資料的靜態資料大小。
+ 叢集資料欄和一般、非主索引鍵資料欄不會計入靜態資料的大小。若要了解如何預估資料列中非靜態資料的大小，請參閱 [估計 Amazon Keyspaces 中的資料列大小](calculating-row-size.md)。

靜態資料欄的總編碼大小是根據下列公式：

```
partition key columns + static columns + metadata = total encoded size of static data
```

請考慮下列資料表範例，其中所有資料欄的類型皆為整數。資料表有兩個分割區索引鍵資料欄、兩個叢集資料欄、一個規則資料欄和一個靜態資料欄。

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

在此範例中，我們會計算下列陳述式的靜態資料大小：

```
INSERT INTO mykeyspace.mytable (pk_col1, pk_col2, static_col1) values(1,2,6);
```

若要估計此寫入操作所需的總位元組數，您可以使用下列步驟。

1. 透過新增存放在資料欄中的資料類型位元組和中繼資料位元組，來計算分割區索引鍵資料欄的大小。對所有分割區索引鍵資料欄重複此操作。

   1. 計算分割區索引鍵 (pk\$1col1) 第一欄的大小：

      ```
      4 bytes for the integer data type + 3 bytes for partition key metadata = 7 bytes
      ```

   1. 計算分割區索引鍵 (pk\$1col2) 第二欄的大小：

      ```
      4 bytes for the integer data type + 3 bytes for partition key metadata = 7 bytes
      ```

   1. 新增兩個資料欄，以取得分割區索引鍵資料欄的總預估大小：

      ```
      7 bytes + 7 bytes = 14 bytes for the partition key columns
      ```

1. 新增靜態資料欄的大小。在此範例中，我們只有一個靜態資料欄可存放整數 （需要 4 個位元組）。

1. 最後，若要取得靜態資料欄資料的總編碼大小，請為主索引鍵資料欄和靜態資料欄新增位元組，並為中繼資料新增額外的 104 個位元組：

   ```
   14 bytes for the partition key columns + 4 bytes for the static column + 104 bytes for metadata = 122 bytes.
   ```

您也可以使用相同的陳述式更新靜態和非靜態資料。若要估計寫入操作的總大小，您必須先計算非靜態資料更新的大小。然後計算資料列更新的大小，如 的範例所示[估計 Amazon Keyspaces 中的資料列大小](calculating-row-size.md)，並新增結果。

在這種情況下，您可以寫入總計 2 MB，1 MB 是資料列大小配額上限，而 1 MB 是每個邏輯分割區靜態資料大小上限的配額。

若要計算相同陳述式中靜態和非靜態資料更新的總大小，您可以使用下列公式：

```
(partition key columns + static columns + metadata = total encoded size of static data) + (partition key columns + clustering columns + regular columns + row metadata = total encoded size of row)
= total encoded size of data written
```

請考慮下列資料表範例，其中所有資料欄的類型皆為整數。資料表有兩個分割區索引鍵資料欄、兩個叢集資料欄、一個規則資料欄和一個靜態資料欄。

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

在此範例中，我們在將資料列寫入資料表時計算資料的大小，如下列陳述式所示：

```
INSERT INTO mykeyspace.mytable (pk_col1, pk_col2, ck_col1, ck_col2, reg_col1, static_col1) values(2,3,4,5,6,7);
```

若要估計此寫入操作所需的總位元組數，您可以使用下列步驟。

1. 計算靜態資料的總編碼大小，如先前所示。在此範例中，它是 122 個位元組。

1. 遵循 中的步驟，根據非靜態資料的更新，新增資料列的總編碼大小大小[估計 Amazon Keyspaces 中的資料列大小](calculating-row-size.md)。在此範例中，資料列更新的總大小為 134 個位元組。

   ```
   122 bytes for static data + 134 bytes for nonstatic data = 256 bytes.
   ```

# 預估 Amazon Keyspaces 中靜態資料的讀取/寫入操作的容量輸送量需求
<a name="static-columns-metering"></a>

靜態資料與 Cassandra 中的邏輯分割區相關聯，而不是與個別資料列相關聯。透過跨越多個實體儲存分割區，Amazon Keyspaces 中的邏輯分割區幾乎可以不受大小限制。因此，Amazon Keyspaces 會分別測量靜態和非靜態資料的寫入操作。此外，包含靜態和非靜態資料的寫入需要額外的基礎操作才能提供資料一致性。

如果您同時執行靜態和非靜態資料的混合寫入操作，這會產生兩個不同的寫入操作，一個用於非靜態資料，另一個用於靜態資料。這同時適用於隨需和佈建的讀取/寫入容量模式。

下列範例提供詳細資訊，說明如何在計算具有靜態資料欄之 Amazon Keyspaces 中資料表的佈建輸送量需求時，預估所需的讀取容量單位 (RCUs) 和寫入容量單位 (WCUs)。您可以使用下列公式，預估資料表處理包含靜態和非靜態資料的寫入所需的容量：

```
2 x WCUs required for nonstatic data + 2 x WCUs required for static data
```

例如，如果您的應用程式每秒寫入 27 KBs的資料，且每次寫入包含 25.5 KBs 的非靜態資料和 1.5 KBs 的靜態資料，則資料表需要 56 個 WCUs (2 x 26 WCUs \$1 2 x 2 WCUs)。

Amazon Keyspaces 會測量靜態和非靜態資料的讀取，與多個資料列的讀取相同。因此，相同操作中讀取靜態和非靜態資料的價格，取決於為執行讀取而處理的資料彙總大小。

若要了解如何使用 Amazon CloudWatch 監控無伺服器資源，請參閱 [使用 Amazon CloudWatch 監控 Amazon Keyspaces](monitoring-cloudwatch.md)。

# Amazon Keyspaces 中多區域資料表的估計和佈建容量
<a name="tables-multi-region-capacity"></a>

您可以透過兩種方式之一設定多區域資料表的輸送量容量：
+ 隨需容量模式，以寫入請求單位 (WRUs測量
+ 具有自動擴展的佈建容量模式，以寫入容量單位 (WCUs測量

您可以使用佈建容量模式搭配自動擴展或隨需容量模式，以協助確保多區域資料表有足夠的容量來執行複寫寫入至所有 AWS 區域。

**注意**  
變更其中一個區域中資料表的容量模式會變更所有複本的容量模式。

根據預設，Amazon Keyspaces 會針對多區域資料表使用隨需模式。使用隨需模式時，您不需要指定預期應用程式執行的讀取和寫入輸送量。Amazon Keyspaces 會在工作負載上升或下降到先前達到的任何流量層級時，立即滿足您的工作負載。如果工作負載的流量達到新的峰值，Amazon Keyspaces 會快速調整以適應工作負載。

如果您選擇資料表的佈建容量模式，則必須設定應用程式每秒所需的讀取容量單位 (RCUs) 和寫入容量單位 WCUs) 數量。

若要規劃多區域資料表的輸送量容量需求，您應該先預估每個區域每秒所需的 WCUs 數量。然後，從複寫資料表的所有區域新增寫入，並使用總和為每個區域佈建容量。這是必要的，因為在某個區域中執行的每個寫入也必須在每個複本區域中重複。

如果資料表沒有足夠的容量來處理來自所有區域的寫入，則會發生容量例外狀況。此外，區域間複寫等待時間也會增加。

例如，如果您有一個多區域資料表，其中在美國東部 （維吉尼亞北部） 預期每秒 5 次寫入、美國東部 （俄亥俄） 預期每秒 10 次寫入，而歐洲 （愛爾蘭） 預期該資料表在每個區域中使用 20 個 WCUs：美國東部 （維吉尼亞北部）、美國東部 （俄亥俄） 和歐洲 （愛爾蘭）。這表示在此範例中，您需要為每個資料表的複本佈建 20 WCUs。您可以使用 Amazon CloudWatch 監控資料表的容量消耗。如需詳細資訊，請參閱[使用 Amazon CloudWatch 監控 Amazon Keyspaces](monitoring-cloudwatch.md)。

每次寫入都會以 1 個 WCU 計費，因此您會在此範例中看到總共 60 WCUs 計費。如需定價的詳細資訊，請參閱 [Amazon Keyspaces （適用於 Apache Cassandra) 定價](https://aws.amazon.com/keyspaces/pricing)。

如需使用 Amazon Keyspaces 自動擴展佈建容量的詳細資訊，請參閱 [使用 Amazon Keyspaces 自動擴展自動管理輸送量容量](autoscaling.md)。

**注意**  
如果資料表在具有自動擴展的佈建容量模式下執行，則允許佈建的寫入容量在每個區域的這些自動擴展設定內浮動。

# 使用 Amazon Keyspaces 中的 Amazon CloudWatch 估計讀取和寫入容量消耗
<a name="estimate_consumption_cw"></a>

若要估計和監控讀取和寫入容量消耗，您可以使用 CloudWatch 儀表板。如需 Amazon Keyspaces 可用指標的詳細資訊，請參閱 [Amazon Keyspaces 指標和維度](metrics-dimensions.md)。

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

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

1. 設定資料表的 Amazon Keyspaces CloudWatch 儀表板。若要開始使用，您可以使用 [Github](https://github.com/aws-samples/amazon-keyspaces-cloudwatch-cloudformation-templates) 上提供的儀表板範本。

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