首页 > 编程知识 正文

事物的一致性包括哪些内容,矛盾同一性的含义包括

时间:2023-05-05 15:34:49 阅读:186801 作者:1555

(PS:黄色字体是二次修正的内容)

事务一致性在《数据库系统概念》中是这样描述的。

第二段所述的三个特性是指原子性、隔离性、持续性。

尽管如此,我觉得大家也很无知。 我也是。 所以我写了这个博客。

据另一篇博客报道,一致性是事务的最终目的,原子性、隔离性、持久性都是为了实现一致性。

在这里,我打算验证一下。

怎么验证?

假设这个事务系统是由我们设计的。

首先,是这样的场景。 如果范把100美元转到热情的蛋包饭上,这个事务系统必须保证范扣了100美元,热情的蛋包饭也要加100美元。

这个怎么保证?

好的,请先记在笔记本上。 范先生加100元,热情的蛋包饭加100元。 然后,按照笔记本上写的顺序执行。 这样的话,小范和热情的蛋包饭就无从摆弄了。

OK,那么,我们现在就开发这个事务系统。 接下来是伪代码。

//事务系统abstract class transaction (void transaction ) { /* todo日志) * args:事务名称、事务操作、事务写//记录Log logs=getLog ()范小姐给热情的蛋包饭转100美元) ); //解析日志,获取操作事件eventevents=parselog(logs ); //执行操作并回写日志状态以标记事务已完成的doevent(events,logs ); }ok,系统已开发。 试着应用那个跑步吧。

但是,也许是因为计算机内存不足,系统跑了一半,闪回了。 我想知道我想知道

也就是说doEvent的时候,范小姐扣了100元。 这个时候,闪退了。 我想知道我想知道

上数据库一看,结束了。 范先生已经减去了100,但是热情的蛋包饭没有增加100,事务也没有执行。

所以,我们的事务系统有问题。 我们的办公系统必须保证小范围内扣除100。 而且,热情的蛋包饭也要加100。 我们暂且把这种状态称为一致性。 因为我们必须保证这两个操作对数据来说是一致的。

目前,我们的事务系统还没有完全实现一致性。 如果发生这种情况,发生系统闪回停止等异常情况,我们如何应对,才能保证一致性?

是的,您可以向日志中添加状态,标记该操作是否已执行,然后使用计时器每隔几秒钟在日志中查找未完成的事务,然后执行它。 这样,范先生扣100,热情的蛋挞增加100,即使中途停止也可以定时执行事务。

这样测试了10多次,结果与操作一致,确保了一致性,正式用于生产环境。

但是,不到一天,问题就发生了。 怎么了? 有一项业务。 fzdjy给要减肥的葡萄酒转账了300元,但fzdjy的账户里只有298。 该死的初级程序员没有检查fzdjy的金额,而是直接执行了。

这样,fzdjy的账户余额变成了-2,要减肥的葡萄酒账户变成了300。 开了一个荒谬的玩笑。

这主要责任不在我们开发的事务系统上,但我们也必须处理。 也就是说,fzdjy的余额被加减时为负。 此时,程序需要抛出异常,无法再执行程序。 因此,这需要我们的事务系统,执行到一半时可以回滚到初始状态。

也就是说,如果在同一事务中存在操作ABC的三个顺序操作,且操作a成功,操作b失败,则操作c还会继续执行吗? 当然不能。 在这种情况下,b失败了。 我们只能在操作前回滚a。

这样,我们这个事务系统,要么事务全部完成,要么事务全部不完成,我们姑且称之为原子性吧。

添加了原子功能后,事务系统又开始运转了。

几天后,问题又来了。 怎么了? 啊,小范有300元,fzdjy给小范转了500元。 事务还没有结束。 wmdjz又给范先生转了300元。 于是,就发生了问题。 fzdjy给小范转了500元,下班时小范应该还有800元,但wmdjz又给小范转了300元。 还是用的范有600美元,fzdjy的事务结束,把800美元写回范,接下来wmdjz的事务也结束,把600美元写回范,最终范的账上只有600美元,fzdjy的500

这样,数据完全混乱。 问题在哪里? 在fzdjy事务执行期间,读取了300个van,从而事务无法结束。 wmdjz也被读入粉丝有300人,这样就会错乱。 我们在fzdjy转账的时候,wmdjz应该要等到fzdjy转完为止。 这样就可以解决数据混乱的问题。 我们把这称为隔离性。

隔离修复结束后,项目重新开始运转,办公系统运行了很长时间

时间,也没有出现问题。

到这里,验证就结束了,上面写日志的行为其实就是事务的持久性,也可以看到,上面出现的隔离性、原子性、持久性,也都是为了彻底实现一致性而产生的。

所以,总的来说,一致性是一个比较笼统的概念,是事务的基础,一致性和原子性的区别就是,原子性强调的是操作的完整,要么都成功、要么都不成功,而一致性包含的比较多,数据的一致性啊等等。

不过其实,我觉得一致性不应该跟原子性、隔离性、持久性放在一起,因为这三个都是为了实现一致性,如果有大佬知道,麻烦跟我说下原因。

到这,本文就结束了,写的真的不是很好,以后,要是我对事务一致性、原子性有了新的理解,我会再回来修改的,也欢迎各位大佬留言或者私聊我,给我写关于一致性的启发。

知乎上有个回答也是写的蛮好的,大家可以看看,https://www.zhihu.com/question/30272728

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。