猴子都聽不懂的
Cassandra
By Seta
本次分享參考
O’Reilly Cassandra: The Definitive Guide Second Edition
Gossip協議起源於1987年由Allen Demers提出,他主要是研究如何在一個不穩定的網路中傳輸資訊的一個協議。
也就是透過像人與人之間愛聊八卦,一傳十、十傳百的概念來達到對彼此資訊認知目的
key經過hash會定位到hash環上的一個位置, 找到下一個vnode為數據的第一份存儲節點. 接下來的兩個vnode為另外兩個副本.
指定複本資料到特定的資料中心或是單一資料中心中的不同叢集
CREATEKEYSPACE ExcelsiorWITHREPLICATION= {'class':'SimpleStrategy''replication_factor':3};
// 建立KeySpace時複本策略使用SimpleStrategy複本數為3
CREATEKEYSPACE ExcaliburWITHREPLICATION= {'class':'NetworkTopologyStrategy''dc1':3'dc2':2};
// 建立KeySpace時使用NetworkTopologyStrategy 並在dc1有3個複本 dc2有2個複本
Cassandra 因為在寫入或是讀取時每個Node上的資料不一定一致,所以用Consistency Levels來確認最新版的資料回傳給使用者
Consistency Level設定說明:
ONE 1
TWO 2
THREE 3
QUORUM(replication factor / 2 +1 )
ANY
Cassandra的寫入路徑:
Commit Logs > Memtables > SSTables
Commit Log是一個失敗回溯機制來確保當你的資料庫無預期的關機或崩潰時,Commit Log會確保你的資料不會不見,當你下次開機或重新啟動時Commit log會重新運作,將你未寫入的資料進行寫入的動作。
Memtable是常駐在記憶體的資料結構,每個membtable都包含特定資料表的資料,當Memtable的資料數量達到一定的門檻時,Memtable將會把資料轉移至SSTables
SSTables(Sorted String Table)的概念源自於Google的Bigtable,一但memtable將資料轉移到SSTable時舊的SSTables將會和新的資料進從合併產生一個新的檔案並且壓縮後移除舊的SSTable資料。
Key Cache:Key Cache是指對照SSTable的partition keys的索引來加速取得存在SSTable的資料(default enabled)
Row Cache:顧名思意是列的快取他可以大大提升我們在讀取資料的速度但也會消耗更多的記憶體這個快取與Memtable不同儲存在off-heap memory(default disable)
Counter Cache:用來加速計數的效能用來調整經常會被使用到的計數類型資料時所造成資源競爭(default enabled)
Hinted機制就像一個便利貼備忘錄,當一個寫入的請求傳到NodeA當NodeA要將資料背景同步到NodeB時,NodeB因為各種因素例如網路問題,機器問題...等無法將資料寫到NodeB時,這時NodeA就會memo這一件事來提醒自已當NodeB可以使用時,會把這一件還沒完成的寫入繼續完成
當Cassandra要刪除資料時,他會更新你所要刪除的資料並加上一個Tombstones的標記,他並不會直接把資料刪除,直到SSTables進行合併時產生新的SSTable他才會刪除
Bloom 是一種演算法,加速Cassandra在讀取資料時的效率,用來確認一個元素是不是在一個集合中,當我們對Cassandra進行一個查詢時Cassandra 會先使用Bloom Filters(記憶體中)來確認資料在不在才會對儲存裝置進行動作讀取,透過這個方式來加速取得資料的速度(因為記憶體速度>硬碟速度)