TiFlash的行转列是如何实现的

【 TiDB 使用环境】生产环境 or 测试环境 or POC
【 TiDB 版本】
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】 相关日志及监控(https://metricstool.pingcap.com/)


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

元数据的定义不一样,看下图:

tikv 实时写入的数据,通过raft 协议也会通知给 tiflash 的节点(假定已经设定好了需要同步的表信息),tiflash会根据设定的元数据,参照 raft 传递过来的,进行处理

具体参考:
https://docs.pingcap.com/zh/tidb/stable/tiflash-overview

代码是开源的,有兴趣可以自行研究

1 个赞

好的,谢谢

TiFlash 是在 Raft 同步的时候执行行转列操作的。

Raft 同步过来分别有两类数据:

a. 数据快照(Snapshot),包含一整个 Region 大小的数据,主要来自于新增 TiFlash 副本,或使用 Lightning 等数据导入 SST

对于数据快照过来的数据(如 96MB SST Snapshot),TiFlash 会批量进行行转列,生成 DTFile 文件,然后执行特殊的 Ingest Snapshot 流程。

b. 增量 KV 数据,主要来自于写入操作。

对于增量 KV 数据,TiFlash 在内存中将其重新组织为以 Block 为单位的内存数据,然后执行标准的写入流程。

正常情况下,应该是增量 KV 数据吧,毕竟对大量快照数据进行行转列应该消耗资源比较大。

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。