概觀
Apache Cassandra 是一個開放原始碼、分散式 NoSQL 資料庫。它實作了一個分區廣欄儲存模型,具有最終一致的語意。
Cassandra 最初是在 Facebook 使用分階段事件驅動架構 (SEDA) 設計的。此初始設計實作了 Amazon 的 Dynamo 分散式儲存和複製技術與 Google 的 Bigtable 資料和儲存引擎模型的組合。Dynamo 和 Bigtable 都是為了滿足可擴充、可靠且高可用性儲存系統的新興需求而開發的,但每個都有可以改進的地方。
Apache Cassandra 被設計為兩者最佳組合,以滿足新興的大規模資料足跡和查詢量儲存需求。由於應用程式開始需要完整的全球複製和始終可用的低延遲讀取和寫入,因此需要一種新的資料庫模型來滿足這些新需求。當時的關聯式資料庫系統難以滿足這些需求。
Apache Cassandra 被設計為滿足這些挑戰,並考量以下設計目標
-
完整的多主資料庫複製
-
低延遲的全球可用性
-
在商品硬體上擴充
-
每個額外處理器線性增加吞吐量
-
線上負載平衡和叢集擴充
-
以分區鍵為導向的查詢
-
彈性架構
功能
Cassandra 提供類 SQL 語言 Cassandra 查詢語言 (CQL),用於建立、修改和刪除資料庫架構,以及存取資料。CQL 讓使用者可以使用下列方式在 Cassandra 節點叢集中整理資料
-
鍵空間:定義資料集如何根據資料中心進行複製。複製是每個叢集儲存的副本數量。鍵空間包含資料表。
-
資料表:資料表由列和欄組成。欄定義資料表中單一資料的型別架構。資料表會根據分區鍵中提供的欄進行分區。Cassandra 資料表可以彈性地將新欄新增至資料表,且無停機時間。
-
分區:定義 Cassandra 中所有列必須具有的主鍵的強制部分,以識別叢集中儲存列的節點。所有效能良好的查詢都會在查詢中提供分區鍵。
-
列:包含由唯一主鍵識別的欄集合,該主鍵由分區鍵和額外的叢集鍵(如果有的話)組成。
-
欄:屬於列的單一資料,具有型別。
CQL 支援許多進階功能,包括分區資料集,例如
-
集合型別,包括集合、對應和清單
-
使用者定義的型別、組、函數和聚合
-
儲存附加索引 (SAI),用於次要索引
-
本機次要索引 (2i)
-
使用者定義的型別、函數和聚合
-
單一分區輕量級交易,具有原子比較和設定語意
-
(實驗性)具象化檢視
Cassandra 明確選擇不實作需要跨分區協調的作業,因為它們通常很慢且難以提供高度可用的全域語意。例如,Cassandra 不支援
-
跨分區交易
-
分散式聯結
-
外來鍵或參考完整性。
操作
Apache Cassandra 組態設定會在 cassandra.yaml
檔案中組態,可以手動編輯或使用組態管理工具協助編輯。有些設定可以使用線上介面進行即時操作,但其他設定則需要重新啟動資料庫才能生效。
Cassandra 提供管理叢集的工具。nodetool
指令會與 Cassandra 的即時控制介面互動,允許從 cassandra.yaml
執行許多設定的執行時間操作。auditlogviewer
用於檢視稽核記錄。fqltool
用於檢視、重播和比較完整的查詢記錄。
此外,Cassandra 支援開箱即用的原子快照功能,可提供 Cassandra 資料的時間點 (PIT) 快照,以便輕鬆與許多備份工具整合。Cassandra 也支援增量備份,資料可以在寫入時備份。