Transaction弱隔离之更新的丢失
我们在前文《Transaction弱隔离之读提交的介绍和实现》和《Snapshot的隔离和Repeatable的读》中介绍了read commit和snapshot隔离。这两篇文章其实更多地讨论的是当有写发生的时候如何进行读,除了脏写之外没有更多地讨论如何处理两个写同时发生的情况。其实当有两个写同时发生的时候还会有很多问题需要处理,其中最常见的就是两个写有冲突,这个时候就会发生更新丢失的问题。 我们举个例子,比如一个transaction先从数据库读一个数据,然后修改这个值,再把它写回数据库(读-修改-写的模式)。当有两个transaction同时发生这件事的时候,其中一个transaction的写就会丢失。这种pattern其实在现实中很常见的: 比如说你需要增加一个计数器或者更新账户的余额,需要先读出原来的值,计算出新的值,然后更新。 更新一个复杂值的一个部分,比如说你在JSON文档里面加一个元素,需要首先解析这个文档,做修改,然后写回去。...
Recent Comments