Cassandra具有行缓存以提高读取性能。我有一个用例,其中一个表有20个字段,其中只有2个字段(f1和f2)更频繁地更新/更改任何给定行,而其他字段非常静态。
如果行缓存最初包含特定主键K1的行值(整行),则读取此行(整个)将很快。稍后如果我更新这一行的f1和f2字段(假设f1和f2新值在memtable中 - 在内存中)那么
1)读取此行(整行)同样快,即是否有任何磁盘访问?
2)读取此行的f1和f2字段(值是否可记忆)是否快?
3)将只读取该行的其他值(f1和f2除外 - 它们没有更改/更改/更新很长时间并且在行缓存中)是否很快?
答案 0 :(得分:0)
如果写入某行,则其行缓存无效,并且在读取之前不会再次缓存。
Cassandra阅读路径:
因此,在您的情况下,第一行键benzin_txt.text -= 1;
的整行位于行缓存中。然后您更新了K1
和f1
,以便整行从行缓存中失效。
如果您读取整行,则将从MemTable和SSTables中的MemTable或Both读取行缓存未命中和数据。所以它会很慢
如果您阅读f2
和f1
,则行缓存未命中,如果不在SSTables中的数据则只从MemTable(快速)读取,否则从MemTable和SSTables读取(慢) )。
除了f1和f2之外的读取字段必须位于SSTable中,因此将从SSTable和MemTable中读取数据。所以它会很慢