键缓存和行缓存的工作方式完全不同。了解计算尺寸的差异很重要。
键缓存是文件中用于行位置的偏移量的缓存。它基本上是从(键,文件)到偏移量的映射。因此,缩放键缓存大小取决于行数,而不是整体数据大小。您可以从“nodetool cfstats”中的“键数”参数中找到行数。请注意,这是每个节点,而不是总数,但这就是您要决定缓存大小的内容。默认大小为 min(5% of Heap (in MB), 100MB),这对于大多数应用程序来说可能已经足够了。这里的一个微妙之处是行可能存在于多个文件(SSTables)中,数量取决于您的写入模式。但是,这种重复在 nodetool 的估计计数中(大约)占了。
行缓存缓存实际行。要对此进行大小估计,您可以使用“nodetool cfstats”中的“已用空间”参数。但是,行缓存缓存反序列化的数据并且仅缓存最新的副本,因此大小可能完全不同(更高或更低)。
还有第三个可配置性较低的缓存 - 您的操作系统文件系统缓存。在大多数情况下,这实际上比行缓存要好。它避免了在内存中复制数据,因为当使用行缓存时,最有可能的数据也将在文件系统缓存中。在我的实验中,从文件系统缓存中的 SSTable 读取仅比行缓存慢 30%(不久前,可能不再有效,但不太可能有显着差异)。行缓存的主要用例是当您想要确保缓存一个相对较小的 CF 时。否则使用文件系统缓存可能是最好的。
总之,Cassandra 默认的大键缓存和无行缓存是大多数设置的最佳选择。如果您知道您的访问模式不适用于默认值或者您遇到性能问题,您应该只使用缓存。