我们目前正在部署一个更大的 Cassandra 集群并寻找方法来估计密钥缓存的最佳大小。或者更准确地寻找一种方法来找出键缓存中一行的大小。
我曾尝试使用石墨连接到集成度量系统,但我无法收到任何明确的答案。此外,我尝试将自己的调试代码放入 org.cassandra.io.sstable 中,但这都没有产生任何具体的结果。
我们使用的是 Cassandra 1.20.10,但是有没有万无一失的解决方案来获取密钥缓存中一行的大小?
最诚挚的问候,
本
我们目前正在部署一个更大的 Cassandra 集群并寻找方法来估计密钥缓存的最佳大小。或者更准确地寻找一种方法来找出键缓存中一行的大小。
我曾尝试使用石墨连接到集成度量系统,但我无法收到任何明确的答案。此外,我尝试将自己的调试代码放入 org.cassandra.io.sstable 中,但这都没有产生任何具体的结果。
我们使用的是 Cassandra 1.20.10,但是有没有万无一失的解决方案来获取密钥缓存中一行的大小?
最诚挚的问候,
本
检查果酱。它是一个用于测量内存中对象大小的库。
您需要添加-javaagent:"/path/to/jamm.jar"
启动参数,但cassandra 配置为以 jamm 启动,因此如果您更改内部 cassandra 代码,这已经为您完成了。
对象的大小(以字节为单位):
MemoryMeter meter = new MemoryMeter();
meter.measureDeep(object);
测量深度是对对象内存大小的更昂贵但更准确的测量。
为了估计密钥大小,假设您打算在缓存中存储 100 万个密钥,每个密钥平均长度为 60 字节。存储密钥会有一些开销,假设它是 40 字节,这意味着每行的密钥大小 = 100 字节。
因为我们需要缓存 100 万个键
总密钥缓存 = 1 mn * 100 = 100 MB
为您的密钥空间中的每个 CF 执行此操作。