剛開始使用cassandra的時(shí)候,不太清楚為什么要使用cassandra。在想用mysql或redis等不是可以替代cassandra嗎? 為什么要花時(shí)間去了解使用它呢?
下面簡(jiǎn)單講一下,我們?yōu)槭裁匆褂胏assandra。
cassandra的特點(diǎn)好處
- 方便擴(kuò)展存儲(chǔ)
- 有彈性的模式定義
- 高寫入性能。
具體解釋
- 方便擴(kuò)展存儲(chǔ)
Cassandra是分布式系統(tǒng),==只需要增加節(jié)點(diǎn)就可以擴(kuò)充存儲(chǔ)空間==;眾所周知,mysql的單表數(shù)據(jù)量是有瓶頸的,當(dāng)數(shù)據(jù)量到達(dá)一定級(jí)別,就需要考慮分庫(kù)分表或者分區(qū)等等。并且mysql不是一個(gè)分布式的數(shù)據(jù)庫(kù)(雖然有主從,這不是真正意義上的分布式)。
使用cassandra,則不需要考慮該問題,當(dāng)數(shù)據(jù)量增加,只需要增加cassandra的機(jī)器即可(運(yùn)維層面擴(kuò)展),對(duì)于開發(fā)來講,幾乎沒有影響。
- 有彈性的模式定義
cassandra的設(shè)計(jì)機(jī)制決定了,它的數(shù)據(jù)模式(列的增減)的改動(dòng)的成本是非常低的。在mysql中,對(duì)一張大數(shù)據(jù)的表進(jìn)行schema改動(dòng)(列的增刪改)的成本是非常非常高的,一不小心就會(huì)導(dǎo)致鎖表,導(dǎo)致業(yè)務(wù)異常。而==有的業(yè)務(wù)數(shù)據(jù)量很大又由于需求的不穩(wěn)定性會(huì)經(jīng)常要求改動(dòng)數(shù)據(jù)的模式定義==,這時(shí)就可以考慮cassandra,Cassandra很適合做這樣的事;
- 高寫入性能
Cassandra寫入性能是非常高的,Netflix曾經(jīng)在一次測(cè)試中達(dá)到每秒超過100萬次的寫入;非常適合高寫入的應(yīng)用,如廣告點(diǎn)擊記錄,用戶瀏覽記錄等等
- 較高(不低)的讀取性能
有的業(yè)務(wù)在選擇使用cassandra的時(shí)候會(huì)因?yàn)閺哪承┵Y料里面得知,cassandra的讀取性能很低,而不敢使用。這點(diǎn)其實(shí)是誤解,在cassandra的早期版本確實(shí)是這樣。但是隨著cassandra的發(fā)展,該問題已經(jīng)得到了顯著解決。具體可以參考DataStax公司的CTO兼聯(lián)合創(chuàng)始人的這篇文章關(guān)于cassandra的錯(cuò)誤觀點(diǎn)。
但是當(dāng)你的業(yè)務(wù)對(duì)讀取有較高的要求時(shí),建議選擇正確的cassandra版本并進(jìn)行合理的測(cè)試
適用場(chǎng)景
快速開發(fā)應(yīng)用程序:Schema Free的特點(diǎn),讓Cassandra可以快速適應(yīng)你的初期變更;如果你使用關(guān)系型數(shù)據(jù)庫(kù),那么就不得不從數(shù)據(jù)表、DAO層、Logic/Service層到UI層進(jìn)行層層變更,哪怕只是一個(gè)小小的列名或字段類型變化;
大量寫入、統(tǒng)計(jì)和分析:Cassandra的列族設(shè)計(jì)是囊括數(shù)據(jù)關(guān)聯(lián)和排序的,并且可以不存儲(chǔ)不需要的數(shù)據(jù),這極大減省了表聯(lián)接和冗余字段帶來的性能開銷,后者恰恰是高并發(fā)寫入操作、統(tǒng)計(jì)分析時(shí)關(guān)系型數(shù)據(jù)庫(kù)的瓶頸;
需要擴(kuò)展的部署結(jié)構(gòu):Cassandra是面向分布式的設(shè)計(jì),這讓它可以靈活地水平擴(kuò)展,以在運(yùn)維階段滿足你的需求,而不必考慮“將數(shù)據(jù)遷往更高性能的服務(wù)器”這樣的問題。
使用實(shí)例
- Yelp的廣告分析系統(tǒng)
- Spotify的所有用戶信息存儲(chǔ)