我测试了行缓存,并发现它需要大量的堆 - 我想验证这个理论。
这是我的测试密钥空间: { TestCF:{
row_key_1: {
{ clientKey: "MyTestCluientKey" },
{ tokenSecret: "kd94hf93k423kf44" },
{ verifier: "hfdp7dh39dks9884" },
{ callbackUrl: "http%3A%2F%2Fprinter.test.com%2Fready" },
{ accountId: "234567876545"},
{ mytestResourceId: "ADB112"},
{ dataTimestamp: "1308903420400" },
{ dataType: "ACCESS_PERMANENT"}
},
row_key_2: {
{ clientKey: "MyTestCluientKey" },
{ tokenSecret: "qdqergvhetyhvetyh" },
{ verifier: "wtrgvebyjnrnuiucewrqxcc" },
{ callbackUrl: "http%3A%2F%2Fprinter.test.com%2Fready" },
{ accountId: "23456789746534"},
{ mytestResourceId: "DQERGCWRTHB"},
{ dataTimestamp: "130890342333200" },
{ dataType: "ACCESS_LIMITED"}
},
... row_key_x:{ .... },
}
}
CF中的每一行:TestCF包含8列。行缓存已启用,密钥缓存已禁用。行命中率0.99 - 这是只读测试。
我的测试将1.500.000行加载到缓存中 - 这会分配大约3.5GB的堆 - 这大约是2KB的单行 - 这很多......
是否有可能,单行(8列)可以分配大约2KB的堆?
谢谢你, 马切伊
答案 0 :(得分:5)
是的,经验法则是memtable或行缓存中的一行将占用序列化大小的8倍到12倍。如果您安装了JNA,这就是堆外缓存是1.0中的默认值的一个原因:off-heap以序列化形式存储行。