【TiDB理论知识09】TiFlash

一 TiFlash架构

二 TiFlash 核心特性

TiFlash 主要有

  1. 异步复制、
  2. 一致性、
  3. 智能选择、
  4. 计算加速

等几个核心特性。

1 异步复制

TiFlash 中的副本以特殊角色 (Raft Learner) 进行异步的数据复制,这表示当 TiFlash 节点宕机或者网络高延迟等状况发生时,TiKV 的业务仍然能确保正常进行。

只从leader中接受raft log ,不参与 投票 选举 等。

基于主键快速更新 ,和TiKV 不会有过大的延迟 。

2 一致性读取

图解 :

T0 时刻 客户端写入两条数据 分别为 key = 1 value = 100 ,key = 999 value =7,这两条数据分别存在两个TiKV的Region 上,写入数据会有Raft log,这两条数据写入日志的序列号分别为 101 和 22 。TiFlash的region通过 Raft Log 同步数据,此刻 同步到TiFlash的Raft Log日志索引号分别为95 和 18的日志。即数据还没有同步到TiFlash.

在T1 时刻客户端请求TiFlash 读取数据,T1时刻 ,TIKV的region数据已经写到日志序列号分别为 120 和 29的数据了 。TiFlash的数据刚到 106 和 20 。此刻TiFlash读取不到最新的数据

T2时刻 又有客户端向TiKV 写入数据,将key=1的数据 value cong 100改为了 200。写到了日志索引号分别为 122 和 30的日志了。那么问题来了 TiFlash 如何 确认我能读取到此刻TiKV 写入的最新数据同步到了TiFlash 呢 ?

解决 :会做个轻量级的确认 ,T3时刻 TiKV 的数据 已经写到了 125和 31 ,TiFlash 写到了 116 和 21 。 那么TiFlash 会等待日志序列号分别为125和 31日志复制过来。

T4时刻 日志还没完全复制过来。

T5 时刻日志已经复制过来 ,但是查询请求是T1时刻发出,只能看到T1时刻之前的数据,所以读到的key=1的值为100;

智能选择

TiDB 可以自动选择使用 TiFlash 列存或者 TiKV 行存,甚至在同一查询内混合使用提供最佳查询速度。这个选择机制与 TiDB 选取不同索引提供查询类似:根据统计信息判断读取代价并作出合理选择。

计算加速

TiFlash 对 TiDB 的计算加速分为两部分:列存本身的读取效率提升以及为 TiDB 分担计算。其中分担计算的原理和 TiKV 的协处理器一致:TiDB 会将可以由存储层分担的计算下推。

参考

TiFlash 简介 | PingCAP 文档中心

相关推荐
TiDB 社区干货传送门2 小时前
从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
数据库·oracle·中间件·tidb·数据库架构
TiDB 社区干货传送门13 小时前
从40秒到11毫秒:TiDB环境下一次SQL深潜优化实战
数据库·sql·tidb
赵渝强老师7 天前
【赵渝强老师】TiDB SQL层的工作机制
数据库·sql·tidb
观测云14 天前
TiDB 可观测性最佳实践
tidb
赵渝强老师17 天前
【赵渝强老师】使用TiDB的审计日志
数据库·tidb
可观测性用观测云19 天前
TiDB 可观测性最佳实践
tidb
Sirius Wu19 天前
TiDB 深度解析与 K8S 实战指南
容器·kubernetes·tidb
PingCAP20 天前
PingCAP“一号员工”唐刘:回顾我与 TiDB 的十年成长之旅
数据库·tidb
转转技术团队22 天前
告别人工搬运!TiDB/MySQL双库同步工具如何为业务提效100%?
mysql·tidb·测试
MiniFlyZt1 个月前
分布式数据库TiDB:架构、核心特性与生产实践(分库分表)
java·数据库·分布式·spring cloud·微服务·tidb