操作系统和事务数据库中的并发控制有什么区别?

Hov*_*vin 1 database-design concurrency transaction consistency

最近我正在学习事务数据库中的并发控制技术。但是,我对操作系统和事务数据库中的并发控制之间的差异感到非常困惑。

在我的理解中,数据库文献中介绍的并发控制技术可以用在多线程程序中,它的线程彼此共享一些变量,反之亦然。多线程程序中用于在线程之间共享变量的技术也可用于数据库中的并发控制。

为什么我们要费心在数据库文献和操作系统中以不同的方式介绍这一点?

Mic*_*een 6

数据库有两个并发要求。一个是内存块被引用时的非常短期的物理管理。这些在 DB 世界中被称为锁存器,可以使用互斥锁等来实现。这里关注的是在工作线程访问内存块时内存块的稳定性。

第二个控制数据库中保存的客户端数据的有效性和隔离性。它们控制对逻辑事物(元组、表等)的访问,而不是与物理硬件相关的事物(内存块)。这些被称为锁。它们与客户端事务持续的时间一样长,可以是任意长的时间。锁通常保存在与保存被锁定对象的结构不同的结构中。因此,锁定的东西不需要在持有锁定的整个持续时间内都在内存中。例如,可以读入一个页面,插入一行并在其上加锁以确保隔离。如果包含新行的页面被逐出,锁定将保持有效。确实,拿锁的时候锁的东西可能不存在!范围锁保护键值从下限到上限。获取锁时,这些值都不需要出现在数据中,也不能有落在该范围内的值。尽管如此,锁定将生效并允许隔离客户端的工作。

Goetz Graefe 的“ B 树锁定技术调查”的介绍部分很好地涵盖了这些想法。

操作系统只处理第一个(以我有限的专业知识)。任何磁盘扩展都隐藏在虚拟内存和页面文件后面。相比之下,DBMS 显式处理 RAM 和磁盘驻留以针对其特定用例进行优化。不同的需求导致 OS 和 DBMS 之间的不同处理。