從 Apache Cassandra 遷移至 Bigtable
本文將逐步說明如何將資料從 Apache Cassandra 遷移至 Bigtable,並將中斷情況降至最低。本文說明如何使用開放原始碼工具 (例如 Cassandra to Bigtable Proxy 介面卡或 Cassandra to Bigtable Java 用戶端) 執行遷移作業。開始之前,請務必先熟悉適用於 Cassandra 使用者的 Bigtable。
Cassandra 至 Bigtable 代理伺服器介面卡
透過 Cassandra to Bigtable Proxy 介面卡,您可以將以 Cassandra 為基礎的應用程式連線至 Bigtable。Proxy 轉接程式可做為線路相容的 Cassandra 介面,讓應用程式使用 Cassandra 查詢語言 (CQL) 與 Bigtable 互動。使用 Proxy 介面卡時,您不必變更 Cassandra 驅動程式,設定調整幅度也很小。
如要設定及設定 Proxy 轉接程式,請參閱「Cassandra to Bigtable proxy adapter」。
如要瞭解哪些 Cassandra 版本支援 Proxy 配接器,請參閱「支援的 Cassandra 版本」。
Cassandra 鍵空間
Cassandra keyspace 會儲存資料表,並以類似 Bigtable 執行個體的方式管理資源。Cassandra 到 Bigtable 的 Proxy 配接器會以透明方式處理鍵空間命名,因此您可以使用相同的鍵空間進行查詢。不過,您必須建立新的 Bigtable 執行個體,才能以邏輯方式將資料表分組。您也必須另外設定 Bigtable 複製功能。
支援的資料類型
下表顯示支援的 Cassandra CQL 資料類型如何對應至 Bigtable 等效類型。
CQL 類型 | Bigtable 對應 |
---|---|
text |
RAW BYTES |
blob |
RAW BYTES |
timestamp |
RAW BYTES |
int |
RAW BYTES |
bigint |
RAW BYTES |
float |
RAW BYTES |
double |
RAW BYTES |
boolean |
RAW BYTES |
MAP<key, value> |
Cassandra 中的資料欄名稱會做為 Bigtable 中的資料欄系列名稱。對應的 key 會做為資料欄限定詞,而對應的 value 則會儲存為儲存格值。 |
SET<item> |
Cassandra 中的資料欄名稱會做為 Bigtable 中的資料欄系列名稱。SET 中的每個 item 都會做為資料欄限定符,而儲存格值則會留空。 |
LIST<item> |
Cassandra 中的資料欄名稱會做為 Bigtable 中的資料欄系列名稱。系統會使用目前的時間戳記做為資料欄限定詞,並將清單項目儲存為儲存格值。 |
如要進一步瞭解 Bigtable 中的資料類型對應,請參閱 GoogleSQL for Bigtable 總覽。
不支援的資料類型
系統不支援下列 Cassandra 資料類型:
counter
date
decimal
duration
frozen
inet
smallint
time
timeuuid
tinyint
US-ASCII
user-defined
類型 (UDT)uuid
varint
DDL 支援
Cassandra to Bigtable Proxy 介面卡支援資料定義語言 (DDL) 作業。您可以使用 DDL 作業,透過 CQL 指令直接建立及管理資料表。建議您採用這種方式設定結構定義,因為這與 SQL 類似,但您不需要在設定檔中定義結構定義,然後執行指令碼來建立資料表。
下列範例說明 Cassandra 至 Bigtable Proxy 配接器如何支援 DDL 作業:
如要使用 CQL 建立 Cassandra 資料表,請執行
CREATE TABLE
指令:CREATE TABLE keyspace.table ( id bigint, name text, age int, PRIMARY KEY ((id), name) );
如要在表格中新增資料欄,請執行
ALTER TABLE
指令:ALTER TABLE keyspace.table ADD email text;
如要刪除資料表,請執行
DROP TABLE
指令:DROP TABLE keyspace.table;
詳情請參閱「DDL Support for Schema Creation (Recommended Method)」。
支援 DML
Cassandra 至 Bigtable 的 Proxy 轉接程式支援資料操作語言 (DML) 作業,例如 INSERT
、DELETE
、UPDATE
和 SELECT
。
如要執行原始 DML 查詢,除了數值以外的所有值都必須加上單引號,如下列範例所示:
SELECT * FROM keyspace.table WHERE name='john doe';
INSERT INTO keyspace.table (id, name) VALUES (1, 'john doe');
實現零停機時間遷移
搭配使用 Cassandra to Bigtable Proxy 配接器、開放原始碼的 Zero Downtime Migration (ZDM) Proxy 工具和 Cassandra 資料遷移工具,即可在最短的停機時間內遷移資料。
下圖顯示使用 Proxy 轉接程式從 Cassandra 遷移至 Bigtable 的步驟:


如要將 Cassandra 遷移至 Bigtable,請按照下列步驟操作:
- 將 Cassandra 應用程式連線至 ZDM Proxy 工具。
- 啟用雙重寫入 Cassandra 和 Bigtable。
- 使用 Cassandra 資料遷移工具大量移動資料。
- 驗證遷移作業。驗證完成後,即可終止與 Cassandra 的連線,並直接連線至 Bigtable。
將 Proxy 轉接器與 ZDM Proxy 工具搭配使用時,支援下列遷移功能:
- 雙重寫入:在遷移期間維持資料可用性
- 非同步讀取:擴大及壓力測試 Bigtable 執行個體
- 自動驗證及回報資料:確保整個程序中的資料完整性
- 資料對應:對應欄位和資料類型,以符合製作標準
如要練習將 Cassandra 遷移至 Bigtable,請參閱「使用雙重寫入 Proxy 從 Cassandra 遷移至 Bigtable」程式碼研究室。
適用於 Java 的 Cassandra 至 Bigtable 用戶端
如要直接與 Bigtable 整合並取代 Cassandra 驅動程式,您可以使用適用於 Java 的 Cassandra to Bigtable 用戶端程式庫,透過 CQL 將以 Cassandra 為基礎的 Java 應用程式與 Bigtable 整合。
如需建構程式庫,以及在應用程式程式碼中加入依附元件的操作說明,請參閱「適用於 Java 的 Cassandra to Bigtable 用戶端」。
以下範例說明如何使用 Java 適用的 Cassandra to Bigtable 用戶端設定應用程式:
其他 Cassandra 開放原始碼工具
Cassandra 至 Bigtable 代理程式配接器與 CQL 的線路相容性,可讓您在 Cassandra 開放原始碼生態系統中使用其他工具。這些工具包括:
- Cqlsh:CQL Shell 可讓您透過 Proxy 轉接程式直接連線至 Bigtable。您可以使用 CQL 進行偵錯及快速查詢資料。
- Cassandra 資料遷移工具 (CDM): 這項工具以 Spark 為基礎,適合遷移大量 (最多數十億列) 歷來資料。這項工具提供驗證、差異報表和重播功能,且與 Proxy 轉接程式完全相容。