Cassandra旨在處理多個(gè)節(jié)點(diǎn)之間的大數(shù)據(jù)工作負(fù)載,而無(wú)需擔(dān)心單點(diǎn)故障。 它在其節(jié)點(diǎn)之間具有對(duì)等分布式系統(tǒng),數(shù)據(jù)分布在集群中的所有節(jié)點(diǎn)上。
在Cassandra中,集群中的節(jié)點(diǎn)作為給定數(shù)據(jù)片段的副本。 如果某些節(jié)點(diǎn)以超時(shí)值響應(yīng),Cassandra會(huì)將最新的值返回給客戶(hù)端。 返回最新值后,Cassandra會(huì)在后臺(tái)執(zhí)行讀取修復(fù),以更新舊值。
請(qǐng)參閱以下圖示,以了解Cassandra如何在集群中的節(jié)點(diǎn)之間使用數(shù)據(jù)復(fù)制的原理圖,以確保沒(méi)有單點(diǎn)故障。

Cassandra的主要組成部分主要有:
Cassandra查詢(xún)語(yǔ)言(CQL)用于通過(guò)其節(jié)點(diǎn)訪(fǎng)問(wèn)Cassandra。 CQL將數(shù)據(jù)庫(kù)(Keyspace)視為表的容器。 程序員使用cqlsh:提示使用CQL或單獨(dú)的應(yīng)用程序語(yǔ)言驅(qū)動(dòng)程序。
客戶(hù)端可以接近任何節(jié)點(diǎn)進(jìn)行讀寫(xiě)操作。 該節(jié)點(diǎn)(協(xié)調(diào)器)在客戶(hù)機(jī)和保存數(shù)據(jù)的節(jié)點(diǎn)之間扮演代理。
節(jié)點(diǎn)的每個(gè)寫(xiě)入活動(dòng)都由寫(xiě)入節(jié)點(diǎn)的提交日志捕獲。 之后,數(shù)據(jù)將被捕獲并存儲(chǔ)在內(nèi)存表中。 每當(dāng)內(nèi)存表已滿(mǎn)時(shí),數(shù)據(jù)將被寫(xiě)入SStable數(shù)據(jù)文件。 所有寫(xiě)入在整個(gè)集群中自動(dòng)分區(qū)和復(fù)制。 Cassandra定期整合SSTables,丟棄不必要的數(shù)據(jù)。

在讀操作中,Cassandra從mem-table中獲取值,并檢查bloom過(guò)濾器以找到包含所需數(shù)據(jù)的適當(dāng)SSTable。
有三種類(lèi)型的讀請(qǐng)求被協(xié)調(diào)者發(fā)送給副本。
協(xié)調(diào)器發(fā)送的直接請(qǐng)求到副本中的一個(gè)。 之后,協(xié)調(diào)器將摘要請(qǐng)求發(fā)送到由一致性級(jí)別指定的副本數(shù),并檢查返回的數(shù)據(jù)是否是更新的數(shù)據(jù)。
之后,協(xié)調(diào)器將所有剩余的副本發(fā)送摘要請(qǐng)求。 如果任何節(jié)點(diǎn)發(fā)出過(guò)期值,后臺(tái)讀修復(fù)請(qǐng)求將更新該數(shù)據(jù)。 這個(gè)過(guò)程稱(chēng)為讀修復(fù)機(jī)制。
