你可能有这样一个疑问:
A 事务,update了一条,但是还没有commit,但是update后,在A事务中查询到的值是 update以后的值。
这时候,读取的数据肯定在内存里,所以为什么其他tidb节点读不到这个内存的内容?
因为:
A事务的prewrite请求涉及的key,是缓存在TIDB节点的。A事务的所有后续查询肯定持续的在同一个TIDB节点上。所以能直接读取内存获取到。
但是如果换成了B事务,调度到了另一个TIDB节点,那A事务数据缓存的这块内存在B事务的tidb节点是读不到的。
不理解这种解释,你说的这种现象。或者mvcc导致的。
mvcc是A事务开始,B事务开始,A事务提交,B事务看不到变化。
我说的是 A事务开始,但是一直不提交,A事务还能看到自己的修改。这块内容是缓存在tidb客户端的。
没理解, transaction 是kv的组件。事务还没提交,外部组件的话 能感知到吗?有必要感知到吗?acid怎么保证?
1阶段提交的时候。修改没有缓存到tikv的内存中么?
事务是kv提供的,但是需要tikv-client配合。tikv-client是协调者。事务提交到tikv之前,都是tikv-client缓存的。
对于一个事务来说,自己修改的当然要自己能看到啊。其他tidb节点看不到很正常啊。
1阶段就直接提交了,也就是直接写入了tikv,还缓存个啥。