sql的查询流程图(多级缓存)

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】V3.2.3
【问题描述】请问,OB的sql查询流程是如何在多级缓存中配置优先级的
【复现路径】问题出现前后相关操作
【问题现象及影响】

比如,query点查,先查memtable,如果命中,则加入FUSE ROW缓存,如果未命中,查询BloomFilter,发现不为空,进一步查询minor sstable的rowcache,如果还未命中,进一步查询major sstable的block index cache与block cache,最后把各层级查到的数据,进行融合后,返回客户端,并把数据更新到FUSE ROW。不知道我理解的对不对。。。

OB的点查和范围扫描时,读各级缓存的流程是否一样,可否提供一个流程图

【附件】

请稍等,我找下相关同学协助解答下。

有一点出入
ob是lsm-tree数据库, 但是并不只是简单的kv数据库, 而是标准的关系数据库
同一个主键数据, 如果发生更新, 每次更新只会写入更新部分的新值, 而不是全量数据
在这个背景下, 如果用户发生点查, 查询一个rowkey
那么这个rowkey对应的全行数据可能分布在memtable和不同sstable上, 查询会从memtable一直查到最老的sstable, 但是截止条件是构造出了用户所需要的所有投影列
fuse row cache也是放入了包含所有列的全行数据, 这个就是查询fuse过程中顺带完成的副产品

能详细说一下table get和table scan的区别吗? 可否用文字描述一下流程

范围查询就是table scan
点查,就是where条件中带主键全部字段值,就是table get

get就是scan的一个特化路径, 如果一个scan range只包含一个主键, 就是get

我想了解的区别是,点查和范围查询,在多级缓存上是不是有区别,比如OB在点查方面优化了,尤其是在缓存方面,因为点查属于key value的查询

有相关更详细的资料嘛?OB的查询是如何使用多级缓存的

暂时没有更多专门讲解此处的资源,我们内部会考虑增加一些相关介绍。