

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

# 功能差異：Amazon Keyspaces 與 Apache Cassandra
<a name="functional-differences"></a>

以下是 Amazon Keyspaces 和 Apache Cassandra 之間的功能差異。

**Topics**
+ [Apache Cassandra APIs、操作和資料類型](#functional-differences.cassandra-apis)
+ [非同步建立和刪除金鑰空間和資料表](#functional-differences.table-keyspace-management)
+ [身分驗證和授權](#functional-differences.auth)
+ [批次](#functional-differences.batch)
+ [變更資料擷取 (CDC)](#functional-differences.cdc)
+ [叢集組態](#functional-differences.cluster-config)
+ [連線](#functional-differences.connections)
+ [`IN` 關鍵字](#functional-differences.IN-keyword)
+ [`FROZEN` 集合](#functional-differences.frozen-collections)
+ [輕量型交易](#functional-differences.light-transactions)
+ [Load balancing](#functional-differences.load-balancing)
+ [分頁](#functional-differences.paging)
+ [分割區](#functional-differences.partitioners)
+ [備妥的陳述式](#functional-differences.prepared-statements)
+ [刪除範圍](#functional-differences.range-delete)
+ [系統表](#functional-differences.system-tables)
+ [時間戳記](#functional-differences.timestamps)
+ [使用者定義的類型 (UDTs)](#functional-differences.UDTs)

## Apache Cassandra APIs、操作和資料類型
<a name="functional-differences.cassandra-apis"></a>

Amazon Keyspaces 支援所有常用的 Cassandra 資料平面操作，例如建立金鑰空間和資料表、讀取資料和寫入資料。若要查看目前支援的項目，請參閱[支援的 Cassandra APIs、操作、函數和資料類型](cassandra-apis.md)。

## 非同步建立和刪除金鑰空間和資料表
<a name="functional-differences.table-keyspace-management"></a>

Amazon Keyspaces 會執行資料定義語言 (DDL) 操作，例如非同步建立和刪除金鑰空間、資料表和類型。若要了解如何監控資源的建立狀態，請參閱 [檢查 Amazon Keyspaces 中的金鑰空間建立狀態](keyspaces-create.md)和 [在 Amazon Keyspaces 中檢查資料表建立狀態](tables-create.md)。如需 CQL 語言參考中的 DDL 陳述式清單，請參閱 [Amazon Keyspaces 中的 DDL 陳述式 （資料定義語言）](cql.ddl.md)。

## 身分驗證和授權
<a name="functional-differences.auth"></a>

 Amazon Keyspaces （適用於 Apache Cassandra) 使用 AWS Identity and Access Management (IAM) 進行使用者身分驗證和授權，並支援與 Apache Cassandra 同等的授權政策。因此，Amazon Keyspaces 不支援 Apache Cassandra 的安全組態命令。

## 批次
<a name="functional-differences.batch"></a>

Amazon Keyspaces 支援下列批次命令：
+ **已記錄的批次** – 每個批次最多支援 100 個命令。
+ **未記錄的批次** – 每個批次最多支援 30 個命令。

 批次中只允許 **INSERT**、 **UPDATE**或 **DELETE**命令。

## 變更資料擷取 (CDC)
<a name="functional-differences.cdc"></a>

在 Apache Cassandra 中，變更資料擷取 (CDC) 複製遞交日誌區段，以擷取節點上指定目錄的資料表更新。CDC 日誌中的每個變更記錄可以包含跨多個金鑰空間和資料表的更新。更新或刪除資料列時，Apache Cassandra CDC 日誌只會顯示修改過的資料欄。日誌不包含變更之前的先前資料狀態。若要了解資料修改的完整詳細資訊，您需要使用特定的 Cassandra 工具還原序列化這些日誌。

使用 Amazon Keyspaces CDC 串流，您可以選取 CDC 串流為每個資料列收集的資訊類型。根據預設，Amazon Keyspaces CDC 串流會在變更發生前後擷取資料列的版本。Amazon Keyspaces CDC 在資料表層級提供重複和排序的變更記錄。

在 Amazon Keyspaces 中，每個 CDC 串流都是具有 Amazon Resource Name (ARN) AWS 的資源，您的應用程式可以使用其中一個可用的[端點](CDC_access-endpoints.md)，使用 Amazon Keyspaces CDC API 來使用 Amazon Keyspaces CDC 串流。

如需 Amazon Keyspaces CDC 的詳細資訊，請參閱 [在 Amazon Keyspaces 中使用變更資料擷取 (CDC) 串流](cdc.md)。

## 叢集組態
<a name="functional-differences.cluster-config"></a>

Amazon Keyspaces 是無伺服器，因此不需要設定叢集、主機或 Java 虛擬機器 JVMs)。Cassandra 的壓縮、壓縮、快取、垃圾收集和花粉篩選設定不適用於 Amazon Keyspaces，如果指定，則會予以忽略。

## 連線
<a name="functional-differences.connections"></a>

您可以使用現有的 Cassandra 驅動程式與 Amazon Keyspaces 通訊，但您需要以不同的方式設定驅動程式。Amazon Keyspaces 每秒支援每個 TCP 連線最多 3，000 個 CQL 查詢，但驅動程式可以建立的連線數目沒有限制。

大多數開放原始碼 Cassandra 驅動程式會建立連至 Cassandra 的連線集區，並透過該連線集區進行負載平衡查詢。Amazon Keyspaces 向驅動程式公開 9 個對等 IP 地址，大多數驅動程式的預設行為是與每個對等 IP 地址建立單一連線。因此，使用預設設定的驅動程式 CQL 查詢輸送量上限為每秒 27，000 個 CQL 查詢。

若要增加此數量，建議您增加驅動程式在其連線集區中維護的每個 IP 地址的連線數量。例如，將每個 IP 地址的最大連線數設定為 2，將驅動程式的最大輸送量加倍，達到每秒 54，000 個 CQL 查詢。

最佳實務是，建議您將驅動程式設定為每個連線每秒使用 500 個 CQL 查詢，以允許額外負荷並改善分佈。在此案例中，規劃每秒 18，000 個 CQL 查詢需要 36 個連線。將驅動程式設定為跨 9 個端點的 4 個連線，可提供每秒執行 500 個請求的 36 個連線。如需連線最佳實務的詳細資訊，請參閱 [最佳化無伺服器環境的用戶端驅動程式連線](connections.md)。

與 VPC 端點連線時，可用的端點可能較少。這表示您必須增加驅動程式組態中的連線數。如需 VPC 連線最佳實務的詳細資訊，請參閱 [如何在 Amazon Keyspaces 中透過 VPC 端點設定連線](connections.md#connections.VPCendpoints)。

## `IN` 關鍵字
<a name="functional-differences.IN-keyword"></a>

Amazon Keyspaces 支援 `SELECT`陳述式中的 `IN`關鍵字。 `UPDATE`和 `IN`不支援 `DELETE`。在 `SELECT`陳述式中使用 `IN`關鍵字時，查詢的結果會依照在`SELECT`陳述式中顯示金鑰的順序傳回。在 Cassandra 中，結果會以詞典方式排序。

使用 時` ORDER BY`，不支援使用已停用分頁進行完整重新排序，並在頁面中排序結果。`IN` 關鍵字不支援配量查詢。`IN`關鍵字`TOKENS`不支援 。Amazon Keyspaces 會透過建立子查詢來使用`IN`關鍵字處理查詢。每個子查詢都算作每秒每個 TCP 連線限制 3，000 個 CQL 查詢的連線。如需詳細資訊，請參閱[在 Amazon Keyspaces 的查詢中使用 `IN`運算子搭配 `SELECT`陳述式](in.select.md)。

## `FROZEN` 集合
<a name="functional-differences.frozen-collections"></a>

Cassandra 中的`FROZEN`關鍵字會將集合資料類型的多個元件序列化為視為 的單一不可變值`BLOB`。 `INSERT`和 `UPDATE`陳述式會覆寫整個集合。

根據預設，Amazon Keyspaces 最多支援 8 個層級的凍結集合巢狀化。如需詳細資訊，請參閱[Amazon Keyspaces 服務配額](quotas.md#table)。

Amazon Keyspaces 不支援在條件式`UPDATE`或`SELECT`陳述式中使用整個凍結集合的不等式比較。Amazon Keyspaces 中集合和凍結集合的行為相同。

當您使用凍結集合搭配用戶端時間戳記時，如果寫入操作的時間戳記與未過期或已淘汰的現有資料欄的時間戳記相同，Amazon Keyspaces 不會執行比較。相反地，它可讓伺服器判斷最新的寫入器，而最新的寫入器獲勝。

如需凍結集合的詳細資訊，請參閱 [集合類型](cql.elements.md#cql.data-types.collection)。

## 輕量型交易
<a name="functional-differences.light-transactions"></a>

Amazon Keyspaces （適用於 Apache Cassandra) 完全支援在 **INSERT**、 **UPDATE**和 **DELETE**命令上比較和設定功能，這些命令在 Apache Cassandra 中稱為*輕量型交易* (LWTs)。作為無伺服器產品，Amazon Keyspaces （適用於 Apache Cassandra) 可在任何規模提供一致的效能，包括輕量型交易。使用 Amazon Keyspaces 時，使用輕量型交易不會受到效能懲罰。

## Load balancing
<a name="functional-differences.load-balancing"></a>

`system.peers` 資料表項目對應至 Amazon Keyspaces 負載平衡器。為了獲得最佳結果，我們建議您使用循環配置負載平衡政策，並調校每個 IP 的連線數，以符合應用程式的需求。

## 分頁
<a name="functional-differences.paging"></a>

Amazon Keyspaces 會根據讀取處理請求的資料列數來分頁結果，而不是結果集中傳回的資料列數。因此，某些頁面可能包含的資料列可能少於您在 PAGE SIZE 中為篩選的查詢指定的資料列。此外，Amazon Keyspaces 會在讀取 1 MB 的資料後自動分頁結果，為客戶提供一致的單一位數毫秒讀取效能。如需詳細資訊，請參閱[在 Amazon Keyspaces 中分頁結果](paginating-results.md)。

在具有靜態資料欄的資料表中，Apache Cassandra 和 Amazon Keyspaces 都會在多頁查詢中每個頁面的開頭建立分割區的靜態資料欄值。當資料表具有大型資料列時，由於 Amazon Keyspaces 分頁行為，範圍讀取操作結果傳回 Amazon Keyspaces 頁面的可能性高於 Apache Cassandra。因此，Amazon Keyspaces 中同時更新靜態資料欄的可能性較高，可能會導致範圍讀取結果集的不同頁面中的靜態資料欄值不同。

## 分割區
<a name="functional-differences.partitioners"></a>

Amazon Keyspaces 中的預設分割區是與 Cassandra 相容的 `Murmur3Partitioner`。此外，您可以選擇使用 Amazon Keyspaces `DefaultPartitioner`或 Cassandra 相容的 `RandomPartitioner`。

使用 Amazon Keyspaces，您可以安全地變更帳戶的分割區，而無需重新載入 Amazon Keyspaces 資料。組態變更完成後，大約需要 10 分鐘，用戶端會在下次連線時自動看到新的分割區設定。如需詳細資訊，請參閱[在 Amazon Keyspaces 中使用分割區](working-with-partitioners.md)。

## 備妥的陳述式
<a name="functional-differences.prepared-statements"></a>

Amazon Keyspaces 支援將預備陳述式用於資料處理語言 (DML) 操作，例如讀取和寫入資料。Amazon Keyspaces 目前不支援將預備陳述式用於資料定義語言 (DDL) 操作，例如建立資料表和金鑰空間。DDL 操作必須在預備陳述式之外執行。

## 刪除範圍
<a name="functional-differences.range-delete"></a>

**重要**  
從 2026 年 7 月 1 日開始，範圍刪除操作將從同步轉換為非同步處理。在此變更之後，成功的回應會確認您的刪除請求已被接受，但刪除可能仍在進行中。若要確認刪除已完成，請查詢指定範圍內的項目。當查詢未傳回任何結果時，刪除即完成。

Amazon Keyspaces 支援刪除範圍內的資料列。範圍是分割區內一組連續的資料列。您可以使用 WHERE 子句在 DELETE 操作中指定範圍。您可以指定範圍為整個分割區。

此外，您可以使用關聯式運算子 （例如，'>'、'<')，或包含分割區索引鍵並省略一或多個叢集資料欄，將範圍指定為分割區內連續資料列的子集。使用 Amazon Keyspaces，您可以在單一操作中刪除範圍內最多 1，000 個資料列。

範圍刪除不會隔離。正在進行範圍刪除時，其他操作可以看到個別的資料列刪除。

## 系統表
<a name="functional-differences.system-tables"></a>

Amazon Keyspaces 會填入 Apache 2.0 開放原始碼 Cassandra 驅動程式所需的系統資料表。用戶端可見的系統資料表包含已驗證使用者唯一的資訊。系統資料表完全由 Amazon Keyspaces 控制，且為唯讀。如需詳細資訊，請參閱[Amazon Keyspaces 中的系統金鑰空間](working-with-keyspaces.md)。

系統資料表需要唯讀存取權，您可以使用 IAM 存取政策來控制它。如需詳細資訊，請參閱[使用政策管理存取權](security-iam.md#security_iam_access-manage)。您必須根據透過 Cassandra 驅動程式和開發人員工具使用 AWS SDK 或 Cassandra 查詢語言 (CQL) API 呼叫，以不同的方式定義系統資料表的標籤型存取控制政策。若要進一步了解系統資料表的標籤型存取控制，請參閱 [根據標籤的 Amazon Keyspaces 資源存取](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-tags)。

如果您使用 Amazon [VPC 端點](vpc-endpoints.md)存取 Amazon Keyspaces，您會在 `system.peers` Amazon Keyspaces 有權查看的每個 Amazon VPC 端點表格中看到項目。因此，您的 Cassandra 驅動程式可能會發出有關`system.peers`資料表中控制節點本身的[警告訊息](vpc-endpoints.md#vpc_troubleshooting)。您可以安全地忽略此警告。

## 時間戳記
<a name="functional-differences.timestamps"></a>

在 Amazon Keyspaces 中，與 Apache Cassandra 中的預設時間戳記相容的儲存格層級時間戳記是一項選擇加入功能。

只有在資料表的用戶端時間戳記開啟時，才能使用 `USING TIMESTAMP`子句和 `WRITETIME`函數。若要進一步了解 Amazon Keyspaces 中的用戶端時間戳記，請參閱 [Amazon Keyspaces 中的用戶端時間戳記](client-side-timestamps.md)。

## 使用者定義的類型 (UDTs)
<a name="functional-differences.UDTs"></a>

Amazon Keyspaces 中的 UDTs 不支援不等式運算子。

若要了解如何在 UDTs，請參閱 [Amazon Keyspaces 中使用者定義的類型 (UDT)](udts.md)。

若要檢閱每個金鑰空間支援的 UDTs 數量、支援的巢狀層級，以及其他與 UDTs 相關的預設值和配額，請參閱 [Amazon Keyspaces 中使用者定義類型 (UDTs) 的配額和預設值](quotas.md#quotas-udts)。