Cassandra 1.2.2 提供的示例配置文件的 arow_cache_size_in_mb
为 0,它完全关闭行缓存。鉴于行缓存被吹捧为可以提高读取性能,令我惊讶的是根本没有预留行缓存,甚至没有几十 MB。
在大多数情况下,行缓存实际上是否不再值得?还是在大多数情况下都不值得?是否只值得作为替代品memcached
?
Cassandra 1.2.2 提供的示例配置文件的 arow_cache_size_in_mb
为 0,它完全关闭行缓存。鉴于行缓存被吹捧为可以提高读取性能,令我惊讶的是根本没有预留行缓存,甚至没有几十 MB。
在大多数情况下,行缓存实际上是否不再值得?还是在大多数情况下都不值得?是否只值得作为替代品memcached
?
当从相对较小的列族进行多次读取时,行缓存会有所帮助。尽管数据本来会存储在 OS 文件系统缓存中,但从行缓存对象构建响应的 CPU 比从缓存的 SSTable 中构建响应的 CPU 更少。在我所做的一些测试中,从行缓存中读取的速度提高了 30%,尽管这在很大程度上取决于您的数据模型。
行缓存的另一个用例是当您希望优先将列族固定在缓存中而不是依赖于操作系统缓存策略时。
但是,对于不可缓存的 CF,行缓存会降低性能。这可能是它默认关闭的原因。因此,只有在获得合理的命中率时才应该使用行缓存。您可以从 nodetool 信息输出中检查这一点。
从 2.1 开始,行缓存现在更加有用,因为您不必将整个分区存储在内存中。这是通过表定义上的每个分区设置的行数来实现的。它最适用于您选择最近的 x 并使用聚类顺序的查询。
http://www.datastax.com/dev/blog/row-caching-in-cassandra-2-1