高值行缓存有什么影响?

问题描述 投票:1回答:1

最近我经历了关于密钥缓存和行缓存的教程。任何人都可以帮助我解决这些缓存可能影响的实时示例吗?如果我们在配置文件中增加这些值会有什么影响?

在使用desc表时我发现​​了这个

AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
cassandra cassandra-3.0 ccm
1个回答
0
投票

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

此图演示了密钥缓存如何优化读取路径,它允许我们跳过分区摘要和分区索引,并直接进入压缩偏移量。至于行缓存,如果你受到了打击,你就得到了答案,根本不需要沿着读取路径走下去。

enter image description here

密钥缓存 - 密钥缓存默认打开,因为它只保留行的密钥。键通常相对于行的其余部分较小,因此该缓存可以在耗尽之前保存许多条目。

行缓存 - 行缓存包含整行,并且在具有相当静态的查询模式时非常有用。行缓存的参数是,如果您反复读取相同的行,则可以将它们保留在内存中而不是转到SSTable(存储介质)级别,从而绕过读取路径上的昂贵搜索。实际上,在非最佳用例中使用行缓存导致的内存减慢使其成为不受欢迎的特性。

那么如果你填满缓存怎么办?好吧,有一个驱逐政策但是如果你经常从任一缓存中踢出东西来为新项目腾出空间,那么缓存将不会完全有用,因为与gc相关的性能下降会损害整体性能。

拥有非常高的缓存值怎么样?这是有更好的选择的地方,稍后会有更多的选择。使行缓存变得庞大只会导致GC问题,这取决于您正在做的事情,通常会导致整体性能损失。

我看到相对较好地使用的一个想法是在Cassandra上有一个缓存层,例如Apache Ignite或Memcached。您可以在缓存层中加载热数据以获得快速READ,然后使用写入缓存层的应用程序编写,然后使用C *进行持久性编写。这些体系结构带来了许多令人头疼的问题,但如果您希望缓存较低查询延迟的数据,则C *行缓存不是该作业的最佳工具。

© www.soinside.com 2019 - 2024. All rights reserved.