关于查询行缓存的疑问

官方文档有写到对行进行缓存,关于行缓存有几个问题想确认下:

  1. 数据块缓存应该就是在memtable里的增量数据,那行缓存是一起放在memtable里的还是独立出来的?
  2. 如果数据库所有数据都以行缓存的形式存在,那内存肯定不够了,那行缓存的产生条件以及留存条件分别是什么?
  3. 查询请求什么场景下会用到行缓存,只有点查吗还是有其他条件也可以?

因为有说到性能可以接近内存数据库的性能,所以比较感兴趣,忘大佬们答疑解惑~

  1. 数据块缓存是指ob中微块(micro block)的缓存,并非memtable中的增量数据。行缓存是独立的,不是放在memtable中。
  2. row cache插入的条件是:部分查询会带放入row cache的flag,例如点查,这类查询吐出去的行会放入row cache。淘汰条件是内存不足是采用类似lru的策略淘汰。
  3. 点查、索引回表等场景都会用到row cache,range scan等查询通常只能利用微块缓存。
  4. 可以接近内存数据库性能是因为lsm-tree的写入是先写内存,内存满了才刷盘,而非传统b-tree数据库在写入时也可能触发脏页刷盘。ob这种基于lsm-tree的数据库在dml操作时都是先操作内存,这跟内存数据库比较像,不同点是ob是需要持久化的,除了写内存外,还需要写redo log,因此说接近内存数据库性能。
1 个赞