为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【TiDB 版本】
【问题描述】
TiDB 下推 API 实现细节 - Union Scan https://pingcap.com/blog-cn/tidb-api-union-scan/#下面是这个算法的简介
文章里的描述1:
“UnionStore 的实现是基于 Key Value 的,但是下推 API 返回的结果是基于 Row 的,也就是说,我们虽然有脏数据 Buffer 和下推 API 返回的结果集, 但是我们没有办法把这两部分数据合并在一起, 所以我们为了绕过这个问题,加了一个判断条件,当事务写入了 Buffer,包含了脏数据以后,就不走下推 API,而是使用基础的 KV API”
问题: 读取的keyvalue是否也放入这membuffer内,还是只包含更新后的脏数据?在update操作时直接在buffer中的相应key直接更新还说原位置标记删除然插入一个新的kv到buffer
描述2:
“”我们为每个事务在对某个 table 执行写操作时,创建一个 dirtyTable 保存这个事务的修改,dirtyTable 包含两个 map,一个是 addedRows,用来保存新写入的 row,另一个是 removedRows,用来保存删除的 row,对于不同的操作,我们需要对这两个 map 做不同的操作。
问题: 这里dirtytable和前面的buffer是否共存的,同时保留了2分不同格式的脏数据?