首页
/
每日頭條
/
科技
/
nosql數據庫與數據倉庫
nosql數據庫與數據倉庫
更新时间:2025-12-10 03:03:11
概述

前面已經對Cassandra的一些概念性東西做了介紹,所以就不多說明了,今天主要分享Cassandra 的數據存儲結構幾種形式--CommitLog、Memtable和SSTable,下面一起看看吧!


Cassandra 的數據存儲結構

Cassandra 中的數據主要分為三種:

  1. CommitLog:主要記錄下客戶端提交過來的數據以及操作。這個數據将被持久化到磁盤中,以便數據沒有被持久化到磁盤時可以用來恢複。
  2. Memtable:用戶寫的數據在内存中的形式,它的對象結構在後面詳細介紹。其實還有另外一種形式是 BinaryMemtable 這個格式目前 Cassandra 并沒有使用,這裡不再介紹了。
  3. SSTable:數據被持久化到磁盤,這又分為 Data、Index 和 Filter 三種數據格式。

CommitLog數據格式

CommitLog 的數據隻有一種,那就是按照一定格式組成 byte組數,寫到IO緩沖區中定時的被刷到磁盤中持久化,CommitLog 的持久化方式有兩種,一個是 Periodic,一個是 Batch,它們的數據格式都是一樣的,隻是前者是異步的,後者是同步的,數據被刷到磁盤的頻繁度不一樣。

nosql數據庫與數據倉庫(詳解分布式nosql數據庫Cassandra數據存儲結構)1

CommitLog 的相關的類結構圖

它持久化的策略也很簡單,就是首先将用戶提交的數據所在的對象 RowMutation 序列化成 byte 數組,然後把這個對象和 byte 數組傳給 LogRecordAdder 對象,由 LogRecordAdder 對象調用 CommitLogSegment 的 write 方法去完成寫操作。

nosql數據庫與數據倉庫(詳解分布式nosql數據庫Cassandra數據存儲結構)2

CommitLog 文件數組結構

上圖中每個不同的 columnFamily 的 id 都包含在 header 中,這樣做的目的是更容易的判斷那些數據沒有被序列化。

CommitLog 的作用主要是為恢複沒有被寫到磁盤中的數據。

nosql數據庫與數據倉庫(詳解分布式nosql數據庫Cassandra數據存儲結構)3

CommitLog 數據格式的變化過程


Memtable 内存中數據結構

Memtable 内存中數據結構比較簡單,一個 ColumnFamily 對應一個唯一的 Memtable 對象,所以 Memtable 主要就是維護一個 ConcurrentSkipListMap類型的數據結構,當一個新的 RowMutation 對象加進來時,Memtable 隻要看看這個結構是否 <DecoratedKey, ColumnFamily> 集合已經存在,沒有的話就加進來,有的話取出這個 Key 對應的 ColumnFamily,再把它們的 Column 合并。

Memtable 相關的類結構圖如下:

nosql數據庫與數據倉庫(詳解分布式nosql數據庫Cassandra數據存儲結構)4

Memtable 相關的類結構圖

Memtable 中的數據會根據配置文件中的相應配置參數刷到本地磁盤中。

其實Cassandra 的寫的性能很好,好的原因就是因為 Cassandra 寫到數據首先被寫到 Memtable 中,而 Memtable 是内存中的數據結構,所以 Cassandra 的寫是寫内存的。下圖基本上描述了一個 key/value 數據是怎麼樣寫到 Cassandra 中的 Memtable 數據結構中的。

nosql數據庫與數據倉庫(詳解分布式nosql數據庫Cassandra數據存儲結構)5

數據被寫到 Memtable


SSTable 數據格式

每添加一條數據到 Memtable 中,程序都會檢查一下這個 Memtable 是否已經滿足被寫到磁盤的條件,如果條件滿足這個 Memtable 就會寫到磁盤中。先看一下這個過程涉及到的類。相關類圖如圖 所示:

nosql數據庫與數據倉庫(詳解分布式nosql數據庫Cassandra數據存儲結構)6

SSTable 持久化類結構圖

Memtable 的條件滿足後,它會創建一個 SSTableWriter 對象,然後取出 Memtable 中所有的 <DecoratedKey, ColumnFamily> 集合,将 ColumnFamily 對象的序列化結構寫到 DataOutputBuffer 中。接下去 SSTableWriter 根據 DecoratedKey 和 DataOutputBuffer 分别寫到 Date、Index 和 Filter 三個文件中。


總結

今天主要描述了 Cassandra 中數據的主要的存儲格式,包括内存中和磁盤中數據的格式,其實Cassandra的存儲機制借鑒了Bigtable的設計,采用Memtable和SSTable的方式。

Cassandra在寫數據之前,需要先記錄日志,稱之為Commit Log,然後數據才會寫入到Column Family對應的MemTable中,且MemTable中的數據是按照key排序好的。SSTable一旦完成寫入,就不可變更,隻能讀取。

後面會分享更多devops和DBA方面的内容,感興趣的朋友可以關注一下~

nosql數據庫與數據倉庫(詳解分布式nosql數據庫Cassandra數據存儲結構)7

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
u盤插電腦顯示無法安裝驅動程序
u盤插電腦顯示無法安裝驅動程序
有的時候使用U盤的時候在自己電腦上使用沒問題,但是當在别的電腦上使用時,會提示“未能成功安裝設備驅動程序”,重新将U盤拔出來又插入USB,但是來回的試了好幾次都還是不行,其實像這個情況一般是由于U盤驅動安裝失敗所造成的。我們可以通過以下方法...
2025-12-10
現在買手機256g好還是買512g好
現在買手機256g好還是買512g好
前幾天,三星S23Ultra發布。作為一款沒有影響力的手機品牌,三星手機在我國已經沒有多少熱度了,因此三星S23Ultra這款手機在數碼圈并沒有掀起太大的浪花。值得關注的是三星S23Ultra有一個操作令人氣憤,那就是三星S23Ultra在...
2025-12-10
陰陽師怎麼快速更換ssr
陰陽師怎麼快速更換ssr
大家好,我是Miss最寵愛的小編雞腿妹。喜歡玩《陰陽師》的小夥伴一定有這樣一種感覺。就是辛辛苦苦攢了心愛的SSR碎片,離最後50片隻差一點點的時候,抽個卡就直接獲取了該式神,更慘一點的,在湊齊心愛的SSR碎片并召喚後,抽卡又瞬間獲得了同一款...
2025-12-10
dpdk發包機制
dpdk發包機制
我國正在加速進入數字經濟時代。中國工信出版傳媒集團副總經理劉華魯表示,截至2021年底,我國企業上雲、使用雲的比例達到80%,上雲已經成為數字化的必經之路。以上雲為主要特征的數字時代,最典型的一個特征是數據的高速增長。據中國信通院數據,截止...
2025-12-10
我的世界網易全自動刷普通鐵軌機
我的世界網易全自動刷普通鐵軌機
我的世界超高效率刷鐵軌機,服務器也能用。在我的世界中,有許多遊戲的小技巧在等着大家發現。有的可以讓我們輕松的對付難打的怪物,有的則可以讓我們獲得一些難搞的材料。今天給大家分享刷鐵軌機就是其中之一,以後大家就不用為沒有鐵軌而擔心啦。首先是建造...
2025-12-10
Copyright 2023-2025 - www.tftnews.com All Rights Reserved