详谈一下乐观锁是不是多余的:
ruby on rails 框架在2007/2008年时最火。 http://t.cn/A6XyriEk 我不知道是不是因为当时很多数据库还不支持 select for update 语句,所以它凭空搞了个乐观锁出来解决应用层先 find 后 update 导致同时进行的两个应用其中一个的 update 丢失更新内容的问题。
如果当时数据库普遍支持 select for update 语句了,在 find 方法里提供一个 boolean 类型的 forUpdate 参数,然后构建出一条 select for update 语句就够了,用不着在应用的表中建个 lock version 字段,还搞出一个搞笑的名词叫乐观锁,然后在框架内部还模拟数据库多版本并发控制的算法去实现这个乐观锁。万一用 ruby on rails 框架的应用像 tomcat 那样搞了个集群,两个应用跑在不同进程里,ruby on rails 框架如何保证乐观锁正确实现呢?
所以我的结论就是 乐观锁 不但给技术圈造成了混乱,是没必要的,甚至还在框架层面实现是很难保证正确性的,搞到最后只不过又是在重复数据库做过的事,还没别人专业。
发布于 广西
