【问题标题】:Row Cache Heap Requirements (Cassandra 1.0)行缓存堆要求 (Cassandra 1.0)
【发布时间】:2011-11-04 02:36:44
【问题描述】:

我测试了行缓存,发现它需要大量的堆 - 我想验证这个理论。

这是我的测试密钥空间: { 测试CF:{

    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 pro 单行 - 这是很多......

有没有可能,单行(8列)可以分配大约2KB的堆?

谢谢, 马切耶

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    是的,根据经验,memtable 或行缓存中的一行将占用其序列化大小的 8 倍到 12 倍。如果您安装了 JNA,这也是 1.0 中默认使用堆外缓存的原因之一:堆外以序列化形式存储行。

    【讨论】:

    • 感谢您的回答。我将使用较短的列名 - 这应该会节省一些 RAM。 2KB真的很硬核。堆外缓存要慢得多,但总比直接访问硬盘要好。
    • 我已经测试了较短的列名——在我的例子中,我可以为 4GB 的行缓存节省 300MB RAM。 4GB --> 3,7GB。最好的解决方案是关闭堆行缓存。
    猜你喜欢
    • 2018-02-14
    • 2017-01-29
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多