数据模型是否需要version字段

数据模型是否需要version字段

最近在设计数据库模型的时候,总会碰到要不要加version字段的问题。并且我们通常都会把version字段备注成乐观锁,但这其实是不准确的。接下来我们来看一下具体的分析。

我们都明白锁是为了解决并发带来的问题。但是不知道有没有仔细想过,为什么并发就会出现问题?

结合我们之前读过的文章,很容易回答出因为存在共享数据,对共享数据的读写如果不加锁就会混乱。但是存在共享数据,就一定会出现问题吗?

我觉得出现问题的本质原因是存在一个或者多个共享数据的非原子操作,必要条件是存在读和写操作,读的数据影响写操作的结果。

从加锁与否,可以将锁简单地分成以下两类:

悲观锁,很直接的干掉了并发,问题就不存在。

乐观锁,是以写数据时候带上读数据的版本,保证并发操作只有一个成功。在等于版本号时候可以操作成功,其他情况失败。

但在实际使用version时,我们也会在对小于大于的情况做处理,更强调的是操作顺序,操作靠后的数据可以覆盖结果。那这种情况是乐观锁吗? 严格来说并不算,因为没有根据读的结果做计算。

回答开篇,使用version字段的场景:

  1. 需要乐观锁,不能一条语句中完成读写。(数据库会在语句级别完成原子操作,应用程序无感知)

  2. 不需要乐观锁,对覆盖操作排序即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值