我們在Day5 . 資料與架構層次介紹到,在CASSANDRA/SCYLLA的最外層的層次是cluster
,要討論node與node之間的關係,我們以cluster的為單位來看。
cluster,可以想像為一個由一堆的node所組成環狀結構
。
新的一筆資料進來,或者查詢某筆資料,要從這個環(N個node)裡面找到正確的位置,就要借助partitioner
。
其實就是一個hash function,負責判斷資料是存放在哪一個節點上。
根據每一筆資料的partition key
,丟進這個hash function後,得到一個ring token
,藉由此token就可以得知資料所在的node位置。
CASSANDRA/SCYLLA預設只用Murmurhash3
作為paritioner。
其他的partitioner還有以下兩種
由於partition key
是存在於/等於primary key,所以為什麼primary key
在CASSANDRA/SCYLLA這個重要。
在RDBMS,table可以不設primary key是完全沒關係的,在這裡不行,就連查詢資料,也都必須要有primary key條件才可以做查詢。
在前面我們在練習建立keyspace,是使用這個複製策略。
SimpleStrategy適用於單一 Data Center。
多個Data Center適用,可以針對不同的Data Center設定不同的複製因子(RF)數量。
在Replication策略底下,又需要指定複製因子。
資料的複製因子(RF)在建立keyspace時做設定。
假設我們cluster總共有10個node,RF=2 亦即要在這10個node裡面,指定2個node放這個keyspace的資料(原本的一份,又複製備份一份)。
node 是一個物理單位
的節點,因為在設計上,是希望一個token對應到一個node。
但是需求上,這個設計不能滿足實際的使用方式。
由於資料會根據複製因子,建立多份副本,我們還要考慮資料復原的情況。
假設總數只有6個node,複製因子(RF)=3,那麼當其中一個節點掛了,那麼其他另外兩個資料完整的node,必須從它們身上,把資料複製到一個新節點。
換句話說,一個節點掛了,又有兩個節點在做復原作業,等於有一半的node因為這種狀況全部無法服務。
考慮這種情形,其實可以用的節點越多越好,節點越多,可以處理的彈性越大。
而結構層次的設計,大量擴充node,是一個很不方便的事情,所以vnode
就出現了。
vnode 亦即為虛擬節點,一個node上面可以有許多的vnode。
預設上,每個環形結構預設就有256個vnode。