Cassandra 數(shù)據(jù)模型

2021-01-27 14:45 更新

Cassandra 的數(shù)據(jù)模型與我們通常在 RDBMS 中看到的數(shù)據(jù)模型有很大的不同。本章介紹了 Cassandra 如何存儲(chǔ)數(shù)據(jù)的概述。

集群(Cluster)

Cassandra 數(shù)據(jù)庫分布在幾個(gè)一起操作的機(jī)器上。最外層容器被稱為群集。對(duì)于故障處理,每個(gè)節(jié)點(diǎn)包含一個(gè)副本,如果發(fā)生故障,副本將復(fù)制。Cassandra 按照環(huán)形格式將節(jié)點(diǎn)排列在集群中,并為它們分配數(shù)據(jù)。

鍵空間 (Keyspace)

鍵空間是 Cassandra 中數(shù)據(jù)的最外層容器。Cassandra 中的一個(gè)鍵空間的基本屬性是 - 

  • 復(fù)制因子 - 它是集群中將接收相同數(shù)據(jù)副本的計(jì)算機(jī)數(shù)。

  • 副本放置策略 - 它只是把副本放在介質(zhì)中的策略。我們有簡單策略(機(jī)架感知策略),舊網(wǎng)絡(luò)拓?fù)洳呗裕C(jī)架感知策略)和網(wǎng)絡(luò)拓?fù)洳呗裕〝?shù)據(jù)中心共享策略)等策略。

  • 列族 - 鍵空間是一個(gè)或多個(gè)列族的列表的容器。列族又是一個(gè)行集合的容器。每行包含有序列。列族表示數(shù)據(jù)的結(jié)構(gòu)。每個(gè)鍵空間至少有一個(gè),通常是許多列族。

創(chuàng)建鍵空間的語法如下 -

CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};

下圖顯示了鍵空間的示意圖。

KEYSPACE

列族

列族是有序收集行的容器。每一行又是一個(gè)有序的列集合。下表列出了區(qū)分列系列和關(guān)系數(shù)據(jù)庫表的要點(diǎn)。

關(guān)系表Cassandra 列族
關(guān)系模型中的模式是固定的。 一旦為表定義了某些列,在插入數(shù)據(jù)時(shí),在每一行中,所有列必須至少填充一個(gè)空值。

在 Cassandra 中,雖然定義了列族,但列不是。 您可以隨時(shí)向任何列族自由添加任何列。

關(guān)系表只定義列,用戶用值填充表。在 Cassandra 中,表包含列,或者可以定義為超級(jí)列族。

Cassandra 列族具有以下屬性 -

  • keys_cached - 它表示每個(gè) SSTable 保持緩存的位置數(shù)。

  • rows_cached它表示其整個(gè)內(nèi)容將在內(nèi)存中緩存的行數(shù)。

  • preload_row_cache -它指定是否要預(yù)先填充行緩存。

注 - 與不是固定列族的模式的關(guān)系表不同,Cassandra 不強(qiáng)制單個(gè)行擁有所有列。

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

卡桑德拉柱族


列是 Cassandra 的基本數(shù)據(jù)結(jié)構(gòu),具有三個(gè)值,即鍵或列名稱,值和時(shí)間戳。下面給出了列的結(jié)構(gòu)。

卡桑德拉結(jié)構(gòu)柱

超級(jí)列

超級(jí)列是一個(gè)特殊列,因此,它也是一個(gè)鍵值對(duì)。但是超級(jí)列存儲(chǔ)了子列的地圖。

通常列族被存儲(chǔ)在磁盤上的單個(gè)文件中。因此,為了優(yōu)化性能,重要的是保持您可能在同一列族中一起查詢的列,并且超級(jí)列在此可以有所幫助。下面是超級(jí)列的結(jié)構(gòu)。

卡桑德拉超級(jí)列

Cassandra 和 RDBMS 的數(shù)據(jù)模型

下表列出了區(qū)分 Cassandra 的數(shù)據(jù)模型和 RDBMS 的數(shù)據(jù)模型的要點(diǎn)。

RDBMSCassandra
RDBMS 處理結(jié)構(gòu)化數(shù)據(jù)。Cassandra 處理非結(jié)構(gòu)化數(shù)據(jù)。
它具有固定的模式。Cassandra 具有靈活的架構(gòu)。
在 RDBMS 中,表是一個(gè)數(shù)組的數(shù)組。 (ROW x COLUMN在 Cassandra 中,表是“嵌套的鍵值對(duì)”的列表。 (ROW x COLUMN 鍵 x COLUMN 值)
數(shù)據(jù)庫是包含與應(yīng)用程序?qū)?yīng)的數(shù)據(jù)的最外層容器。Keyspace 是包含與應(yīng)用程序?qū)?yīng)的數(shù)據(jù)的最外層容器。
表是數(shù)據(jù)庫的實(shí)體。表或列族是鍵空間的實(shí)體。
Row 是 RDBMS 中的單個(gè)記錄。Row 是 Cassandra 中的一個(gè)復(fù)制單元。
列表示關(guān)系的屬性。Column 是 Cassandra 中的存儲(chǔ)單元。
RDBMS 支持外鍵的概念,連接。關(guān)系是使用集合表示。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)