wurui

Results 2 comments of wurui

> @DurantVivado > “我们可以想象下两台机器上,两个应用程序之间需要通信,那么首先,需要确定采用的传输协议是什么?如果这个两个应用程序位于不同的机器,那么一般会选择 TCP 协议或者 HTTP 协议;”这句话不太严谨,HTTP是应用层协议,一般也会采用TCP(传输层协议)+IP(网络层协议)。我猜大佬想说的是,“一般会选择TCP或者UDP协议”。欢迎批评指正! tcp协议比http低一层。应该一种是说直接用tcp,自定义应用层协议格式(游戏服务端会这么干);或者直接用http作为应用层协议

查到一点资料供参考。之前有人反馈过这个 https://bugs.mysql.com/bug.php?id=63870,不过mysql的人表示就是这么设计的,这里有记录https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html。 从文档里可以看到他们认为连续的快照读或者连续的当前读出现数据不一致才符合幻读的定义,而这里出现问题的是先快照读然后当前读,所以他们是这么说的:To prevent phantoms, InnoDB uses an algorithm called next-key locking that combines index-row locking with gap locking。 对于连续的快照读,mvcc会保证其他事务的修改在当前事务不可见;对于连续的当前读,第一个当前读会加间隙锁,别的事务要修改直接就阻塞了。在一个事务里先快照读再当前读,由于第一个快照读mvcc没有加锁,其他事务可以修改并提交,后面的当前读在设计上就可以读到已提交的事务,update之后状态变成了自己的修改,mvcc里自己的修改是可见的,这条记录就完全可见了。 总的来说这是一个他们设计好的feature。https://developer.aliyun.com/article/698749 这里也有一点解释这么设计的原因。