NoSQL 一致性问题(二 更新一致性)

背景:

两人可以更新同一条数据,如站长与副站长都要更改站点联系电话,最终后更改的把之前更改的数据覆盖。

 

如何保证数据一致性?How

1 悲观方式:避免发生冲突,

采用写入锁,锁系统保证同一时刻只有同一用户执行写操作。

2 乐观方式:先让冲突发生,检测冲突并对发生冲突的操作排序。

采用条件更新,任意用户执行更新操作之前都要测试数据的当前值与上次读入的值是否相同。

 

悲观锁分析:

非对等复制环境中,锁master节点对应数据即可。

对等复制环境中,需要锁所有节点对应数据,死锁风险增大。

乐观锁分析:

非对等复制环境,版本号比较更新即可

对等复制环境,前n个节点比较更新成功,第n+1个节点失败,前n个需要回滚,复杂性高,数据一致性难以维护

 

乐观所实现:多版本控制,如MySQL每个事物对应一个版本,可重复读的实现就是读历史版本而非最新版本解决

 

选择乐观锁 还是 悲观所?

1 数据安全性

2 响应能力

3 死锁

悲观方式 能解决1 但2差 大概率导致3

 

分布式模型选择:

不同节点有同一数据的拷贝,各个节点可能会以各自独立的顺序更新该数据,导致该数据在节点间不一致。

解决:针对某份数据的所有写操作都交给一个节点完成,其他节点对该份数据处理顺序依赖于主节点处理顺序。

除了对等复制外,其余模型都实现了上述解决方案。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值