您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)怎么提高cassandra讀存儲(chǔ)性能的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
cassandra作為一個(gè)分布式的存儲(chǔ)性能,其特點(diǎn)是寫快讀慢。最近看了cassandra 1.0的文檔,發(fā)現(xiàn)1.0在讀性能上做了一些提高。用戶可以根據(jù)系統(tǒng)的要求,合理配置,從而提高讀的性能。下面億速云小編來講解下如何提高cassandra讀存儲(chǔ)性能?
如何提高cassandra讀存儲(chǔ)性能
1、禁用read repair
每一次讀操作,cassandra都會(huì)在后臺(tái)進(jìn)行read repair操作。如果只要求讀一個(gè)節(jié)點(diǎn)數(shù)據(jù),cassandra在讀到一個(gè)節(jié)點(diǎn)后,就將結(jié)果返回客戶端,然后用read repair對(duì)其他的replicas進(jìn)行同步(根據(jù)timestamp)。如果要求讀多個(gè)節(jié)點(diǎn),那么cassandra就讀多個(gè)節(jié)點(diǎn),然后根據(jù)timestamp進(jìn)行比較,返回客戶端最新的數(shù)據(jù),然后再調(diào)用read repair對(duì)其他節(jié)點(diǎn)進(jìn)行同步。Read repair在后臺(tái)的操作,會(huì)占用一定的CPU和I/O,所以影響讀性能。要提高讀的性能,可以將read repair禁用掉,當(dāng)然這會(huì)影響到一致性,但是對(duì)于節(jié)點(diǎn)比較穩(wěn)定的系統(tǒng),是可以考慮的。一種方法時(shí)用hinted off和nodel tool的node reapair定期對(duì)其進(jìn)行同步,提高一致性。在cassandra1.0之前,禁用read repair需要修改代碼,新的cassandra1.0可以通過對(duì)每個(gè)讀操作調(diào)參(0到1),來設(shè)定read repair的機(jī)率。
Compaction:使用Leveled compaction,并設(shè)定multithreaded_compaction,提高compaction的速度。
在《cassandra中的壓縮策略》(http://www.cnblogs.com/marysam/articles/2266061.html)這個(gè)文章中,我介紹了cassandra1.0目前支持的兩種compaction策略---Tiered Compaction和Leveled Compaction。
對(duì)于leveled compaction,可以對(duì)讀寫性能帶來提升。在cassandra1.0的文檔中說明,使用了leveled compaction,讀性能提高了400%。
Leveled compaction能夠給讀性能帶來提高的原因是,leveled comapction中每一層都沒有重復(fù)的記錄,這樣保證了可以保證90%的讀都可以在一個(gè)sstable中完成。最壞的情況是一個(gè)記錄存在在每一層,但是這個(gè)時(shí)候10TB的數(shù)據(jù)也就7層,查7個(gè)SStable就可以了。
2、Compression
在http://www.datastax.com/dev/blog/whats-new-in-cassandra-1-0-compression中對(duì)cassandra 的compression做了介紹。這里說道,用compression,其讀的性能提高了25%-35%。
Compression 之所以能夠提高讀的性能,是因?yàn)榻?jīng)過compression之后,每個(gè)節(jié)點(diǎn)能夠存儲(chǔ)更多的數(shù)據(jù)。同時(shí)Cassandra能在SStable index中夠迅速地定位到記錄的位置,然后解壓這些記錄進(jìn)行操作。也就是說compression從兩方面提高了讀的速度:
允許更多的數(shù)據(jù)在內(nèi)存中對(duì)于不再內(nèi)存中,但是經(jīng)常訪問的數(shù)據(jù),也能通過SStable index更快地訪問。
如何提高cassandra讀存儲(chǔ)性能
3、調(diào)整key cache和row cache的值
Key cache:在內(nèi)存中保存了記錄的位置。當(dāng)一個(gè)row的column很大時(shí),不適宜將row整個(gè)放在內(nèi)存中,這個(gè)時(shí)候只要保存key的位置,也就是row的位置就可以。這樣可以讓程序快速定位到row并進(jìn)行操作。對(duì)于有大量對(duì)row進(jìn)行操作的系統(tǒng),有很大的提高。默認(rèn)時(shí)200,000。可以用nodetool cfstats或者時(shí)jconsole進(jìn)行檢測,查看其命中率。
Row cache:row cache 把整個(gè)row 的內(nèi)容都放在內(nèi)存中。適合的情況是,有一小部分hot data是經(jīng)常反問的,或者要返回整個(gè)columns.在使用row cache時(shí),用注意它對(duì)內(nèi)存的影響。
key cache 如果命中的話,會(huì)減少一次的查詢。Row cache如果命中的話,減少兩次的查詢,對(duì)于column的類型是圖片的系統(tǒng),當(dāng)然每個(gè)row是很大的,不能寄希望于row cache提高性能。但是我們可以把key cache提高,甚至設(shè)置成全部row的keys。這樣保證所有的讀操作,都能在key cache中命中。
4、設(shè)置JVM heap的大小
在cassandra 1.0中的,key cache時(shí)保存在JVM heap中,而Row cache是保存在電腦的內(nèi)存中。如果想要提高row cache 的命中率,就要注意JVM heap大小的設(shè)置。既要保證JVM heap可以容納menber table, key cache以及其他大概1GB的使用,又要防止JVM heap過大,影響電腦中row cache的命中。
感謝各位的閱讀!關(guān)于“怎么提高cassandra讀存儲(chǔ)性能”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。