cassandra和行缓存更新

时间:2017-07-16 13:36:11

标签: caching cassandra row

Cassandra具有行缓存以提高读取性能。我有一个用例,其中一个表有20个字段,其中只有2个字段(f1和f2)更频繁地更新/更改任何给定行,而其他字段非常静态。

如果行缓存最初包含特定主键K1的行值(整行),则读取此行(整个)将很快。稍后如果我更新这一行的f1和f2字段(假设f1和f2新值在memtable中 - 在内存中)那么

1)读取此行(整行)同样快,即是否有任何磁盘访问?

2)读取此行的f1和f2字段(值是否可记忆)是否快?

3)将只读取该行的其他值(f1和f2除外 - 它们没有更改/更改/更新很长时间并且在行缓存中)是否很快?

1 个答案:

答案 0 :(得分:0)

如果写入某行,则其行缓存无效,并且在读取之前不会再次缓存。

Cassandra阅读路径:

  1. 如果行在行缓存中,则返回数据
  2. 否则检查布隆过滤器。如果bloom过滤器指示SSTables中不存在该行,那么我们不必读取SSTables,只读取MemTable。
  3. 阅读MemTable并阅读必须阅读的每个SSTable并与MemTable中的数据合并
  4. 使用合并数据更新行缓存。
  5. 返回合并后的数据
  6. Cassandra Read Path

    因此,在您的情况下,第一行键benzin_txt.text -= 1; 的整行位于行缓存中。然后您更新了K1f1,以便整行从行缓存中失效。

    1. 如果您读取整行,则将从MemTable和SSTables中的MemTable或Both读取行缓存未命中和数据。所以它会很慢

    2. 如果您阅读f2f1,则行缓存未命中,如果不在SSTables中的数据则只从MemTable(快速)读取,否则从MemTable和SSTables读取(慢) )。

    3. 除了f1和f2之外的读取字段必须位于SSTable中,因此将从SSTable和MemTable中读取数据。所以它会很慢