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 的示意圖。

Keyspace

列族

列族是有序行集合的容器。每一行反過來是有序列的集合。下表列出了將列族與關係資料庫的表區分開來的要點。

關係表 Cassandra 列族
關係模型中的模式是固定的。一旦我們為表定義了某些列,在插入資料時,每一行都必須至少用空值填充所有列。 在 Cassandra 中,儘管定義了列族,但列卻沒有。您可以隨時自由地向任何列族新增任何列。
關係表僅定義列,使用者使用值填充表。 在 Cassandra 中,表包含列,或者可以定義為超級列族。

Cassandra 列族具有以下屬性:

  • keys_cached - 它表示每個 SSTable 要快取的位置數量。

  • rows_cached - 它表示其整個內容將快取到記憶體中的行數。

  • preload_row_cache - 它指定是否要預填充行快取。

注意 - 與關係表(列族的模式不固定)不同,Cassandra 不會強制單個行具有所有列。

下圖顯示了 Cassandra 列族的示例。

Cassandra Column Family

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

Cassandra Structure Of Column

超級列

超級列是一種特殊的列,因此它也是鍵值對。但是超級列儲存子列的對映。

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

Cassandra Super Column

Cassandra 和 RDBMS 的資料模型

下表列出了將 Cassandra 的資料模型與 RDBMS 的資料模型區分開來的要點。

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