摘要: 在2023年興起的nosql運動中,cassandra是其中重要的乙個分布式key-value資料庫產品,由facebook在2023年開源,目前是apache的頂級專案。
在2023年興起的nosql運動中,cassandra是其中重要的乙個分布式key-value資料庫產品,由facebook在2023年開源,目前是apache的較高階專案。最近twitter的一篇宣告,表示將從mysql遷移到cassandra,更讓其聲名大振。cassandra是結合了google bigtable的資料模型和amazon dynamo高可用框架的乙個產品。其資料模型可以參考張瑞的blog。
值得說一下的是cassandra的儲存機制,也是借鑑了bigtable的設計,採用memtable和sstable的方式。和關聯式資料庫一樣,cassandra在寫資料之前,也需要先記錄日誌,稱之為commitlog,然後資料才會寫入到column family對應的memtable中,並且memtable中的內容是按照key排序好的。memtable是一種記憶體結構,滿足一定條件後批量重新整理到磁碟上,儲存為sstable。這種機制,相當於快取寫回機制(write-back cache),優勢在於將隨機io寫變成順序io寫,降低大量的寫操作對於儲存系統的壓力。sstable一旦完成寫入,就不可變更,只能讀取。下一次memtable需要重新整理到乙個新的sstable檔案中。所以對於cassandra來說,可以認為只有順序寫,沒有隨機寫操作。
因為sstable資料不可更新,可能導致同乙個column family的資料儲存在多個sstable中,這時查詢資料時,需要去合併讀取column family所有的sstable和memtable,這樣到乙個column family的數量很大的時候,可能導致查詢效率嚴重下降。因此需要有一種機制能快速定位查詢的key落在哪些sstable中,而不需要去讀取合併所有的sstable。cassandra採用的是bloom filter演算法,通過多個hash函式將key對映到乙個點陣圖中,來快速判斷這個key屬於哪個sstable。關於bloom filter,有興趣的可以去看看參考文章4,5和6。
為了避免大量sstable帶來的效能影響,cassandra也提供一種定期將多個sstable合併成乙個新的sstable的機制,因為每個sstable中的key都是已經排序好的,因此只需要做一次合併排序就可以完成該任務,代價還是可以接受的。所以在cassandra的資料儲存目錄中,可以看到三種型別的檔案,格式類似於:
其中data.db檔案是sstable資料檔案,sstable是sorted strings table的縮寫,按照key排序後儲存key/value鍵值字串。index.db是索引檔案,儲存的是每個key在資料檔案中的偏移位置,而filter.db則是bloom filter演算法生產的對映檔案。
Cassandra 資料儲存結構
cassandra 的資料模型是基於列族 column family 的四維或五維模型。它借鑑了 amazon 的 dynamo 和 google s bigtable 的資料結構和功能特點,採用 memtable 和 sstable 的方式進行儲存。在 cassandra 寫入資料之前,需要先記錄...
有關cassandra的儲存引擎
cassandra使用乙個類似於日誌結構的結合樹 log structured merge tree 的儲存結構,不像傳統關聯式資料庫那樣使用b tree。cassandra會避免在寫之前去讀。寫前讀 read before write 特別是在乙個大的分布式系統裡,會對讀效能產生影響,還會帶來其它...
MariaDB的Cassandra儲存引擎
mariadb已經宣布了cassandra儲存引擎的乙個預覽版本。該外掛程式允許mariadb通過標準sql語法使用cassandra集群。u0026 xd n mariadb並不是第一款為cassandra提供sql支援的產品。例如,simba提供了乙個cassandra odbc驅動,可用於大多...