作者回复: 说得很好,基本都正确,点赞。我在第12讲介绍了Spanner的完整处理过程,可以参考。
作者回复: Raft通常用来做数据一致性,也就是多副本的一致性,而事务一致性,包括分布式事务,还是用2PC的各种优化。
作者回复: 多个会话要同时修改一个数据项,就必须有一套规则来协同,这就是并发控制机制。锁只是其中一种技术,基于锁也有多种处理方式,我们的专栏中展开介绍了这个问题。最后,这是所有数据库都要处理的问题,并不限于TiDB。
作者回复: 这个词也不是很严格,算习惯用法吧,理解意思就好,就是表示不修改原有数据而做追加。比如,hbase中的数据修改也是这样。
作者回复: 是的,这就破坏了全局事务的隔离性。
作者回复: 这里的写操作往往是指一个完整的写操作事务,不是事务中某个单独的update或insert语句。事实上,要满足事务ACID也不可能让每个写操作都执行独立的commit,我将这一点作为大家默认的前提了,看来还是要再说明一下。TiDB的2PC处理过程确实是在整个事务执行到commit语句时才会做实质操作,这点没问题。