Cassandra概況
Cassandra是一套開源分布式NoSQL數(shù)據(jù)庫系統(tǒng)。它最初由Facebook開發(fā),用于儲(chǔ)存收件箱等簡單格式數(shù)據(jù),集GoogleBigTable的數(shù)據(jù)模型與AmazonDynamo的完全分布式的架構(gòu)于一身。Cassandra的名稱來源于希臘神話,是特洛伊的一位悲劇性的女先知的名字,因此項(xiàng)目的Logo是一只放光的眼睛。Facebook于2008將Cassandra開源,此后,由于Cassandra良好的可擴(kuò)放性,被Digg、Twitter等知名Web2.0網(wǎng)站所采納,成為了一種流行的分布式結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)方案。Cassandra在2009年成為了Apache軟件基金會(huì)的Incubator項(xiàng)目,并在2010年2月走出孵化器,成為正式的基金會(huì)項(xiàng)目。
Cassandra功能介紹
Cassandra的主要特點(diǎn)就是它不是一個(gè)數(shù)據(jù)庫,而是由一堆數(shù)據(jù)庫節(jié)點(diǎn)共同構(gòu)成的一個(gè)分布式網(wǎng)絡(luò)服務(wù),對Cassandra的一個(gè)寫操作,會(huì)被復(fù)制到其他節(jié)點(diǎn)上去,對Cassandra的讀操作,也會(huì)被路由到某個(gè)節(jié)點(diǎn)上面去讀取。對于一個(gè)Cassandra群集來說,擴(kuò)展性能是比較簡單的事情,只管在群集里面添加節(jié)點(diǎn)就可以了。
這里有很多理由來選擇Cassandra用于您的網(wǎng)站。和其他數(shù)據(jù)庫比較,有三個(gè)突出特點(diǎn):
模式靈活
使用Cassandra,像文檔存儲(chǔ),你不必提前解決記錄中的字段。你可以在系統(tǒng)運(yùn)行時(shí)隨意的添加或移除字段。這是一個(gè)驚人的效率提升,特別是在大型部署上。
真正的(高)可擴(kuò)展性
Cassandra是純粹意義上的水平擴(kuò)展。為給集群添加更多容量,可以指向另一臺(tái)電腦。你不必重啟任何進(jìn)程,改變應(yīng)用查詢,或手動(dòng)遷移任何數(shù)據(jù)。()可以幫助您可隨時(shí)添加更多硬件,以便根據(jù)需求附加更多客戶和更多數(shù)據(jù)。
多數(shù)據(jù)中心識(shí)別
你可以調(diào)整你的節(jié)點(diǎn)布局來避免某一個(gè)數(shù)據(jù)中心起火,一個(gè)備用的數(shù)據(jù)中心將至少有每條記錄的完全復(fù)制。
剛性結(jié)構(gòu)
Cassandra沒有一個(gè)單一的故障點(diǎn),它可用于無法承受故障的關(guān)鍵業(yè)務(wù)應(yīng)用程序。
快速線性規(guī)模的性能
Cassandra線性可擴(kuò)展。它可以提高吞吐量,因?yàn)樗梢詭椭黾尤杭械墓?jié)點(diǎn)數(shù)量。 因此,它保持快速的響應(yīng)時(shí)間。
容錯(cuò)
Cassandra是容錯(cuò)的。 假設(shè)集群中有4個(gè)節(jié)點(diǎn),這里每個(gè)節(jié)點(diǎn)都有相同數(shù)據(jù)的副本。 如果一個(gè)節(jié)點(diǎn)不再服務(wù),則其他三個(gè)節(jié)點(diǎn)可以按照請求進(jìn)行服務(wù)。
靈活的數(shù)據(jù)存儲(chǔ)
Cassandra支持所有可能的數(shù)據(jù)格式,如結(jié)構(gòu)化,半結(jié)構(gòu)化和非結(jié)構(gòu)化。 它可以幫助您根據(jù)需要更改數(shù)據(jù)結(jié)構(gòu)。
簡單的數(shù)據(jù)分發(fā)
Cassandra中的數(shù)據(jù)分發(fā)非常簡單,因?yàn)樗梢造`活地通過在多個(gè)數(shù)據(jù)中心復(fù)制數(shù)據(jù)來分發(fā)所需的數(shù)據(jù)。
事務(wù)支持
Cassandra支持事務(wù),諸如原子性,一致性,隔離和持久性(ACID)等屬性。
快速寫入
Cassandra的設(shè)計(jì)是在便宜的商品硬件上運(yùn)行。 它執(zhí)行快速寫入,可以存儲(chǔ)數(shù)百TB的數(shù)據(jù),而不會(huì)犧牲讀取效率。
一些使Cassandra提高競爭力的其他功能:
范圍查詢
如果你不喜歡全部的鍵值查詢,則可以設(shè)置鍵的范圍來查詢。
列表數(shù)據(jù)結(jié)構(gòu)
在混合模式可以將超級(jí)列添加到5維。對于每個(gè)用戶的索引,這是非常方便的。
分布式寫操作
有可以在任何地方任何時(shí)間集中讀或?qū)懭魏螖?shù)據(jù)。并且不會(huì)有任何單點(diǎn)失敗。
應(yīng)用客戶facebook
主要特性
●分布式
●基于column的結(jié)構(gòu)化
●高伸展性
基本架構(gòu)
Cassandra沒有像BigTable或Hbase那樣選擇中心控制節(jié)點(diǎn),而選擇了無中心的P2P架構(gòu),網(wǎng)絡(luò)中的所有節(jié)點(diǎn)都是對等的,它們構(gòu)成了一個(gè)環(huán),節(jié)點(diǎn)之間通過P2P協(xié)議每秒鐘交換一次數(shù)據(jù),這樣每個(gè)節(jié)點(diǎn)都擁有其它所有節(jié)點(diǎn)的信息,包括位置、狀態(tài)等。
Cassandra的核心組件包括:
Gossip:點(diǎn)對點(diǎn)的通訊協(xié)議,用來相互交換節(jié)點(diǎn)的位置和狀態(tài)信息。當(dāng)一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí)就立即本地存儲(chǔ)Gossip信息,但當(dāng)節(jié)點(diǎn)信息發(fā)生變化時(shí)需要清洗歷史信息,比如IP改變了。通過Gossip協(xié)議,每個(gè)節(jié)點(diǎn)定期每秒交換它自己和它已經(jīng)交換過信息的節(jié)點(diǎn)的數(shù)據(jù),每個(gè)被交換的信息都有一個(gè)版本號(hào),這樣當(dāng)有新數(shù)據(jù)時(shí)可以覆蓋老數(shù)據(jù),為了保證數(shù)據(jù)交換的準(zhǔn)確性,所有的節(jié)點(diǎn)必須使用同一份集群列表,這樣的節(jié)點(diǎn)又被稱作seed。
Partitioner:負(fù)責(zé)在集群中分配數(shù)據(jù),由它來決定由哪些節(jié)點(diǎn)放置第一份的copy,一般情況會(huì)使用Hash來做主鍵,將每行數(shù)據(jù)分布到不同的節(jié)點(diǎn)上,以確保集群的可擴(kuò)展性。
Replica placement strategy:復(fù)制策略,確定哪個(gè)節(jié)點(diǎn)放置復(fù)制數(shù)據(jù),以及復(fù)制的份數(shù)。
Snitch:定義一個(gè)網(wǎng)絡(luò)拓?fù)鋱D,用來確定如何放置復(fù)制數(shù)據(jù),高效地路由請求。
cassandra.yaml:主配置文件,設(shè)置集群的初始化配置、表的緩存參數(shù)、調(diào)優(yōu)參數(shù)和資源使用、超時(shí)設(shè)定、客戶端連接、備份和安全。
?
Cassandra數(shù)據(jù)庫設(shè)計(jì)與維護(hù)總結(jié)
1.分區(qū)字段設(shè)計(jì)時(shí)選用timeuuid/timestamp(比如每日或者每小時(shí)0點(diǎn)時(shí)間戳)+任意bucket字段(類型等固定的字段)
2.cluster字段可以根據(jù)需求設(shè)計(jì)
3.使用索引時(shí)的查詢條件中務(wù)必帶上分區(qū)字段的查詢條件,否則cassandra會(huì)去所有分區(qū)字段的索引中查詢,效率低下而且一旦查詢結(jié)果中超過10萬個(gè)墓碑,就會(huì)拋出異常
4.高基數(shù)字段比如true/false這類的一般不要上索引,否則會(huì)極大的降低查詢效率
5.由于cassandra的read repair機(jī)制,執(zhí)行大量刪除操作之后如果出現(xiàn)了大量read timeout需要在每臺(tái)cassandra的bin目錄下執(zhí)行
./nodetool flush
./nodetool $ keyspace $table
強(qiáng)制合并sstable
6.如果cassandra出現(xiàn)不同節(jié)點(diǎn)間的數(shù)據(jù)一致性錯(cuò)誤,需要執(zhí)行。/nodetool repair $keyspace $table
7.如果repair還是不能解決問題,需要執(zhí)行 。/sstablescrub $keyspace $table清洗掉損壞的數(shù)據(jù),注意此操作如果中斷容易造成數(shù)據(jù)損壞,最好執(zhí)行前先做快照
8.cassandra默認(rèn)開啟了安全模式,執(zhí)行drop、truncate等敏感字段時(shí)會(huì)對數(shù)據(jù)做一次快照,過多快照會(huì)導(dǎo)致cassandra在啟動(dòng)時(shí)遍歷目錄環(huán)節(jié)花費(fèi)過長時(shí)間,最終可能需要幾個(gè)小時(shí)才能啟動(dòng),
這個(gè)時(shí)候需要執(zhí)行。/nodetool clearsnapshot $keyspace
評論