【摘要】:本文簡要介紹了Cassandra分布存儲系統(tǒng)的設(shè)計理念及其使用的各種分布存儲技術(shù)。文章首先分析了Cassandra分布存儲系統(tǒng)出現(xiàn)的緣由——Facebook社交網(wǎng)絡(luò)的系統(tǒng)需求,然后著重介紹了Cassandra系統(tǒng)中區(qū)別傳統(tǒng)關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu),并且簡要分析了其分區(qū)技術(shù)在分布存儲系統(tǒng)中的應(yīng)用,同時,介紹了基于數(shù)據(jù)的復(fù)制機制來達到數(shù)據(jù)高度的可獲得性、安全性和系統(tǒng)良好的擴展性的方式。最后,本文宏觀的總結(jié)了Cassandra系統(tǒng)的運行過程及適用范圍。
【關(guān)鍵詞】:分布存儲,網(wǎng)絡(luò),數(shù)據(jù)庫。
前言
Cassandra是一種分布存儲系統(tǒng),很多商業(yè)服務(wù)網(wǎng)站使用它來對大量的結(jié)構(gòu)化的數(shù)據(jù)進行管理。在對大量數(shù)據(jù)的管理中,Cassandra可以提供高速有效的服務(wù)并從未出現(xiàn)過錯誤。Cassandra運行于數(shù)百個節(jié)點的結(jié)構(gòu)之上,而在這類規(guī)模的系統(tǒng)中,各類組件,無論規(guī)模大小,都會持續(xù)的拋出異常。然而,Cassandra保持?jǐn)?shù)據(jù)持久性的方式很好的應(yīng)對了這些異常,為存儲系統(tǒng)提高了強大的可靠性和擴展性。盡管Cassandra在一些設(shè)計和實施等方面與傳統(tǒng)的數(shù)據(jù)庫存在相似之處,但是Cassandra并不完全支持關(guān)系數(shù)據(jù)模型,即它不是一個傳統(tǒng)的關(guān)系數(shù)據(jù)庫。Cassandra提供給客戶端一個相對比較簡單的數(shù)據(jù)模型,這種數(shù)據(jù)模型支持對數(shù)據(jù)的布局和格式動態(tài)的控制。Cassandra系統(tǒng)旨在高效迅速的處理大量的寫操作,與此同時不會犧牲讀操作的效率,因而確保具有這種特性的商業(yè)網(wǎng)站能夠為客戶提高高效便捷的服務(wù)。
簡介
Cassandra最初是由AvinashLakshman和PrashantMalik在Facebook開發(fā)設(shè)計,在2008年,F(xiàn)acebook將它貢獻給了開源社區(qū)。Cassandra的出現(xiàn)與Facebook的系統(tǒng)特性息息相關(guān)。Facebook是世界最大的社交網(wǎng)絡(luò)平臺,在高峰時段,F(xiàn)acebook要向數(shù)億的用戶提供服務(wù),而Facebook數(shù)萬臺的服務(wù)器也遍布了全世界的各個數(shù)據(jù)中心。基于以上對海量數(shù)據(jù)處理的需求,F(xiàn)acebook想要為用戶提供優(yōu)質(zhì)的、可靠的和高效的服務(wù),一個必要的條件在于其系統(tǒng)平臺應(yīng)具有高度的擴展性以應(yīng)對不斷增長的用戶數(shù)量和數(shù)據(jù)處理需求數(shù)量。因此,處理一個包含大量組件的系統(tǒng)可能出現(xiàn)的各種異常現(xiàn)象是Facebook系統(tǒng)平臺維護人員的常規(guī)工作:在任意時間點上,總會有少量卻很關(guān)鍵的服務(wù)器和網(wǎng)絡(luò)組件出現(xiàn)錯誤。在這種情形下,軟件系統(tǒng)應(yīng)該以某種容錯的機制處理錯誤,而不是將錯誤當(dāng)作異常來處理。因此,為了達到以上指出的系統(tǒng)的可靠性和擴展性,F(xiàn)acebook開發(fā)了Cassandra。
數(shù)據(jù)結(jié)構(gòu)
在Cassandra這種分布存儲系統(tǒng)中,類似于關(guān)系數(shù)據(jù)庫中的表結(jié)構(gòu)是一個多維分布映射圖,并且以一個主鍵作為索引。在這種映射圖中,一個對象的值是高度結(jié)構(gòu)化的,其中,行主鍵是一個沒有長度限制的字符串——通常情況下為16-36個字節(jié)。需要注意的是,在數(shù)據(jù)的任一副本中,針對任何一個行主鍵的操作都是原子的,即使多個列被同時讀或者寫。在Cassandra中,列的結(jié)構(gòu)近似于Bigable中的列結(jié)構(gòu)——列被組合在一起,并被稱為一個ColumnFamily或者SuperColumnFamily。下面詳細介紹Cassandra的列結(jié)構(gòu)。
Column
一個Column是一個包含名稱、值和時間戳的元組。它是最小的數(shù)據(jù)容器,其中,名稱和值通常沒有長度限制。Column相當(dāng)于關(guān)系數(shù)據(jù)庫中的字段,不同的是,每一行中的Column內(nèi)容可以不同,而關(guān)系數(shù)據(jù)庫中一張表內(nèi)每行所對應(yīng)的列字段都是相同的。這種方式相對比較靈活,對于具有少量字段,并且訪問時通常只需要通過Key/Value配對的數(shù)據(jù)非常適用。
SuperColumn
一個SuperColumn是包含名稱和值的元組,它并不包含Column中的時間戳。SuperColumn的值并不是一個二進制字節(jié)而是映射容器——包含“Key/Value”的組合。簡而言之,SuperColumn是一個包含多個Column的容器,在被包含的每個Column中,其Key值與其名稱一致。SuperColumn可以表達一個object的多個屬性,每個屬性用一個Column表示。
ColumFamily
一個ColumFamily結(jié)構(gòu)類似于關(guān)系型數(shù)據(jù)庫中的表結(jié)構(gòu),它可以包含任意數(shù)量的行(row)。一個ColumFamily有一個名稱(類似于關(guān)系數(shù)據(jù)庫表的名稱),和若干行。在每一行中,分別包含各自的key(類似于行主鍵)和值(value)——包含多個Column的映射表,其結(jié)構(gòu)與之前介紹的SuperColumn一致。
API
Cassandra的API提供如下三種方法:
insert(table;key;rowMutation)
get(table;key;columnName)
delete(table;key;columnName)
columnName可以指ColumnFamily或者SuperColumnFamily中的任意一個Column或者任意一個SuperColumn中的Column的名稱。
系統(tǒng)架構(gòu)
一個存儲系統(tǒng)的結(jié)構(gòu)通常比較復(fù)雜,除去保證真實數(shù)據(jù)持久性的必要組件,存儲系統(tǒng)還應(yīng)該具有如下特性和功能:擴展性和平衡負(fù)荷的有效解決方案、伙伴關(guān)系管理(membership)和錯誤檢測、錯誤恢復(fù)、同步化復(fù)制、超負(fù)荷處理、狀態(tài)轉(zhuǎn)移、并行和任務(wù)排序、請求配置、請求路由、系統(tǒng)監(jiān)視與警告,以及系統(tǒng)配置管理。而在Cassandra系統(tǒng)的搭建過程中,所應(yīng)用的核心分布存儲技術(shù)主要包括:存儲空間分區(qū),數(shù)據(jù)復(fù)制,伙伴關(guān)系管理,錯誤處理和系統(tǒng)擴展增容,所有的這些模塊協(xié)同工作,一起處理用戶的讀寫請求。以下分別介紹在Cassandra中應(yīng)用的各種分布存儲技術(shù)。
1. 分區(qū)(partition)
Cassandra最重要的設(shè)計特性之一即為可擴展性。為了達到這一目標(biāo),Cassandra分布存儲系統(tǒng)使用分區(qū)技術(shù)。具體而言,在Cassandra分布存儲系統(tǒng)中,存在多個位于不同地理位置的存儲節(jié)點,每個節(jié)點按照某種算法和方式復(fù)制存儲一定量的數(shù)據(jù)。新加入的數(shù)據(jù)以某種方式被分配到系統(tǒng)中的任一節(jié)點中。當(dāng)數(shù)據(jù)量不斷增多時,可以通過增加節(jié)點的書目來提高系統(tǒng)的容量。當(dāng)然,在Cassandra系統(tǒng)中,新增一個或多個節(jié)點并不會對已存在的絕大多數(shù)節(jié)點造成影響,它只會改變一個局部的存儲狀況。以上存儲方式的實現(xiàn)是通過動態(tài)分區(qū)的方式達到的,下面詳細介紹這一技術(shù)。
為了達到以上目標(biāo),存儲系統(tǒng)應(yīng)該可以將數(shù)據(jù)動態(tài)的分配給集群中的不同的節(jié)點,或者說能夠動態(tài)的對存儲空間進行分區(qū),并將節(jié)點存入。Cassandra使用一致性哈希函數(shù)對數(shù)據(jù)進行分區(qū):哈希函數(shù)的輸出范圍是一個固定的圓環(huán)空間,稱為“ring”。在這個圓環(huán)中,最大的哈希輸出值與最小的哈希輸出值相毗鄰。系統(tǒng)中的任一節(jié)點被分配一個隨機的值,這個隨機的值代表了其在圓環(huán)空間上的位置。同時,對任一的數(shù)據(jù)的Key值做哈希運算,輸出的結(jié)果代表這個數(shù)據(jù)在圓環(huán)空間上的位置。與此同時,從任一數(shù)據(jù)在圓環(huán)上的位置為起點,沿著圓環(huán)順時針移動找到第一個節(jié)點,那么這個節(jié)點即為負(fù)責(zé)這個數(shù)據(jù)的存儲容器。因此,圓環(huán)空間上的任一節(jié)點都負(fù)責(zé)存儲其前一個節(jié)點和它之間的所有數(shù)據(jù)。這樣的好處是增加或者刪除一個節(jié)點只會影響其周圍的小范圍空間,而對圓環(huán)空間上的絕大多數(shù)其他節(jié)點沒有任何影響,進而達到了較好的擴展性。然而,這種隨機分配的機制并沒有考慮到不同節(jié)點的存儲能力,Cassandra解決這個問題的方法是分析圓環(huán)空間上的各節(jié)點的負(fù)載情況,并且使信息負(fù)荷量比較小的節(jié)點向負(fù)荷量比較大的節(jié)點移動,以緩解其存儲壓力。
2. 復(fù)制
Cassandra使用數(shù)據(jù)復(fù)制的方法來保證數(shù)據(jù)高度的可用性和持久性。在Cassandra系統(tǒng)中,每個數(shù)據(jù)都會在N個主機上進行復(fù)制,每個Key值,k,會被指定給集群中的一個節(jié)點。如前所述,每個節(jié)點負(fù)責(zé)其控制范圍內(nèi)的數(shù)據(jù)的副本,并且,為了在本地存儲其控制范圍內(nèi)的Key值,節(jié)點會將其控制的Key值在圓環(huán)空間上的其他N-1個節(jié)點上進行復(fù)制,當(dāng)然,Cassandra為客戶端提供了很多可供選擇的數(shù)據(jù)復(fù)制策略,比如“架構(gòu)不可知”(RackUnaware),“架構(gòu)可知”(RackAware)(同一數(shù)據(jù)中心內(nèi))和“數(shù)據(jù)中心可知”(DatacenterAware)。應(yīng)用程序可以根據(jù)需要選擇自己復(fù)制數(shù)據(jù)的策略。如果一個特定的應(yīng)用程序選擇了“架構(gòu)不可知”的數(shù)據(jù)復(fù)制策略,那么那些被復(fù)制的但尚未指派存儲節(jié)點的副本會選擇圓環(huán)空間上初始節(jié)點的前N-1個節(jié)點。而對于“架構(gòu)可知”和“數(shù)據(jù)中心可知”復(fù)制策略,則需要涉及比較復(fù)雜的算法。具體而言,Cassandra使用Zookeeper系統(tǒng)③在其集群中選擇一個領(lǐng)導(dǎo)節(jié)點(leader),。新加入集群的任一節(jié)點都要與領(lǐng)導(dǎo)節(jié)點進行通信,領(lǐng)導(dǎo)節(jié)點會告知其負(fù)責(zé)的副本的所在區(qū)域,同時領(lǐng)導(dǎo)節(jié)點要確保每個節(jié)點不會負(fù)責(zé)多于N-1的圓環(huán)空間上的區(qū)域。記錄每個節(jié)點負(fù)責(zé)的圓環(huán)區(qū)域的元數(shù)據(jù)會緩存在所有節(jié)點上并且在Zookeeper中做容錯處理——這種方式可以確保當(dāng)某個節(jié)點癱瘓后再恢復(fù)時,它能夠了解到其原本負(fù)責(zé)的區(qū)域。例如,當(dāng)集群的一個節(jié)點崩潰后返回時,它同Zookeeper與領(lǐng)導(dǎo)節(jié)點或者其他節(jié)點進行通信,領(lǐng)導(dǎo)節(jié)點或其他節(jié)點返回存儲在他們內(nèi)部的關(guān)于這個節(jié)點崩潰前的存儲信息,這個節(jié)點通過這些信息恢復(fù)其存儲功能,重新負(fù)責(zé)原來的圓環(huán)區(qū)域。相似的概念可以借鑒Dynamo中的“偏好列表”(preferencelist),即負(fù)責(zé)給定區(qū)域的節(jié)點列表。
基于以上的介紹,我們了解到,Cassandra節(jié)點簇中的每個節(jié)點都了解系統(tǒng)中的其他節(jié)點和其負(fù)責(zé)的存儲區(qū)域。通過這種方式,Cassandra可以在節(jié)點癱瘓和網(wǎng)絡(luò)分區(qū)的情況發(fā)生變化時保證數(shù)據(jù)的持久性。數(shù)據(jù)中心會因為很多因素而停止工作,比如停電,斷網(wǎng)或者自然災(zāi)害。而Cassandra系統(tǒng)中數(shù)據(jù)的每個行(row)都會在多個節(jié)點被復(fù)制。實際上,一個Key的“偏好列表”就是保證擁有這個Key副本的N各節(jié)點分布在不同的數(shù)據(jù)中心。這些數(shù)據(jù)中心通過高速的網(wǎng)絡(luò)相連接。這種跨越多個數(shù)據(jù)中心的復(fù)制機制保證了在某些數(shù)據(jù)中心癱瘓時,系統(tǒng)不會受到很大影響,數(shù)據(jù)也不會丟失。
3. 伙伴關(guān)系(Membership)
Cassandra節(jié)點集群中的節(jié)點間關(guān)系——我們稱之為“伙伴關(guān)系”(Membership),是建立在Scuttlebutt的基礎(chǔ)之上的——一種非常高效的、基于“Gossip”的關(guān)系機制。Scuttlebutt顯著的特性在于其高效的CPU利用率和“Gossip”通道的利用率。下面通過錯誤檢測的機制來進一步理解Cassandra中的伙伴關(guān)系。
錯誤檢測(FailureDetection)是一種利用節(jié)點間關(guān)系的模塊,通過錯誤檢測,一個節(jié)點可以判斷系統(tǒng)中的其他節(jié)點是否在正常的工作。在Cassandra系統(tǒng)中,錯誤檢測也用來避免一個節(jié)點試圖同一個無法到達的錯誤或者癱瘓的節(jié)點進行交互。Cassandra利用一個改進版本的AccrualFailureDetector去完成錯誤檢測。AccrualFailureDetector的觀念在于,錯誤檢測模塊并不是通過返回一個布爾值來表示一個節(jié)點工作與否,而是返回一個代表每個被檢測節(jié)點的質(zhì)疑等級值,這個值被定義為Φ,Φ值可以動態(tài)的調(diào)整以反應(yīng)被檢測節(jié)點的網(wǎng)絡(luò)和加載的條件。AccrualFailureDetector的方法類似于統(tǒng)計學(xué)中的建設(shè)檢驗問題,而Φ相當(dāng)于檢驗的統(tǒng)計量。在Cassandra系統(tǒng)中,Φ有如下的意義:給定一個具體的Φ值,我們在檢測節(jié)點時,會以某個對應(yīng)的概率錯誤的認(rèn)為這個節(jié)點存在錯誤。例如假設(shè)當(dāng)Φ=1時我們檢測節(jié)點A,那么錯誤的判斷節(jié)點A工作狀況的概率為10%。同理,當(dāng)Φ=2時,對應(yīng)的概率為1%,當(dāng)Φ=3時,對應(yīng)的概率為0.1%,依次類推。每個節(jié)點收到系統(tǒng)內(nèi)其他節(jié)點的“Gossip”信息的內(nèi)部到達時間都被存儲在各自的節(jié)點的樣本窗口(samplingwindows)中,系統(tǒng)通過估計這些內(nèi)部到達時間的分布來計算Φ值。然后再給定的顯著性要求下(允許犯錯誤的概率),用計算出來的Φ與分布中的臨界值做比較,如果大于臨界值,則拒絕原假設(shè),即某個節(jié)點的確存在錯誤,針對這個節(jié)點的操作被中止;如果計算出來的Φ小于臨界值,則接受原假設(shè),即某個節(jié)點沒有錯誤,可以進行對它的操作。具體過程見圖1.以前的
文獻認(rèn)為內(nèi)部到達時間類似服從高斯分布(Gaussian),但是Cassandra使用指數(shù)分布來更好的估計這一分布。總的來說,AccrualFailureDetector擁有很高的精確度和運行速度,并且這種錯誤檢測的機制可以根據(jù)不同的網(wǎng)絡(luò)條件和服務(wù)器負(fù)荷情況來進行自我調(diào)整。
圖1:AccrualFailureDetector
4. 引導(dǎo)程序(Bootstrapping)
當(dāng)一個節(jié)點初次運行時,它在圓環(huán)空間上隨機選擇一個片段作為它的位置。為了使系統(tǒng)能夠容錯,圓環(huán)上節(jié)點的位置映射永久的保存在本地磁盤上,同時也存儲在領(lǐng)導(dǎo)節(jié)點上。然后,這個片段的信息被以“Gossip”的方式傳遞到集群中的其他節(jié)點上。通過這種方式,圓環(huán)空間上的所有節(jié)點都能夠同時了解其他節(jié)點的位置及存儲情況。這也保證了在復(fù)制一節(jié)中提到的高度的數(shù)據(jù)可獲得性:因為每個節(jié)點都存有其他所有節(jié)點的信息,因此,當(dāng)任一節(jié)點接受到讀寫請求時,它能夠?qū)⑨槍δ硞Key值的請求正確的傳遞到存儲這個Key值的其他節(jié)點上。通過bootstrapping,當(dāng)一個節(jié)點需要接入集群時,首先它會讀取其配置文件中的連接點列表。這些集群中初始的連接點被稱為集群的種子,種子也可以來自配置服務(wù),如領(lǐng)導(dǎo)節(jié)點Zookeeper。
5. 擴展增容
在分區(qū)一節(jié)中,曾經(jīng)提到過Cassandra系統(tǒng)高度的擴展性,即新加入的存儲節(jié)點不會影響整個系統(tǒng)的正常工作。具體而言,當(dāng)一個新的節(jié)點加入到系統(tǒng)中時,它被指派一個圓環(huán)空間上的片段,來緩解高負(fù)荷的節(jié)點。這種方式的結(jié)果是,新的節(jié)點會分割其他節(jié)點原來負(fù)責(zé)的區(qū)域,而新的節(jié)點只會分割它在圓環(huán)上的位置周圍的節(jié)點的存儲區(qū)域,而不會影響其他區(qū)域。存儲空間被分割的節(jié)點將其放棄的數(shù)據(jù)使用“kernel-kernel”的復(fù)制技術(shù)傳遞給新的節(jié)點。實際運行情況表明這些數(shù)據(jù)可以以每秒40MB的速度從一個單一節(jié)點傳遞到其他節(jié)點。Cassandra的開發(fā)人員通過使多個副本同時參與“bootstrap”傳輸來提高傳輸速度,這種并行傳輸?shù)姆绞降臋C制與Bittorrent相似。通過高速的復(fù)制技術(shù),Cassandra系統(tǒng)達到了高度的擴展性。
以上五種技術(shù)是在Cassandra系統(tǒng)中應(yīng)用的比較核心的分布存儲技術(shù),他們協(xié)同工作,保證了數(shù)據(jù)高度的可獲得性和擴展性。當(dāng)數(shù)據(jù)量不斷擴大時,Cassandra系統(tǒng)能夠使用以上方法很好的保持系統(tǒng)的穩(wěn)定,此外以上方法也保證了數(shù)據(jù)的安全性,基于復(fù)制機制的存儲方式不僅提高了可獲得性,同時面對若干主機出現(xiàn)癱瘓的情形,也能保持系統(tǒng)的正常工作,并且確保數(shù)據(jù)不會丟失。同時,Cassandra系統(tǒng)也能夠保證數(shù)據(jù)的持久性,這種數(shù)據(jù)的持久性要依賴本地文件系統(tǒng)。具體而言,對于寫操作,通常涉及兩個子操作:1.將寫操作記錄到一個“commitlog”中;2.當(dāng)前一個操作成功后,更新內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)。當(dāng)內(nèi)存中的數(shù)據(jù)容量達到一個特定值時,它將自己導(dǎo)入本地磁盤中。所有的寫操作都連續(xù)存儲在本地磁盤上,并且建立行主鍵的索引以便查詢,這些索引與數(shù)據(jù)文件一同存儲。對于讀操作,首先查詢內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),找不到所需信息時才檢索本地磁盤。這種內(nèi)存—磁盤的雙重存儲,和首先將任一寫操作記錄到“commitlog”并存入磁盤的方式,通過本地文件系統(tǒng)的持久性保證了數(shù)據(jù)的持久性。
總結(jié)
Cassandra分布存儲系統(tǒng)旨在應(yīng)對海量數(shù)據(jù)的存儲、數(shù)據(jù)的安全性問題以及基于Key-value的查詢需求。通過運用上文提到的各種技術(shù),Cassandra將數(shù)據(jù)從傳統(tǒng)的關(guān)系數(shù)據(jù)庫單一數(shù)據(jù)中心的存儲方式過渡到分布的存儲方式。具體而言,Cassandra的系統(tǒng)結(jié)構(gòu)為多個分布在不同地點的存儲節(jié)點,這些節(jié)點通過高速網(wǎng)絡(luò)相連。數(shù)據(jù)通過某種哈希算法被指派到系統(tǒng)中的各個節(jié)點中。同時,系統(tǒng)利用復(fù)制的技術(shù)將存儲在不同節(jié)點內(nèi)的數(shù)據(jù)信息復(fù)制到其他節(jié)點上,這保證了數(shù)據(jù)的安全性,同時也提高了數(shù)據(jù)的獲取速度,具體的分配機制見上文“分區(qū)”一節(jié)的介紹。當(dāng)數(shù)據(jù)量不斷擴大時,會有更多的節(jié)點加入到Cassandra系統(tǒng)的集群中,Cassandra節(jié)點集群的圓環(huán)邏輯結(jié)構(gòu)保證了節(jié)點的加入不會影響系統(tǒng)中其他節(jié)點的工作,這使得系統(tǒng)具有良好的擴展性能。這種分區(qū)-復(fù)制的技術(shù)也保證了當(dāng)系統(tǒng)中一個或多個節(jié)點癱瘓時,系統(tǒng)仍能正常工作,這是因為每個節(jié)點上不僅存儲了自己復(fù)制的區(qū)域內(nèi)的數(shù)據(jù),還保存著其他節(jié)點內(nèi)數(shù)據(jù)的副本和所有節(jié)點存儲情況的元數(shù)據(jù),進而在發(fā)生節(jié)點癱瘓時保證數(shù)據(jù)的安全。
相對于關(guān)系型數(shù)據(jù)庫,Cassandra分布存儲系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)并不能很好的支持復(fù)雜的結(jié)構(gòu)關(guān)系查詢,但是對于一些只針對某個Key值進行簡單查詢的數(shù)據(jù),其性能和反應(yīng)時間要遠遠優(yōu)于關(guān)系型數(shù)據(jù)庫。比如在當(dāng)今流行的各大網(wǎng)絡(luò)社區(qū)或B2B,B2C網(wǎng)站中,面對海量的數(shù)據(jù)和每天大量的信息吞吐量,Cassandra這類基于Key-value的分布式存儲系統(tǒng)會逐漸的更加廣泛地得到應(yīng)用。
參考文獻:
[1]. GiuseppeDeCandia,DenizHastorun,MadanJampani,GunavardhanKakulapati,AvinashLakshman,AlexPilchin,SwaminathanSivasubramanian,PeterVosshallandWernerVogels,Dynamo:Amazon’sHighlyAvailableKey-valueStore,2007
[2]. FayChang,JeffreyDean,SanjayGhemawat,WilsonC.Hsieh,DeborahA.WallachMikeBurrows,TusharChandra,AndrewFikes,RobertE.Gruber,Bigtable:ADistributedStorageSystemforStructuredData,2006
[3]. AvinashLakshman,PrashantMalik,Cassandra-ADecentralizedStructuredStorageSystem,2009
[4]. ArinSarkissian,WTFisaSuperColumn?AnIntrototheCassandraDataModel,2010-3-22
[5]. MoritzY.BeckerPeterSewell,ComputerLaboratory,UniversityofCambridge,JJThomsonAvenue,Cambridge,UnitedKingdom,Cassandra:DistributedAccessControlPolicieswithTunableExpressiveness
[6]. JonathanEllis,Cassandra_OpenSourceBigtable+Dynamo,2010
[7]. RonaldMathies,InstallingandusingApacheCassandraWithJavaPart1(Installation),InstallingandusingApacheCassandraWithJavaPart2(Datamodel),InstallingandusingApacheCassandraWithJavaPart3(Datamodel2),InstallingandusingApacheCassandraWithJavaPart4(ThriftClient),InstallingandusingApacheCassandraWithJavaPart5(ThriftClient2),2010
[8]. MikePerham,CassandraInternals–WritingandReading,http://www.mikeperham.com,2010
轉(zhuǎn)載請注明來自:http://www.jinnzone.com/zhishichanquanlw/6978.html