Cassandra write path(1)

Cassandra寫數(shù)據(jù)過程

Cassandra寫數(shù)據(jù)的速度非常快, 其原因就在于Cassandra是一個基于日志結構的存儲引擎, Cassandra對數(shù)據(jù)的操作全部采用append的方式. 當Cassandra的任何一個節(jié)點, 接收到寫請求時, 其寫數(shù)據(jù)的整個過程如下圖所示:

enter image description here
enter image description here
1. 將新記錄寫入CommitLog;
2. 將新紀錄寫入Memtable;
3. 在特定的時間, 將Memtable中的數(shù)據(jù)刷入到SSTables, 清空JVM Heap和CommitLog;
4. 在特定的時間, Cassandra Compaction將SSTables合并.

CommitLog

如上圖所示, 當Cassandra接收到寫請求時, 需要將數(shù)據(jù)寫入到Memtable中, 然而由于memtable是駐留在內(nèi)存中的, 為了防止節(jié)點故障后的數(shù)據(jù)丟失, Cassandra在將數(shù)據(jù)寫入到Memtable前, 會先將數(shù)據(jù)append到CommitLog中. 當節(jié)點從故障中恢復時, 會從CommitLog中讀取數(shù)據(jù).
關于CommitLog有兩個比較重要的配置項(在cassandra.yaml中):

commitlog_segment_space_in_mb
    單個commitlog segment所能占用的最大空間
commitlog_total_space_in_mb
    commitlog所能占用的總空間, 當commitlog占用的空間達到該值, 最舊的commitlog segment所對應的Memtable中的數(shù)據(jù)將被刷到SSTable中

當Memtable中的數(shù)據(jù)將被刷到SSTable后, 對應的commitlog segment會被標記為flushed, 并在稍后回收重用.

此外, 為了加快寫CommitLog的速度, Cassandra寫入commitlog的操作也不是每次寫請求就寫一次磁盤的, Cassandra提供了兩種寫入策略, periodic或者batch, 可配置commitlog_sync參數(shù)來實現(xiàn).

periodic
    這是Cassandra的默認配置, 當寫請求出現(xiàn)時,Cassandra會先將需要寫入commitlog的數(shù)據(jù)先寫在內(nèi)存中, 每隔一段時間(commitlog_sync_period_in_ms, 默認是10000), Cassandra會將一個同步請求加入到一個隊列中, Cassandra會立即執(zhí)行該同步操作, 將數(shù)據(jù)同步到磁盤中(也就是commitlog).
batch
    Cassandra會定時(commitlog_sync_batch_window_in_ms啥繁, 默認值50)將內(nèi)存中的數(shù)據(jù)批量寫入到磁盤中(也就是commitlog), 在每一次批量寫操作發(fā)出后, 并在該任務完成前, 向客戶端同步本次批量寫操作.
    

關于CommitLog有一個最佳實踐, 給Cassandra的commitlog和數(shù)據(jù)分配不同的磁盤(在cassandra.yaml中配置, 默認情況下commitlog和data都在目錄/var/lib/cassandra下), 減少磁頭的尋道時間.

memtable

memtable是一張駐留在內(nèi)存中的cql表:

-每一個節(jié)點上, 每一個keyspace下的cql表都對應著一個memtable
-memtable提供了較為快速的讀寫操作
-memtable所有寫數(shù)據(jù)都是append的形式
-memtable中的數(shù)據(jù)是按照token排序的, 關于這一點可用token函數(shù)來驗證, 如下圖所示.
enter image description here
enter image description here

Cssandra會在特定的時間, 將memtable中的數(shù)據(jù)刷到SSTable中, 當滿足下文中的任意條件時, 就會觸發(fā)該操作:

1. commitlog_total_space_in_mb(這一點已在前文提到過)
2. memtable_total_space_in_mb
    當memtable占用的總空間超過memtable_total_space_in_mb(默認是jvm空間的1/3)時, 把最舊的commitlog segment所對應的Memtable中的數(shù)據(jù)刷到SSTable中
3. nodetool flush命令

關于Cssandra將memtable中的數(shù)據(jù)刷到SSTables,和SSTables的合并, 在一下篇繼續(xù)介紹.

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市含懊,隨后出現(xiàn)的幾起案子左冬,更是在濱河造成了極大的恐慌,老刑警劉巖分瘦,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異琉苇,居然都是意外死亡嘲玫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門并扇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來去团,“玉大人,你說我怎么就攤上這事穷蛹⊥僚悖” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵肴熏,是天一觀的道長鬼雀。 經(jīng)常有香客問我,道長蛙吏,這世上最難降的妖魔是什么源哩? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任鞋吉,我火速辦了婚禮,結果婚禮上励烦,老公的妹妹穿的比我還像新娘谓着。我一直安慰自己,他們只是感情好崩侠,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布漆魔。 她就那樣靜靜地躺著,像睡著了一般却音。 火紅的嫁衣襯著肌膚如雪改抡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天系瓢,我揣著相機與錄音阿纤,去河邊找鬼。 笑死夷陋,一個胖子當著我的面吹牛欠拾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播骗绕,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼藐窄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酬土?” 一聲冷哼從身側響起荆忍,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撤缴,沒想到半個月后刹枉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡屈呕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年微宝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虎眨。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡蟋软,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗽桩,到底是詐尸還是另有隱情钟鸵,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布涤躲,位于F島的核電站,受9級特大地震影響贡未,放射性物質(zhì)發(fā)生泄漏种樱。R本人自食惡果不足惜蒙袍,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫩挤。 院中可真熱鬧害幅,春花似錦、人聲如沸岂昭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽约啊。三九已至邑遏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恰矩,已是汗流浹背记盒。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留外傅,地道東北人纪吮。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像萎胰,于是被迫代替她去往敵國和親徙歼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1基本安裝1.1在基于RHEL的系統(tǒng)中安裝Cassandra1.1.1必要條件? YUM包管理器? Root或...
    戰(zhàn)神湯姆閱讀 1,051評論 0 4
  • Apache Cassandra 是一個開源的浇坐、分布式飘痛、去中心化、彈性可擴展灵奖、高可用性嚼沿、容錯、一致性可調(diào)瓷患、面向行的...
    梁睿坤閱讀 14,067評論 2 25
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理骡尽,服務發(fā)現(xiàn),斷路器擅编,智...
    卡卡羅2017閱讀 134,714評論 18 139
  • 概述 一提到數(shù)據(jù)存儲馬上我們就會想到數(shù)據(jù)庫攀细, 一想數(shù)據(jù)庫就會想到 Oracle, MySQL等關系數(shù)據(jù)庫。 其實今...
    老瓦在霸都閱讀 2,304評論 0 3
  • 多少歲月曾無情爱态,易把流年拋 輕弄眉谭贪,低頷首 容顏已舊 夜雨時節(jié),雨打芭蕉聲聲急 催人憶曾經(jīng) 執(zhí)書還看锦担,亦無心思
    銀色的夢閱讀 216評論 0 1