【问题标题】:Difference between Cassandra Row caching and Partition key cachingCassandra 行缓存和分区键缓存的区别
【发布时间】:2014-09-24 14:28:14
【问题描述】:

行缓存和分区键缓存有什么区别?我是否需要同时使用两者以获得良好的性能视角。

我已经阅读了dataStax网站的基本定义

分区键缓存是一个分区索引的缓存 卡桑德拉表。使用密钥缓存而不是依赖操作系统页面 缓存可以节省 CPU 时间和内存。但是,仅启用密钥缓存 导致磁盘(或操作系统页面缓存)活动实际读取 请求的数据行。

行缓存类似于 memcached 等传统缓存。当一个 行被访问,整行被拉入内存,从 如有必要,多个 SSTables 并缓存,以便进一步读取 完全不打磁盘就可以满足反对该行的要求。

谁能详细说明使用领域。确实需要两者都实现。 ?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    TL;DR : 你想使用 Key Cache 并且很可能 NOT 想要行缓存。

    密钥缓存帮助 C* 了解特定分区在 SStables 中的起始位置。这意味着 C* 不必读取任何内容来确定文件中的正确位置以开始读取行。这对几乎所有用例都有好处,因为它通过潜在地消除读取路径中对 IOP 的需求而大大加快了读取速度。

    行缓存的用例更为有限。行缓存将整个分区拉入内存。如果该分区的任何部分已被修改,则该行的整个缓存都将失效。对于大分区,这意味着缓存可能会频繁地缓存大块内存并使大块内存无效。因为您确实需要大部分静态分区才能使其有用,所以对于大多数用例,建议您不要使用行缓存。

    【讨论】:

    • 嗨@RussS 感谢您的回复。在我的用例中。我有很宽的行。并且这些行经常更新。我的首要任务是延迟和吞吐量。根据您的定义,我知道每当一行更新时,整行都会重新加载。所以我的问题是,如果我垂直扩展我的记忆。这会帮助我使用行缓存来实现更好的延迟
    • 这很可能无济于事,但您必须确定基准。对于像您这样的用例,我会感到非常舒服地押注行缓存。对于大量更新,请尝试分级压缩策略。
    • 我明白你的意思,肯定会进行基准测试。我想通过阅读我的声明中的“更新行”,您了解添加新列,而不是更新列。
    • 是的,这算作更改分区。
    • 如果缓存中不存在key,会是什么情况?
    猜你喜欢
    • 2018-09-22
    • 2011-03-12
    • 2014-03-03
    • 1970-01-01
    • 2019-12-01
    • 2017-07-15
    • 2011-04-11
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多