高价值行缓存有什么影响?

时间:2019-03-21 06:56:39

标签: cassandra cassandra-3.0 ccm

最近,我已经完成了有关键缓存和行缓存的教程。有人可以帮我提供一些可能影响这些缓存的实时示例吗?如果我们在配置文件中增加这些值,会产生什么影响?

在使用desc表时,我发现了这一点

AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'

1 个答案:

答案 0 :(得分:0)

您主要关心的是应用程序的内存配置文件。

此图演示了密钥缓存如何优化读取路径,它使我们可以跳过分区摘要和分区索引,直接进入压缩偏移量。至于行缓存,如果您遇到了麻烦,那么您就有了答案,根本不需要沿读取路径前进。

enter image description here

密钥缓存-默认情况下,密钥缓存处于启用状态,因为它仅保留该行的密钥。密钥通常相对于该行的其余部分较小,因此该缓存可以在耗尽之前容纳许多条目。

行缓存-行缓存可容纳整行,当您具有相当静态的查询模式时,此行很有用。行缓存的理由是​​,如果您一遍又一遍地读取相同的行,则可以将它们保留在内存中,而不是进入SSTable(存储介质)级别,从而绕过读取路径上的昂贵查找。在实践中,由于在非最佳用例中使用行缓存而导致的内存减慢使其成为不受欢迎的功能。

那么,如果您填满缓存会怎样?好吧,这里有一个驱逐策略,但是如果您不断地从两个缓存中踢出东西来为新项目腾出空间,那么缓存将不会真正有用,因为与gc相关的性能下降会损害整体性能。

具有很高的缓存值怎么办?在这里有更好的选择,以后再介绍。增大行缓存的容量只会导致GC问题,具体取决于您正在执行的操作,通常会导致整体性能净损失。

我看到相对较好地利用了一个想法,就是在Cassandra的顶部有一个缓存层,例如Apache Ignite或Memcached。您可以在缓存层中加载热数据以获得快速读取,并使用先写入缓存层然后写入C *的应用程序进行写入以实现持久性。这些体系结构会带来很多麻烦,但是如果您想缓存数据以降低查询延迟,那么C *行缓存并不是最佳的工具。