怎么提高cassandra读存储性能

43次阅读
没有评论

共计 2236 个字符,预计需要花费 6 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章给大家分享的是有关怎么提高 cassandra 读存储性能的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

cassandra 作为一个分布式的存储性能,其特点是写快读慢。最近看了 cassandra 1.0 的文档,发现 1.0 在读性能上做了一些提高。用户可以根据系统的要求,合理配置,从而提高读的性能。下面丸趣 TV 丸趣 TV 小编来讲解下如何提高 cassandra 读存储性能?

如何提高 cassandra 读存储性能

1、禁用 read repair

每一次读操作,cassandra 都会在后台进行 read repair 操作。如果只要求读一个节点数据,cassandra 在读到一个节点后,就将结果返回客户端,然后用 read repair 对其他的 replicas 进行同步 (根据 timestamp)。如果要求读多个节点,那么 cassandra 就读多个节点,然后根据 timestamp 进行比较,返回客户端最新的数据,然后再调用 read repair 对其他节点进行同步。Read repair 在后台的操作,会占用一定的 CPU 和 I /O, 所以影响读性能。要提高读的性能,可以将 read repair 禁用掉,当然这会影响到一致性,但是对于节点比较稳定的系统,是可以考虑的。一种方法时用 hinted off 和 nodel tool 的 node reapair 定期对其进行同步,提高一致性。在 cassandra1.0 之前,禁用 read repair 需要修改代码,新的 cassandra1.0 可以通过对每个读操作调参 (0 到 1),来设定 read repair 的机率。

Compaction:使用 Leveled compaction,并设定 multithreaded_compaction, 提高 compaction 的速度。

在《cassandra 中的压缩策略》(http://www.cnblogs.com/marysam/articles/2266061.html) 这个文章中,我介绍了 cassandra1.0 目前支持的两种 compaction 策略 —Tiered Compaction 和 Leveled Compaction。

对于 leveled compaction, 可以对读写性能带来提升。在 cassandra1.0 的文档中说明,使用了 leveled compaction, 读性能提高了 400%。

Leveled compaction 能够给读性能带来提高的原因是,leveled comapction 中每一层都没有重复的记录,这样保证了可以保证 90% 的读都可以在一个 sstable 中完成。最坏的情况是一个记录存在在每一层,但是这个时候 10TB 的数据也就 7 层,查 7 个 SStable 就可以了。

2、Compression

在 http://www.datastax.com/dev/blog/whats-new-in-cassandra-1-0-compression 中对 cassandra 的 compression 做了介绍。这里说道,用 compression, 其读的性能提高了 25%-35%。

Compression 之所以能够提高读的性能,是因为经过 compression 之后,每个节点能够存储更多的数据。同时 Cassandra 能在 SStable index 中够迅速地定位到记录的位置,然后解压这些记录进行操作。也就是说 compression 从两方面提高了读的速度:

允许更多的数据在内存中对于不再内存中,但是经常访问的数据,也能通过 SStable index 更快地访问。

如何提高 cassandra 读存储性能

3、调整 key cache 和 row cache 的值

Key cache: 在内存中保存了记录的位置。当一个 row 的 column 很大时,不适宜将 row 整个放在内存中,这个时候只要保存 key 的位置, 也就是 row 的位置就可以。这样可以让程序快速定位到 row 并进行操作。对于有大量对 row 进行操作的系统,有很大的提高。默认时 200,000。可以用 nodetool cfstats 或者时 jconsole 进行检测,查看其命中率。

Row cache:row cache 把整个 row 的内容都放在内存中。适合的情况是,有一小部分 hot data 是经常反问的,或者要返回整个 columns. 在使用 row cache 时,用注意它对内存的影响。

key cache 如果命中的话,会减少一次的查询。Row cache 如果命中的话,减少两次的查询,对于 column 的类型是图片的系统,当然每个 row 是很大的,不能寄希望于 row cache 提高性能。但是我们可以把 key cache 提高,甚至设置成全部 row 的 keys。这样保证所有的读操作,都能在 key cache 中命中。

4、设置 JVM heap 的大小

在 cassandra 1.0 中的,key cache 时保存在 JVM heap 中,而 Row cache 是保存在电脑的内存中。如果想要提高 row cache 的命中率,就要注意 JVM heap 大小的设置。既要保证 JVM heap 可以容纳 menber table, key cache 以及其他大概 1GB 的使用,又要防止 JVM heap 过大,影响电脑中 row cache 的命中。

感谢各位的阅读!关于“怎么提高 cassandra 读存储性能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2236字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)