DBMS 中的并发控制

  • Post category:database

DBMS 中的并发控制是指多个用户或应用程序同时访问数据库时,如何协调和控制它们的访问,以确保数据的一致性和完整性。以下是并发控制的详细攻略:

1. 事务(Transaction)

每个并发控制过程的主题是交易。当两个或更多的进程试图同时读取或更新相同的记录时,数据不一致的情况就会发生,例如,两个进程同步删除一个记录时,可能会导致表数据中的重复记录。为了避免这种情况,使用事务技术来控制对表的访问。事务是数据库操作的最小单元,具有以下四个属性:

  • 原子性(Atomicity):事务内的所有操作要么全部成功,要么全部失败,不会只有一部分执行成功而另一部分失败。
  • 一致性(Consistency):事务执行后,数据库状态必须是合法的。这意味着在事务过程中出现的任何异常都必须成为回滚事务的信号。
  • 隔离性(Isolation):每个事务必须在其他事务之前执行完毕,即一个事务的结果不应影响其他事务的结果。
  • 持久性(Durability):事务的结果必须保证在任何故障情况下都不会被丢失,即事务提交后,其结果必须得到持久化。

2. 并发控制技术

为了解决并发访问数据库时可能发生的冲突,需要使用一些并发控制技术。以下是一些常见的并发控制技术:

2.1 锁(Lock)

锁是最常用的并发控制技术。用于控制对数据的访问,保证在任何时候只有一个事务能够访问一个数据项。当一个事务需要对一个数据项进行修改时,需要获取一个写锁;当它需要查看数据项时,需要获取一个读锁。一个数据项可能会有多个读锁,但只允许一个写锁。如果两个事务需要同时持有一个数据项的写锁,那么必须等待其中一个事务释放锁。

2.2 时间戳(Timestamp)

时间戳是用于确定事务的顺序和控制并发执行的技术。系统为每个事务分配一个时间戳,用于标识它的顺序。当一个事务想要对数据库进行访问时,它必须先获取一个时间戳。如果一个事务要修改一个数据项,系统会检查当前时间戳是否早于该数据项的读时间戳,如果是,则该事务被认为是过时的,需要回滚操作,否则,事务将执行更新操作并将读时间戳设置为当前事务的时间戳。

2.3 多版本控制(MVCC)

在多版本控制中,每个事务都可以看到数据库的一致版本。当一个事务修改一个数据项时,它会创建一个新的版本,并将原始版本标记为过期。读取操作可以选择一个非过期版本。每个事务都不会看到其他事务创建的新版本,因此可以解决读-写冲突。

3. 实例说明

以下是一个实际情况的例子,在使用并发控制技术的情况下,这些技术将有助于保证数据的一致性。

考虑一个初始余额为100的银行账户,并在两个不同的终端上启动两个事务。一个事务试图将账户余额增加10美元,另一个事务将账户余额减少10美元。在整个事务处理过程中,必须确保以下事项:

  • 在一个事务对数据进行读取或写入时,另一个事务不能读取或写入相同的数据。
  • 当数据库发生冲突时,必须回滚一个事务(或两个)。
  • 不管发生什么,每个事务都应该以像平常一样的状态结束。

在这种情况下,可以使用锁技术。当一个事务尝试对数据条目进行写入时,必须获得锁。直到该事务完成操作并释放锁,另一个事务才能访问该数据条目。通过使用锁,可以保持数据的一致性和完整性,确保每个事务都具有预期的结果。

综上所述,DBMS 中的并发控制技术对维护数据库中数据的一致性和完整性至关重要,利用及时采取的措施,可以保持数据的可靠性,确保数据库中的记录得到正确处理和适当地保护。