请问同步列存数据为什么这么快

按照官方操作文档进行按照操作,进行数据测试,地址 :
https://docs.pingcap.com/zh/tidb/stable/quick-start-with-htap

最后 第 4 步:同步列存数据 有一些疑问
1.为什么TiFlash 部署完成后并不会自动同步 TiKV 数据呢,而必须是手动指定表开启
2.几百万数据,为什么同步到列存这么快呢,执行完ALTER TABLE test.customer SET TIFLASH REPLICA 1;几乎 很快就同步了,从行存到列存数据同步这么快吗

1、原因是并不是所有表都有AP需求,全部表都列存浪费空间,TiDB定位是HTAP数据库。
2、information_schema.tiflash_replica中PROGRESS到1才算同步列存完成,不是alter table语句返回哦

1 个赞

感谢您的解答,但我测试就是文档中的这个600万数据的例子,其中 lineitem表就是600万数据,我ALTER TABLE 后,然后执行 SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = ‘test’ and TABLE_NAME = ‘lineitem’;查看 PROGRESS,估计也就5秒作用就到1了,这同步的也很快呀,我向表插入600万数据用了快半个小时,它从行存同步数据到列存就5秒,这么快吗?能简单说下原因吗

你可以ananlyze下表,再查information_schema看下表多大,或者看下该表的region多大,600万数据应该不需要半个小时吧,构建测试数据太慢了,你可以通过慢SQL分析下,构建tiflash副本是扫tikv的region通过snapshot发送给tiflash的,600w数据感觉不大。

因为TiFlash只需要读取raft log的idx值就可以同步,而表同步到TiKV需要通过TiDBserver、PD、TiKV等的调度和平衡节点,并且需要保留多版本

谢谢。 全部表都列存浪费空间,这个空间大小怎么看呢,怎么看列存和行存各占用多少空间呢

谢谢。 TiFlash只需要读取raft log的idx值就可以同步 请问这个同步过程得出处在哪,有文档吗,想具体了解下

几百万数据看似很大,其实也没几兆

1 个赞

对呀,但是用 ```
tiup bench tpch --sf=1 prepare 文档上这个生成数据命令 600万数据将近半个小时

还真没法看,因为底层是sst文件,没法确认是那个表的,tikv_region_status里也是应该也是估算的数据大小,并且还有压缩

数据库底层复制数据远比执行sql快得多

tiflash使用了DeltaTree。

专门优化了高频率数据写入的问题。有兴趣可以看看源码阅读系列。如果文章看的累,b站也有专门的源码解读视频。

:yum:我理解的是行存1000条相同记录,要存一千条,列存1000条相同记录,只需要存一条。这么来看肯定是又快占用空间又少。

1 个赞

我感觉主要是需要查询的东西和关联的东西少,只需要一个IDX,哈哈 :joy:

TiFlash只需要读取raft log的idx值就可以同步

来学习

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。