
- Cassandra 教程
- Cassandra - 首頁
- Cassandra - 簡介
- Cassandra - 架構
- Cassandra - 資料模型
- Cassandra - 安裝
- Cassandra - 參考 API
- Cassandra - Cqlsh
- Cassandra - Shell 命令
- Cassandra Keyspace 操作
- Cassandra - 建立 Keyspace
- Cassandra - 修改 Keyspace
- Cassandra - 刪除 Keyspace
- Cassandra 表操作
- Cassandra - 建立表
- Cassandra - 修改表
- Cassandra - 刪除表
- Cassandra - 截斷表
- Cassandra - 建立索引
- Cassandra - 刪除索引
- Cassandra - 批處理
- Cassandra CURD 操作
- Cassandra - 建立資料
- Cassandra - 更新資料
- Cassandra - 讀取資料
- Cassandra - 刪除資料
- Cassandra CQL 型別
- Cassandra - CQL 資料型別
- Cassandra - CQL 集合
- CQL 使用者自定義資料型別
- Cassandra 有用資源
- Cassandra - 快速指南
- Cassandra - 有用資源
- Cassandra - 討論
Cassandra - 資料模型
Cassandra 的資料模型與我們在關係資料庫管理系統 (RDBMS) 中通常看到的模型顯著不同。本章概述了 Cassandra 如何儲存其資料。
叢集
Cassandra 資料庫分佈在多臺協同工作的機器上。最外層的容器稱為叢集。為了處理故障,每個節點都包含一個副本,在發生故障的情況下,副本將接管。Cassandra 以環形格式在叢集中排列節點,並將資料分配給它們。
Keyspace
Keyspace 是 Cassandra 中資料的最外層容器。Cassandra 中 Keyspace 的基本屬性有:
複製因子 - 它是在叢集中將接收相同資料副本的機器數量。
副本放置策略 - 它就是放置副本到環中的策略。我們有諸如簡單策略(機架感知策略)、舊網路拓撲策略(機架感知策略)和網路拓撲策略(資料中心共享策略)等策略。
列族 - Keyspace 是一個或多個列族的容器。列族反過來是行集合的容器。每一行都包含有序的列。列族表示資料的結構。每個 Keyspace 至少有一個,通常有多個列族。
建立 Keyspace 的語法如下:
CREATE KEYSPACE Keyspace name WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
下圖顯示了 Keyspace 的示意圖。

列族
列族是有序行集合的容器。每一行反過來是有序列的集合。下表列出了將列族與關係資料庫的表區分開來的要點。
關係表 | Cassandra 列族 |
---|---|
關係模型中的模式是固定的。一旦我們為表定義了某些列,在插入資料時,每一行都必須至少用空值填充所有列。 | 在 Cassandra 中,儘管定義了列族,但列卻沒有。您可以隨時自由地向任何列族新增任何列。 |
關係表僅定義列,使用者使用值填充表。 | 在 Cassandra 中,表包含列,或者可以定義為超級列族。 |
Cassandra 列族具有以下屬性:
keys_cached - 它表示每個 SSTable 要快取的位置數量。
rows_cached - 它表示其整個內容將快取到記憶體中的行數。
preload_row_cache - 它指定是否要預填充行快取。
注意 - 與關係表(列族的模式不固定)不同,Cassandra 不會強制單個行具有所有列。
下圖顯示了 Cassandra 列族的示例。

列
列是 Cassandra 的基本資料結構,具有三個值,即鍵或列名、值和時間戳。以下是列的結構。

超級列
超級列是一種特殊的列,因此它也是鍵值對。但是超級列儲存子列的對映。
通常列族儲存在磁碟上的各個檔案中。因此,為了最佳化效能,將您可能一起查詢的列儲存在同一個列族中非常重要,而超級列在這裡可以提供幫助。以下是超級列的結構。

Cassandra 和 RDBMS 的資料模型
下表列出了將 Cassandra 的資料模型與 RDBMS 的資料模型區分開來的要點。
RDBMS | Cassandra |
---|---|
RDBMS 處理結構化資料。 | Cassandra 處理非結構化資料。 |
它具有固定模式。 | Cassandra 具有靈活的模式。 |
在 RDBMS 中,表是陣列的陣列。(行 x 列) | 在 Cassandra 中,表是“巢狀鍵值對”的列表。(行 x 列鍵 x 列值) |
資料庫是最外層容器,包含與應用程式對應的資料。 | Keyspace 是最外層容器,包含與應用程式對應的資料。 |
表是資料庫的實體。 | 表或列族是 Keyspace 的實體。 |
行是 RDBMS 中的單個記錄。 | 行是 Cassandra 中的複製單元。 |
列表示關係的屬性。 | 列是 Cassandra 中的儲存單元。 |
RDBMS 支援外部索引鍵、連線的概念。 | 關係使用集合表示。 |