zoukankan      html  css  js  c++  java
  • 【笔记】数据库事物以及多线程/进程同步的含义

        以前数据库事物和多线程同步的概念柔和在一起,以为相互关联,实则没有必然联系。

        数据库事物解决的数据一致性:假设数据从一个状态迁移到一个状态,涉及到俩个对象,如果没有数据库事物,当某一对象操作完成之后数据库出错(或者操作过程中有人查看了备操作的对象),数据库将出现不一致的状态。数据库事物的执行具有原子性,即要么都执行,要么都不执行。数据库的一致性往往依赖原子性操作。

        多线程同步解决的是多个线程共享数据时的引起的资源安全问题:俩个线程同时操作一个数据,都是先读取后修改,当俩个都读取之后,然后在修改数据的时候,就会造成资源安全问题,此时需要同步来串行化访问。

    什么时候我们使用事物

    当你执行一个影响一个数据库的多行数据时,你总是需要一个事物,但这依赖于你的业务数据是否真的需要事物来保证(因为事物会有额外的性能消耗),例如银行转账这种肯定需要事物(跟钱有关的事儿都是大事),如果你的业务操作多行,其中出错也没关系,那就不需要事物。

    数据库事物保证了数据库层面的串行执行(原子性和一致性),但是在程序层面上有另外一层需要保持串行操作,即多线程并发,操作共享资源时需要协作(同步和互斥),即锁。例如,当并发执行多个类似的事物时,操作数据库同一行(程序先读后改)等等。

    并发执行数据库事物可能会导致死锁:因为当你操作相同的数据行时候,它会锁住该行来保持数据一致性,如果俩个并发线程试图以不同的顺序锁住相同的行,你会得到一个死锁错误

  • 相关阅读:
    js备忘录3
    js备忘录2
    js备忘录1
    Java-URLEncoder.encode 什么时候才是必须的
    Oracle中的SQL分页查询原理和方法详解
    servlet 和 threadlocal 与 web容器(理解threadlocal)
    技术汇总:第十二章:技术总览
    MongoDB :第五章:MongoDB 插入更新删除查询文档
    MongoDB :第六章:Java程序操作MongoDB
    MongoDB :第二章:系统归纳
  • 原文地址:https://www.cnblogs.com/pengyusong/p/5824980.html
Copyright © 2011-2022 走看看