Cassandra數據模型
Cassandra中的數據模型與RDBMS中正常情況完全不同。 我們來看看Cassandra如何存儲數據。
羣集
Cassandra數據庫分佈在運行的幾(多)臺機器上。 最外層的容器被稱爲包含不同節點的羣集。 每個節點都包含一個副本,如果發生故障,副本將負責頂上。 Cassandra將節點以環形格式排列在羣集中,併爲其分配數據。
鍵空間
鍵空間(Keyspace)是Cassandra中數據的最外層容器。 以下是Cassandra中Keyspace的基本屬性:
複製因子:它指定集羣中的機器數量,將接收相同數據的副本。
複製放置策略:這是一個策略,如何數據將複製品放在環中。有三種類型的策略,如:
- 簡單策略(機架感知策略)
- 舊網絡拓撲策略(機架感知策略)
- 網絡拓撲策略(數據中心共享策略)
列家族:列家族置於鍵空間之下。 鍵空間是一個或多個列族的列表的容器,而列族是一組行的容器。 每行包含已排序的列。列家族表示數據的結構。每個鍵空間至少有一個並且經常有很多列家族。
在Cassandra中,良好的數據模型非常重要,因爲不良數據模型可能會降低性能,特別是當您嘗試在Cassandra上實現RDBMS概念時。
Cassandra數據模型規則
- Cassandra不支持JOINS,GROUP BY,OR子句,聚合等等。因此必須按照需要存儲數據的方式存儲數據。
- 最大化數據重複,因爲Cassandra是分佈式數據庫,數據重複提供即時可用性而無單點故障。
數據建模目標
在Cassandra中建模數據時,您應該有以下目標:
- 在羣集周圍均勻傳播數據:要在Cassandra羣集的每個節點上傳播相等數量的數據,您必須選擇整數作爲主鍵。 數據根據作爲主鍵的第一部分的分區鍵傳播到不同的節點。
- 查詢數據時讀取的分區數最小化:分區用於將一組記錄與相同的分區鍵綁定。 當讀取查詢發出時,它從不同的分區收集不同節點的數據。
在許多分區的情況下,需要訪問所有這些分區來收集查詢數據。 這並不意味着不應該創建分區。 如果您的數據非常大,則無法在單個分區上保留大量數據。 單個分區將會減慢。 所以必須有一個平衡數量的分區。