数据库并发控制机制

2016-02-19 19:05 1 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的数据库并发控制机制懂设计的网友们快点来了解吧!

【 tulaoshi.com - 编程语言 】

问题背景及特点:

我们在使用多用户数据库时常常会碰到数据更新失败、删除失等情况,如果有多个用户且同时访问一个数据库则当他们的事务同时使用相同的数据时可能会发生并发问题。

并发问题包括:

1.丢失或覆盖更新。(幻像读)

2.未确认的相关性(脏读)。

3.不一致的分析(非重复读)。

详细描述:

1.丢失更新

当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

例如,两个编辑人员制作了同一文档的电子复本。每个编辑人员独立地更改其复本,然后保存更改后的复本,这样就覆盖了原始文档。最后保存其更改复本的编辑人员覆盖了第一个编辑人员所做的更改。如果在第一个编辑人员完成之后第二个编辑人员才能进行更改,则可以避免该问题。

2.未确认的相关性(脏读)
当第二个事务选择其它事务正在更新的行时,会发生未确认的相关性问题。第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改。

例如,一个编辑人员正在更改电子文档。在更改过程中,另一个编辑人员复制了该文档(该复本包含到目前为止所做的全部更改)并将其分发给预期的用户。此后,第一个编辑人员认为目前所做的更改是错误的,于是删除了所做的编辑并保存了文档。分发给用户的文档包含不再存在的编辑内容,并且这些编辑内容应认为从未存在过。如果在第一个编辑人员确定最终更改前任何人都不能读取更改的文档,则可以避免该问题。

3.不一致的分析(非重复读)
当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。

例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。

4.幻像读
当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻像读问题。事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其它事务删除。同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中。

例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。

从上面可以看到,解决并发主要是用到了锁和事务。
锁  :给记录或表加上锁是为了对当前操作对象加上一个状态表示位,
         让其它用户在获取编辑权限时有了判断。
事务:是为了保证一组操作的完整性。(要么就全部成功,要么就全部失败)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

一般处理并发问题时我这样做:
1.开启事务。
2.申请写权限,也就是给对象(表或记录)加锁。
3.如果失败,则结束事务,过一会重试。
4.如果成功,也就是给对象加锁成功,防止其它用户再用同样的方式打开。
5.进行编辑操作。
6.写入所进行的编辑结果。
7.如果写入成功,则提交事务,完成操作。
8.如果写入失败,则回滚事务,取消提交。
9.(7.8)两步操作已释放了锁定的对象,恢复到操作前的状态。

来源:http://www.tulaoshi.com/n/20160219/1619990.html

延伸阅读
标签: ASP
<% ' BEGIN USER CONSTANTS ' To just use a DSN, the format is shown on the next line: 'Const DSN_NAME = "DSN=ASP101email" ' Two other samples I used it with.  Left in as syntax examples for DSN-less connections 'Const DSN_NAME = "DBQ=C:\InetPub\wwwroot\asp101\samples\database.mdb;Driver={Microsoft Acces...
摘要: 随着应用领域的不断拓展和多媒体技术,人们发现关系数据库的许多限制和不足,因而数据库技术进入了"后关系数据库时代"。文档数据库由此应运而生。本文概要地从数据格式、数据库结构和WEB发布数据三个方面比较了文档数据库与关系数据库的异同,同时区别了文档数据库与过去存储数据的文件系统的不同。 关键词:数据库Internet文档数据库...
从前面的介绍可以看出,可以为各种类型的数据库管理系统编写VisualBasic前端。事实上,使用ODBC驱 动程序,可以建立与几乎任何数据库管理系统连接的应用程序。这一节中,将介绍可以与VisualBasic数据库应用程序一起使用的几种数据库管理系统。 普通的关系数据库管理系统 普通的关系数据库管理系统(RDBMS)一般是指传统的桌面RDB...
标签: 网络
恢复数据     如何恢复数据库?网站管理员在重装服务器系统或者迁移完服务器后需要恢复数据库,下面给大家介绍的是批量恢复MySQL数据库方法,该方法适用于迁移服务器后批量恢复数据库,以及本机重做系统后批量恢复数据库。 批量恢复 1、备份MySQL 先停止MySQL,再把MySQL的data目录完全备份(复制Data目录到其他地方)。 2、恢复数据...
结论:在数据库中研究和实现算法有着相当大的困难,同时也是一种挑战。随着现实世界中业务规则的日益复杂,相应的数据库应用软件实现业务规则需要的算法也日益复杂,把复杂的算法应用在数据库中需要找到一个统一的方式,在熟悉业务规则的前提下,根据数据库的特点和相应的执行命令的能力,找到一种适合数据库批量计算的步骤是解决问题的关...

经验教程

94

收藏

8
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部