

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

# 什麼是 Amazon Keyspaces （適用於 Apache Cassandra)？
<a name="what-is-keyspaces"></a>

 Amazon Keyspaces （適用於 Apache Cassandra) 是一種可擴展、高可用性且受管的 Apache Cassandra 相容資料庫服務。使用 Amazon Keyspaces，您不需要佈建、修補或管理伺服器，也不需要安裝、維護或操作軟體。

Amazon Keyspaces 是無伺服器，因此您只需支付使用的資源，服務會自動擴展和縮減資料表，以回應應用程式流量。您可以建置應用程式，透過幾乎無限制的輸送量和儲存，每秒為數千個請求提供服務。

**注意**  
 Apache Cassandra 是開放原始碼的廣欄資料存放區，旨在處理大量資料。如需詳細資訊，請參閱 [Apache Cassandra](http://cassandra.apache.org/)。

Amazon Keyspaces 可讓您在 中輕鬆遷移、執行和擴展 Cassandra 工作負載 AWS 雲端。只要按幾下 AWS 管理主控台或幾行程式碼，您就可以在 Amazon Keyspaces 中建立金鑰空間和資料表，而無需部署任何基礎設施或安裝軟體。

使用 Amazon Keyspaces，您可以使用您目前使用的 AWS 相同 Cassandra 應用程式程式碼和開發人員工具，在 上執行現有的 Cassandra 工作負載。

透過 Github 上提供的 [Amazon Keyspaces （適用於 Apache Cassandra) 定價計算器](https://aws-samples.github.io/sample-pricing-calculator-for-keyspaces/#cassandra)，您可以根據現有的 Apache Cassandra 工作負載預估 Amazon Keyspaces 的每月成本。輸入來自 Cassandra Nodetool 狀態輸出的指標和 Amazon Keyspaces 的預期無伺服器組態，以比較兩個解決方案之間的直接成本。請注意，相較於現有的 Cassandra 部署，此計算器僅著重於 Amazon Keyspaces 的操作成本。它不包括基礎設施維護、營運開銷或 Cassandra 支援成本等總體擁有成本 (TCO) 因素。

如需可用 AWS 區域 和 端點的清單，請參閱 [Amazon Keyspaces 的服務端點](https://docs.aws.amazon.com/keyspaces/latest/devguide/programmatic.endpoints.html)。

我們建議您先閱讀以下章節：

**Topics**
+ [

# Amazon Keyspaces：運作方式
](how-it-works.md)
+ [

# Amazon Keyspaces 使用案例
](use-cases.md)
+ [

# 什麼是 Cassandra 查詢語言 (CQL)？
](what-is-cql.md)

# Amazon Keyspaces：運作方式
<a name="how-it-works"></a>

Amazon Keyspaces 消除管理 Cassandra 的管理開銷。若要了解原因，從 Cassandra 架構開始，然後將其與 Amazon Keyspaces 進行比較會很有幫助。

**Topics**
+ [

## 高階架構：Apache Cassandra 與 Amazon Keyspaces
](#how-it-works.cassandra-arch)
+ [

## Cassandra 資料模型
](#how-it-works.data-model)
+ [

## 從應用程式存取 Amazon Keyspaces
](#how-it-works.keyspaces-arch.accessing)

## 高階架構：Apache Cassandra 與 Amazon Keyspaces
<a name="how-it-works.cassandra-arch"></a>

 傳統 Apache Cassandra 部署在由一或多個節點組成的叢集中。您負責管理每個節點，並在叢集擴展時新增和移除節點。

用戶端程式透過連線至其中一個節點並發出 Cassandra 查詢語言 (CQL) 陳述式來存取 Cassandra。*CQL* 類似於 SQL，這是關聯式資料庫中使用的常用語言。即使 Cassandra 不是關聯式資料庫，CQL 也提供熟悉的界面來查詢和操作 Cassandra 中的資料。

下圖顯示簡單的 Apache Cassandra 叢集，由四個節點組成。

![\[包含 4 個節點並與用戶端應用程式互動的 Apache Cassandra 叢集圖表。\]](http://docs.aws.amazon.com/zh_tw/keyspaces/latest/devguide/images/keyspaces_cassandra-hi-level.png)


生產 Cassandra 部署可能包含數百個節點，在一個或多個實體資料中心的數百部實體電腦上執行。這可能會對需要佈建、修補和管理伺服器的應用程式開發人員造成操作負擔，以及安裝、維護和操作軟體。

使用 Amazon Keyspaces （適用於 Apache Cassandra)，您不需要佈建、修補或管理伺服器，因此您可以專注於建置更好的應用程式。Amazon Keyspaces 為讀取和寫入提供兩種輸送量容量模式：隨需和佈建。您可以選擇資料表的輸送量容量模式，根據工作負載的可預測性和可變性來最佳化讀取和寫入的價格。

使用隨需模式時，您只需支付應用程式實際執行的讀取和寫入費用。您不需要事先指定資料表的輸送量容量。Amazon Keyspaces 會在應用程式流量上升或下降時，幾乎立即容納您的應用程式流量，使其成為具有不可預測流量之應用程式的理想選擇。

如果您有可預測的應用程式流量，佈建的容量模式可協助您最佳化輸送量價格，並可事先預測資料表的容量需求。使用佈建容量模式時，您可以指定您預期應用程式執行的每秒讀取和寫入次數。您可以啟用自動[擴展](https://docs.aws.amazon.com/keyspaces/latest/devguide/autoscaling.html)，自動增加和減少資料表的佈建容量。

當您進一步了解工作負載的流量模式時，或如果您預期流量暴增，例如您預期會驅動大量資料表流量的主要事件，您可以每天變更一次資料表的容量模式。如需讀取和寫入容量佈建的詳細資訊，請參閱[在 Amazon Keyspaces 中設定讀取/寫入容量模式](ReadWriteCapacityMode.md)。

Amazon Keyspaces （適用於 Apache Cassandra) 會將資料的三個副本存放在多個[可用區域中](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)，以提供耐用性和高可用性。此外，您還可以受益於資料中心和網路架構，該架構專為滿足最安全敏感組織的需求而建置。當您建立新的 Amazon Keyspaces 資料表且所有用戶端連線都需要 Transport Layer Security (TLS) 時，會自動啟用靜態加密。其他 AWS 安全功能包括[監控](https://docs.aws.amazon.com/keyspaces/latest/devguide/monitoring.html)[AWS Identity and Access Management](https://docs.aws.amazon.com/keyspaces/latest/devguide/security_iam_service-with-iam.html)、 和[虛擬私有雲端 (VPC) 端點](https://docs.aws.amazon.com/keyspaces/latest/devguide/vpc-endpoints.html)。如需所有可用安全功能的概觀，請參閱 [Amazon Keyspaces 的安全性 （適用於 Apache Cassandra)](security.md)。

下圖顯示 Amazon Keyspaces 的架構。

![\[與用戶端應用程式互動的 Amazon Keyspaces 圖表。\]](http://docs.aws.amazon.com/zh_tw/keyspaces/latest/devguide/images/keyspaces-hi-level.png)


用戶端程式透過連線至預定端點 （主機名稱和連接埠號碼） 並發出 CQL 陳述式來存取 Amazon Keyspaces。如需可用端點的清單，請參閱 [Amazon Keyspaces 的服務端點](programmatic.endpoints.md)。

## Cassandra 資料模型
<a name="how-it-works.data-model"></a>

如何為業務案例建立資料模型，對於從 Amazon Keyspaces 實現最佳效能至關重要。不良的資料模型可能會大幅降低效能。

即使 CQL 看起來與 SQL 類似，Cassandra 和關聯式資料庫的後端也非常不同，必須以不同的方式處理。以下是一些較重要的問題需要考慮：

**儲存**  
您可以在資料表中視覺化 Cassandra 資料，其中每一列代表記錄，每一欄都代表該記錄內的欄位。

**資料表設計：先查詢**  
CQL `JOIN`中沒有 。因此，您應該設計具有資料形狀的資料表，以及如何針對業務使用案例存取資料表。這可能會導致重複資料的去標準化。您應該專門針對特定存取模式設計每個資料表。

**分區**  
 您的資料會存放在磁碟的分割區中。資料存放於 中的分割區數量，以及其在分割區間的分佈方式，取決於您的*分割區索引鍵*。如何定義分割區索引鍵可能會對查詢的效能產生重大影響。如需最佳實務做法，請參閱「[如何在 Amazon Keyspaces 中有效使用分割區金鑰](bp-partition-key-design.md)」。

**主索引鍵**  
在 Cassandra 中，資料會儲存為索引鍵/值對。每個 Cassandra 資料表都必須有一個主索引鍵，這是資料表中每一列的唯一索引鍵。主索引鍵是必要分割區索引鍵和選用叢集資料欄的複合。包含主索引鍵的資料在資料表中的所有記錄中必須是唯一的。  
+ **分割區索引**鍵 – 需要主索引鍵的分割區索引鍵部分，並決定資料存放於叢集的哪個分割區。分割區索引鍵可以是單一資料欄，也可以是由兩個或多個資料欄組成的複合值。如果單一資料欄分割區索引鍵會導致單一分割區或具有大部分資料的極少分割區，因此包含大部分磁碟 I/O 操作，則您會使用複合分割區索引鍵。
+ **叢集資料欄** – 主索引鍵的選用叢集資料欄部分會決定如何在每個分割區中叢集和排序資料。如果您在主索引鍵中包含叢集資料欄，叢集資料欄可以有一或多個資料欄。如果叢集資料欄中有多個資料欄，排序順序取決於從左到右在叢集資料欄中列出的資料欄順序。

如需 NoSQL 設計和 Amazon Keyspaces 的詳細資訊，請參閱 [NoSQL 設計的主要差異和設計原則](bp-general-nosql-design.md)。如需 Amazon Keyspaces 和資料建模的詳細資訊，請參閱 [資料建模最佳實務：設計資料模型的建議](data-modeling.md)。

## 從應用程式存取 Amazon Keyspaces
<a name="how-it-works.keyspaces-arch.accessing"></a>

Amazon Keyspaces （適用於 Apache Cassandra) 實作 Apache Cassandra 查詢語言 (CQL) API，因此您可以使用您已使用的 CQL 和 Cassandra 驅動程式。更新您的應用程式就像更新您的 Cassandra 驅動程式或`cqlsh`組態以指向 Amazon Keyspaces 服務端點一樣簡單。如需所需憑證的詳細資訊，請參閱 [建立和設定 Amazon Keyspaces 的 AWS 登入資料](access.credentials.md)。

**注意**  
為了協助您開始使用，您可以在 [GitHub](https://github.com/aws-samples/amazon-keyspaces-examples) 上的 Amazon Keyspaces 程式碼範例儲存庫中使用各種 Cassandra 用戶端驅動程式，尋找連接至 Amazon Keyspaces 的end-to-end程式碼範例。

 請考慮下列 Python 程式，其會連線至 Cassandra 叢集並查詢資料表。

```
from cassandra.cluster import Cluster
#TLS/SSL configuration goes here

ksp = 'MyKeyspace'
tbl = 'WeatherData'

cluster = Cluster(['NNN.NNN.NNN.NNN'], port=NNNN)
session = cluster.connect(ksp)

session.execute('USE ' + ksp)

rows = session.execute('SELECT * FROM ' +  tbl)
for row in rows:
    print(row)
```

若要針對 Amazon Keyspaces 執行相同的程式，您需要：
+  **新增叢集端點和連接埠**：例如，主機可以替換為服務端點，例如 `cassandra.us-east-1.amazonaws.com`和連接埠號碼為：`9142`。
+  **新增 TLS/SSL 組態**：如需使用 Cassandra 用戶端 Python 驅動程式新增 TLS/SSL 組態以連線至 Amazon Keyspaces 的詳細資訊，請參閱 [使用 Cassandra Python 用戶端驅動程式以程式設計方式存取 Amazon Keyspaces](using_python_driver.md)。

# Amazon Keyspaces 使用案例
<a name="use-cases"></a>

以下是您可以使用 Amazon Keyspaces 的一些方式：
+  **建置需要低延遲的應用程式** – 以高速處理需要single-digit-millisecond延遲的應用程式資料，例如工業設備維護、交易監控、機群管理和路由最佳化。
+  **使用開放原始碼技術建置應用程式**： AWS 使用適用於多種程式設計語言的開放原始碼 Cassandra APIs 和驅動程式，在 上建置應用程式，例如 Java、Python、Ruby、Microsoft .NET、Node.js、PHP、C\$1\$1、Perl 和 Go。如需程式碼範例，請參閱 [Amazon Keyspaces （適用於 Apache Cassandra) 程式庫和工具](examples-tools.md)。
+  **將您的 Cassandra 工作負載移至雲端** – 自行管理 Cassandra 資料表既耗時又昂貴。使用 Amazon Keyspaces，您可以在 中設定、保護和擴展 Cassandra 資料表， AWS 雲端 而無需管理基礎設施。如需詳細資訊，請參閱[在 Amazon Keyspaces 中管理無伺服器資源 （適用於 Apache Cassandra)](serverless_resource_management.md)。

# 什麼是 Cassandra 查詢語言 (CQL)？
<a name="what-is-cql"></a>

*Cassandra 查詢語言* (CQL) 是與 Apache Cassandra 通訊的主要語言。Amazon Keyspaces （適用於 Apache Cassandra) 與 CQL 3.x API （與 2.x 版回溯相容） 相容。

在 CQL 中，資料存放在資料表、資料欄和資料列中。在此意義上，CQL 類似於結構化查詢語言 (SQL)。這些是 CQL 中的重要概念。
+ **CQL 元素** – CQL 的基本元素是識別符、常數、術語和資料類型。
+ **資料定義語言 (DDL)** – DDL 陳述式用於管理資料結構，例如 Amazon Keyspaces 中的 AWS 資源的金鑰空間和資料表。DDL 陳述式是其中的控制平面操作 AWS。
+ **資料處理語言 (DML) ** – DML 陳述式用於管理資料表中的資料。DML 陳述式用於選取、插入、更新和刪除資料。這些是 中的資料平面操作 AWS。
+ **內建函數** – Amazon Keyspaces 支援各種內建純量函數，可用於 CQL 陳述式。

如需 CQL 的詳細資訊，請參閱 [Amazon Keyspaces 的 CQL 語言參考 （適用於 Apache Cassandra)](cql.md)。如需 Apache Cassandra 的功能差異，請參閱 [功能差異：Amazon Keyspaces 與 Apache Cassandra](functional-differences.md)。

若要執行 CQL 查詢，您可以執行下列其中一項操作：
+ 使用 中的 CQL 編輯器 AWS 管理主控台。
+ 使用 AWS CloudShell 和 [cqlsh-expansion](programmatic.cqlsh.md#using_cqlsh)。
+ 使用`cqlsh`用戶端。
+ 使用 Apache 2.0 授權的 Cassandra 用戶端驅動程式。

除了 CQL 之外，您還可以使用 AWS SDKs和 在 Amazon Keyspaces 中執行資料定義語言 (DDL) 操作 AWS Command Line Interface。

如需使用這些方法來存取 Amazon Keyspaces 的詳細資訊，請參閱 [存取 Amazon Keyspaces （適用於 Apache Cassandra)](accessing.md)。