高值行缓存有什么影响?

brqmpdu1  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(370)

最近我学习了一个关于键缓存和行缓存的教程。有谁能帮我提供一些这些缓存可能影响的实时示例吗?如果我们在配置文件中增加这些值会有什么影响?
在使用desc表时我发现了这个

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

c2e8gylq1#

您主要关心的是应用程序的内存配置文件。
此图演示了密钥缓存如何优化readpath,它允许我们跳过分区摘要和分区索引,直接转到压缩偏移量。至于行缓存,如果命中,就得到了答案,根本不需要沿着读取路径前进。

密钥缓存-密钥缓存在默认情况下处于启用状态,因为它只保留行的密钥。相对于行的其余部分,键通常较小,因此此缓存可以在耗尽之前保存许多项。
行缓存-行缓存保存一整行,在具有相当静态的查询模式时非常有用。行缓存的理由是,如果您一遍又一遍地读取相同的行,您只需将它们保存在内存中,而不必转到sstable(存储介质)级别,从而绕过读取路径上昂贵的寻道。实际上,在非最佳用例中使用行缓存导致的内存减速使其成为不受欢迎的特性。
如果你填满了缓存会怎么样?好吧,有一个逐出策略,但是如果你不断地从任何一个缓存中踢出一些东西来为新的项目腾出空间,那么缓存将不完全有用,因为gc相关的性能降低将损害整体性能。
拥有非常高的缓存值怎么样?这是有更好的替代品的地方,稍后再谈。使行缓存变大只会导致gc问题,这取决于您正在执行的操作,通常会导致总体性能的净损失。
我看到的一个使用得比较好的想法是在cassandra之上有一个缓存层,比如apacheignite或memcached。在缓存层中加载热数据以获得快速读取,然后使用一个应用程序进行写入,该应用程序先写入缓存层,然后写入c以实现持久性。这些体系结构本身也有许多令人头痛的问题,但是如果您想缓存数据以降低查询延迟,那么c行缓存并不是该工作的最佳工具。

相关问题