当前位置:网站首页>TiFlash 源码阅读(五) DeltaTree 存储引擎设计及实现分析 - Part 2
TiFlash 源码阅读(五) DeltaTree 存储引擎设计及实现分析 - Part 2
2022-07-29 12:03:00 【InfoQ】
读


快照读
- 可以提供一定的 ACID 隔离(快照隔离级别),例如不会读出写到一半的数据
- 长时间的读和写不会互相阻塞,可以同时进行,对于读大量数据的场景比较友好
MemTableSet 的快照
for (const auto & file : column_files)
{
if (auto * m = file->tryToInMemoryFile(); m)
{
snap->column_files.push_back(std::make_shared<ColumnFileInMemory>(*m));
}
else
{
snap->column_files.push_back(file);
}
total_rows += file->getRows();
total_deletes += file->getDeletes();
磁盘上 Delta 层数据的快照
磁盘上 Stable 层数据的快照
Scan 实现

- 最底层 DeltaMergeBlockInputStream:返回合并自 MemTableSet、磁盘上的 Delta 层、磁盘上的 Stable 层这三个来源的数据流。这个流返回的数据是有序的,一定按照 (Handle, Version) 升序排列,但并不保证返回的数据一定符合给定的区间范围。
- DMRowKeyFilterBlockInputStream:依据 Handle 列的范围进行过滤并返回
- DMVersionFilterBlockInputStream:依据 Version 列的值进行 MVCC 过滤
DeltaMergeBlockInputStream

- 从各个底层流中取一行,放入最小堆中
- 从最小堆中取出当前最小的这一行(这一行一定是步骤 1 中各行里最小的),作为流输出的第一行
- 从取走行的流中补充一行到最小堆中
- 重复步骤 2
- 无论读哪一列,都需要依据 Sort Key 作为最小堆的排序依据,换句话说 Sort Key 列总是需要被读出来,哪怕它并不是用户所请求的数据列
- 基于堆的算法只能以行为单位处理,有较多的分支判断,无法充分利用 CPU 流水线

DMRowKeyFilterBlockInputStream
DMVersionFilterBlockInputStream

边栏推荐
- 金仓数据库KingbaseES安全指南--6.8. SSPI身份验证
- Chapter 2 Summary
- 【每日SQL打卡】DAY 24丨找到连续区间的开始和结束数字【难度中等】
- 学习周刊-总第64期-一个v2ex风格的开源论坛程序
- 【Untitled】
- Js array commonly used API
- Basic knowledge of redis database learning - basic, commonly used
- 测试环境要多少,从现实需求说起
- 力扣sql刷题(四)
- Insights into the development of the enterprise live broadcast industry in 2022
猜你喜欢
HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
通过递归的方式实现树形结构
Paddle frame experience evaluation and exchange meeting, the use experience of the product is up to you!
小程序云函数实现微信支付如此简单
【年中总结】创业3年,越来越穷,还是坚持架构平台
【第三次自考】——总结
AI cocoa AI frontier introduction (7.29)
593. 有效的正方形
Network layer and transport layer restrictions
金仓数据库KingbaseES客户端编程接口指南-JDBC(2. 概述)
随机推荐
WordPress 常规设置
【每日SQL打卡】DAY 24丨找到连续区间的开始和结束数字【难度中等】
【一起学Rust | 基础篇】rust函数与流程控制详解
【一起学Rust | 基础篇】Rust基础——变量和数据类型
测试环境要多少,从现实需求说起
国内首秀元宇宙Live House圆满收官,百事可乐虚拟偶像真的好会!!
公司出了一款新产品,要不要招代理商?
2022-07-29日报:AlphaFold最新重大进展:完成几乎所有已知的2亿多蛋白质结构预测,完全开放
PL/SQL 事务
【每日SQL打卡】DAY 21丨每个帖子的评论数【难度中等】
2.3插入排序
2022-07-29 Daily: The latest major progress of AlphaFold: complete almost all known protein structure predictions of more than 200 million, fully open
Pangolin库链接库问题
7月3日文: 表面上有危险,实属安全周期,大概率会快速上扬的个股
【每日SQL打卡】DAY 26丨广告效果【难度简单】
JVM内存模型如何分配的?
The company has a new product, do you want to hire an agent?
Kubernetes基本概念
【年中总结】创业3年,越来越穷,还是坚持架构平台
峰米V10、极米Rs Pro2及当贝X3 Pro究竟孰优孰劣?