tiflash 属于实时的写入,还是异步写入
哪几个技术点保证,tiflash的同步不阻塞tikv的写入?
异步写入,先写tikv,再写tiflash。
但是可以一致性读取,如果从tiflash读取的数据不是最新的,会等着同步完成再返回结果。
tiflash的在同步的时候,对其他tikv来说就是一个learner角色的tikv。不参与raft组的投票,不会被tikv选中为leader,但会同步raft日志,照着raft日志做一遍,数据也有了。
https://docs.pingcap.com/zh/tidb/stable/tiflash-overview
TiFlash 以低消耗不阻塞 TiKV 写入的方式,实时复制 TiKV 集群中的数据,并同时提供与 TiKV 一样的一致性读取,且可以保证读取到最新的数据。TiFlash 中的 Region 副本与 TiKV 中完全对应,且会跟随 TiKV 中的 Leader 副本同时进行分裂与合并 这里说是实时复制呢?这个实时和问题的实时不是一个概念?
我是这样理解的:
你问的是实时写入
,这个只有raft组里面的leader可以做到的。因为tiflash不能做leader,肯定不会是第一时间写入的。
但后面这段文字也没大问题,因为他写的是实时复制
。作为learner角色,可以实时复制数据也是没错的。
所以我理解,问题不在两个实时,在于写入和复制。
可以做到一致性读取,tikv的已经算是最新的mvcc版本了,也就限制了tiflash也必须要达到tikv这个版本,才会返回。如果tiflash的写入同步是异步的,就肯定存在延迟,select就会等待嘛?
select会等待
感谢!
是实时写入
不光kitv的多数派写成功,还需要tiflash返回至少一个写成功,这种应该叫实时吧。
tiflash是这种运行模式吗?
异步的
文档写的是异步
应该是异步,先写kv,楼上大佬说的很清楚,又学习了
tiflash在kv里面叫learner 不参与投票。几乎是实时的。你自己可以测试一下
insert a (id) values(1);
select /*+ read_from_storage(tiflash[a]) */ id from a;
你只需执行这个sql看是不是实时的。
自己测试一下
en 好的 保证你可以看到插入的1
Tiflash通过 Raft Learner 协议进行数据的异步复制,确保了数据的强一致性,同时保持了与 TiKV 的隔离性。这种异步复制的方式允许在 TiFlash 节点宕机或网络延迟的情况下,TiKV 业务依然能够继续运行,因为learner不参与投票选举,单纯同步raft日志;TiFlash 的核心特性之一是异步复制,它通过 Raft Learner 协议以异步方式复制数据,这有助于在 TiFlash 节点宕机或网络延迟的情况下,确保 TiKV 业务能够继续运行。
收到
leaner角色,那就肯定是异步了