【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 文档中心

相关推荐
DomDanrtsey7 小时前
oracle与tidb时间格式化函数不兼容简述
数据库·oracle·tidb
野生技术架构师4 天前
制造业数据库选型实战:为什么我们从 MySQL 迁移到 TiDB
数据库·mysql·tidb
云原生指北10 天前
深入 GitHub Copilot SDK:架构设计与进阶应用
tidb
Hui Baby11 天前
TIDB分布式数据库提交设想
数据库·分布式·tidb
DomDanrtsey12 天前
国产数据库TiDB使用dumpling卸数与tidb-lightning导娄
数据库·tidb
隔壁小邓20 天前
TIDB分布式数据库
数据库·分布式·tidb
沙漏无语20 天前
(一)TiDB简介
java·开发语言·tidb
沙漏无语21 天前
(二)TIDB搭建正式集群
linux·数据库·tidb
姚不倒21 天前
三节点 TiDB 集群部署与负载均衡搭建实战
运维·数据库·分布式·负载均衡·tidb