数据库隔离级别详解

数据库的隔离性是数据库ACID保证中的重要组成部分。应当区分开原子性与隔离性的不同含义,为了实现原子性有悲观/乐观的两种并发控制策略,在原子性的基础上,实现隔离性,既可以使用悲观的并发控制策略,也可以使用乐观的并发控制策略。

不同的应用场景会对数据库隔离性有不同的要求,越高的隔离性可以越高程度的保证数据的一致性,但是会带来越多的性能开销。反之,降低隔离性要求将会牺牲一些数据一致性,但是可以提供数据库的性能。选择数据库的一致性应当从应用的逻辑要求出发,选择满足数据逻辑要求的最低隔离级别。

本文以数据库技术中的Read Phenomenon(读取现象)为线索,详细解释了ANSI SQL标准中定义的隔离级别。


[color=blue][size=xx-large]1. Dirty Read(脏读)现象[/size][/color]
所谓脏读,是指两个并发的事务,其中一个读到了另一个还未提交的数据。如下图所示,如果Transaction1读到了Transaction2还未提交的数据,就称作脏读。
[img]http://dl.iteye.com/upload/picture/pic/131937/21854dfb-bd02-32ac-9077-ee2c0c522718.png[/img]
会发生脏读的数据库所处的隔离级别,被称作[b]Read Uncommitted[/b]。如果应用场景有需求,需要避免脏读,则需要提高隔离级别。消除脏读的策略是显然的,即:未提交的事务所做的数据修改应当写到Buffer中,而不应当让别的事务可见。消除了咱幅度现象后数据库所处的隔离级别就升级到了[b]Read Committed[/b]。


[color=blue][size=xx-large]2.无法重复读(Non-repeatable reads)现象[/size][/color]
所谓无法重复读,是指在一个事务执行的过程中,进行了两次同一数据的读取操作,但是执行的结果却不同。如下图所示,Tansaction1在执行过程中,进行了两次相同的读,但是由于Transaction2修改了数据,Transaction1进行的两次读的结果将会是不同的。
[img]http://dl.iteye.com/upload/picture/pic/131939/0fbffda1-4d8e-3b0c-a7fa-dcba52c0476a.png[/img]
会发生无法重复读现象的数据库所处的隔离级别,被称作Read Committed。如果应用场景有需求,需要避免无法重复读,则需要提高隔离级别。消除无法重复读的常见策略有两种:
[list]
[*][b]1,SerializeTrans:[/b]推迟Tran2的执行,直到Tran1提交或回滚
[*][b]2,multiversion concurrency control:[/b]允许Tran2提交,Tran1则Buffer第一次操作后得到的数据Snapshot中继续操作
[/list]
如果使用了上述策略1,则数据库的隔离级别就升级到了最高隔离级别[b]Serializable[/b]。如果使用了上述策略2,则无法重复读现象可以消除,单数数据库还是会存在幻影读现象,此时数据库所处的隔离级别被称作[b]Repeatable Read[/b]。


[color=blue][size=xx-large]3.幻影读(Phantom reads)现象[/size][/color]
所谓幻影读,是指在一个事务执行的过程中,进行了两次相同的SELECT操作,但是返回的结果集合却不同。如下图所示,Tran1的两次SELECT操作的返回行集不同。
[img]http://dl.iteye.com/upload/picture/pic/131941/49b621db-f75c-3674-ae3f-39c2d44db581.png[/img]
为了避免幻影读现象,需要对所谓Range Operation进行加锁。在上图的例子中,即对范围[Age:10 ~ 30]进行加锁,任何对这个范围内的行操作都需要等待。消除了幻影读,数据库就升级到最高隔离级别[b]Serializable[/b]。


[color=blue][size=xx-large]4.总结[/size][/color]
如下图所示:
[img]http://dl.iteye.com/upload/picture/pic/131943/23363c6a-38d8-391b-b9c4-cfca0b73fd0c.png[/img]
机械手搬运控制系统中的应用摘要:机械手是在机械化、自动化生产过程中发展起来的一种新型装置。它可在空间抓、放、搬运物体等,动作灵活多样,广泛应用在工业生产和其他领域内。应用PLC控制机械手能实现各种规定的工序动作,不仅可以提高产品的质量与产量,而且对保障人身安全,改善劳动环境,减轻劳动强度,提高劳动生产率,节约原材料消耗以及降低生产成本,有着十分重要的意义。本文以日本三菱FX2N-48MR型的PLC为基础,介绍PLC机械手搬运控制中的应用,并给出了详细的PLC程序设计过程。该程序已在工业机械手中获得了广泛应用,具有稳定、可靠的性能。关键词:PLC·机械手,控制。应用1机械结构和控制要求如图1所示是一个将工件由A处传送到B处的机械手示意图,机械手的上升,下降和左移,右移的执行用双线圈二位电磁阀推动气缸完成。其中上升与下降对应电磁阀的线圈分别为YVl与w2,左行、右行对应电磁阀的线圈分别为YV3与YV4。当某个电磁阀线圈通电,就一直保持现有的机械动作,直到相对的另一线圈通电为止。气动机械手的夹紧,松开的动作由只有一个线圈的两位电磁阀驱动的气缸完成,线圈(YVS)断电夹住工件,线圈(YV5)通电,松开工件,以防止停电时的工件跌落。机械手的工作臂都设有上、下限位和左、右限位的位置开关SQl、SQ2和sQ3、SQ4,夹持装置不带限位开关,它是通过一定的延时来表示其夹持动作的完成。机械手在最上面、最左边且除松开的电磁线圈(YV5)通电外其它线圈全部断电的状态为机械手的原位。机械手的操作面板分布情况如图2所示,机械手具有手动、单步,单周期、连续和回原位五种工作方式,用开关SA进行选择。手动工作方式时,用各操作按钮(SB5、SB6,SB7、SB8、SB9、SBIO、SBll)来点动执行相应的各动作l单步工作方式时,每按一次起动按钮(SB3),向前执行一步动作,单周期工作方式时,机械手在原位,按下起动按钮SB3,自动地执行一个工作周期的动作,最后返回原位(如果在动作过程中按下停止按钮SB4,机械手停在该工序上,再按下起动按钮SB3,则又从该工序继续工作,最后停在原位)j连续工作方式时,机械手在原位,按下起动按钮(SB3)机械手就连续重复进行工作(如果按下停止按钮SB4,机械手运行到原位后停止);返回原位工作方式时,按下。回原位”按钮SBll,机械手自动回到原位状态。2 LC的I/o分配如图3所示为PLC的I/O接线图,选用FX2N·48MR的PLC,系统共有18个输入设备和5个输出设备分别占用PLC的18个输入点和5个输出点。为了保证在紧急情况下(包括PLC发生故障时),能可靠地切断PLC的负载电源,设置了交流接触器KM。在PLC开始运行时按下“电源”按钮SBl,使KM线圈得电并自锁,KM的主触点接通,给输出设备提供电源;出现紧急情况时,按下“急停”按钮SB2,KM触点断开电源。 PLC程序设计3.1程序的总体结构如图4所示为机械手系统的PLC梯形图程序的总体结构,将程序分为公用程序、自动程序、手动程序和回原位程序四个部分,其中自动程序包括单步、单周期和连续工作的程序,这是因为它们的工作都是按照同样的顺序进行,所以将它们合在一起编程更加简单。梯形图中使用跳转指令使得自动程序、手动程序和回原位程序不会同时执行。假设选择。手动”方式,则X0为ON、X1为OFF,此时PLC执行完公用程序后,将跳过动程序到P0处,由于X0常闭触点为断开,故执行“手动程序”,执行到P1处,由于X1常闭触点为闭合,所以又跳过回原位程序到P2处l假设选择分“回原位”方式,则X0为OFF、X1为ON,跳过自动程序和手动程序执行回原位程序,假设选择“单步”或“单周期”或“连续”方式,则X0、X1均为OFF,此时执行完自动程序后,跳过手动程序和回原位程序。3.2各部分程序的设计(1)公用程序公用程序如图5所示,左限位开关X12、上限位开关X10的常开触点和表示机械手松开的Y4的常开触点的串联电路接通时,辅助继电器M0变为ON,表示机械手在原位。公用程序用于自动程序和手动程序相互切换的处理,当系统处于手动工作方式时,必须将除初始步以外的各步对应的辅助继电器(M1I-M18)复位,同时将表示连续工作状态的M1复位,否则当系统从自动工作方式切换到手动工作方式,然后又返回自动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值