×
您的位置:
数据库的并发控制教程

数据库的并发控制教程

  • 课程主讲:
  • 所属机构:
  • 所属分类:数据库
  • 课程人气:594

数据库的并发控制教程的相关介绍

      我们都知道,计算机的主要应用之一就是数据处理。作为核心技术的数据库是共享资源,允许多个用户同时使用实现并发操作, 于是就导致数据不一致性问题。因此数据库管理系统必须提供并发控制的机制,选取合适的控制方法来实现最优性能。

      并发控制是指在多用户的环境下,对数据库进行并发操作进行规范的机制。其目的是为了避免对数据的丢失修改、读脏数据与不可重复读等,从而保证数据的正确性与一致性。并发控制在多用户的模式下是十分重要的,但这一点经常被一些数据库开发人员忽视,而且因为并发控制的层次和类型非常丰富,有时使人在选择时比较迷惑,不清楚衡量并发控制层次选择的原则和途径。本文将从一个例子入手,结合数据库理论的相关知识,对数据库应用中并发控制的途径、方法做出一个较全面的总结,希望能帮助读者找到合理的并发控制方法。

      并发控制的实现途径有多种,如果DBMS支持的话,当然最好是运用其自身的并发控制能力。如果系统不能提供这样的功能,可以借助开发工具的支持,还可以考虑调整数据库应用程序,而且有的时候可以通过调整工作模式来避开这种会影响效率的并发操作。笔者对各种策略做了一个总结,主要有一下几点:

      (一)调整工作模式,修改应用程序,避免不必要的并发。这在某些情况下是可行的,例如规定录入人员只能修改自己所创造的记录,那么就不会出现并发操作中的各种错误,因为这时各个不同的用户所能更新的记录不会发生重合。这种情况下,需要在数据库表中增加用户列。在用户浏览记录时,将用户列作为一个过滤条件,对应用程序的sql语句做相应的调整。但这种策略的作用有限,因为在大量情况下,并发控制不可避免。

      (二)借助于DBMS的功能。大型关系系统都有比较好的并发控制功能。例如可以采用更新游标、显式加锁、更改事务隔离级别等等。当然在其使用方面有很多注意的技巧,如:(1)事务定义最好不要包含客户交互部分。(2)只有在数据一致性要求特别严格,但并发度要求不高的时候采用可重复读与可串行读的隔离级别。(3)在同一个事务当中,要适当根据需要来变更数据的锁定级别,但一般情况下不要用TABLOCK这样粗粒度的封锁。(4)不同事务之间可以根据并发度的需要来显式设定隔离级别。(5)在包含客户交互的操作中使用游标,并尽可能缩短交互时间。

      我们看一个informix数据库中采用更新游标的例子。定义更新游标语法:DECLARE CURSOR-name CURSOR FOR SELECT-statement FOR UPDATE[OF column-list]。更新游标在完成数据的浏览和修改时,要对当前的记录隐式加锁,注意更新游标只对可更新视图有效。为了提高并发度,经常要结合滚动游标来使用,滚动游标定义方法:DECLARE CURSORname SCROLL CURSOR[with hold] FOR SELECTstatement),不过滚动游标不对当前的记录加锁。