关于数据库并发的一些

来源:互联网 发布:虚拟资源交易平台源码 编辑:程序博客网 时间:2024/05/23 11:30
在多用户环境中,有两种用于更新数据库中数据的模型:开放式并发和

保守式并发。设计 DataSet 对象的目的是为了促进将开放式并发用于长时间

运行的活动,例如对数据进行远程处理以及与数据进行交互时。
保守式并发涉及到锁定数据源中的行,以防止其他用户因修改数据而影

响当前用户。在保守式模型中,当用户执行会应用锁的操作时,其他用户将

无法执行可能与锁发生冲突的操作,直到锁所有者释放锁为止。此模型主要

用于以下环境:对数据存在激烈争用,使得用锁保护数据的成本少于在发生

并发冲突时回滚事务的成本。
因此,在保守式并发模型中,更新行的用户建立锁。在该用户完成更新

并释放锁之前,其他任何用户都无法更改锁定行。因此,如果锁定时间将会

比较短(例如在以编程方式处理记录时),最好实现保守式并发。如果用户

与数据进行交互,会使记录锁定相对长的时间,保守式并发并不是可伸缩的

选项。
对比之下,使用开放式并发的用户在读取行时不会锁定该行。当用户要

更新某行时,应用程序必须确定自读取该行以来,其他用户是否更改了该行

。开放式并发通常用于对数据争用较少的环境。由于不需要锁定任何记录,

开放式并发将会提高性能,因为锁定记录需要更多的服务器资源。另外,为

了维护记录锁,需要与数据库服务器保持持久连接。由于在开放式并发模型

中并不会这样,所以与服务器的连接可以在较少的时间内为更多的客户端提

供服务。
在开放式并发模型中,如果当某用户接收到来自数据库的值后,另一用

户在该用户试图修改该值之前即将其修改,则认为发生了冲突。
一、更新丢失。
当两个或更多个事务选择同一行,然后根据原来选择的值更新行时,就会出

现更新丢失的问题。最后一次更新会覆盖其他事务所做的更新,从而导致数

据丢失。
二、 不一致分析(不可重复读)。
当另一个事务多次访问同一行且每次读取不同数据时,就会出现不可重复读

问题。这涉及到多次读取同一行的问题。每次进行读取时,信息已被其他事

务更改。
三、幻读。
当对属于某事务正在读取的行范围内的行执行插入或删除操作时,就会出现

幻读的问题。由于其他事务的删除操作,使事务第一次读取行范围时存在的

行在后续读取时已不存在。与此类似,由于其他事务的插入操作,后续读取

时会显示原来读取时并不存在的行。

在数据库方案中,有两种并发控制机制:
乐观并发控制
乐观并发控制假定多个用户之间不可能有资源冲突,因此它允许事务在执行

时不锁定任何资源。只有当事务试图更改数据时,才会对资源进行检查。此

时将确定是否存在冲突(例如通过检查版本号)。如果出现冲突,应用程序

必须读取数据并再次尝试进行更改。乐观并发控制未与产品一起提供,但您

可以通过跟踪数据库访问,以手动方式将其编入应用程序中。
悲观并发控制
悲观并发控制将在事务过程中根据需要锁定资源。SQL Server Compact

Edition 支持在事务过程中根据需要锁定资源的悲观并发控制。
原创粉丝点击