历史背景

计算机应用的最初一个范围是将大量数据存储在大容量存储设备上,并在稍后的时间检索这些数据。随着时间的推移,用户的需求增加,不仅要求顺序访问,还要求对数据记录的随机访问,支持并行(写入)进程的并发访问,硬件和软件故障后的恢复,高性能,可扩展性等。在1970和1980年代,科学和计算机行业开发了技术来满足这些需求。

数据库管理系统的组成

高效数据存储的基本构建块——因此也是所有数据库管理系统(DBMS)的核心——是对位于中央内存和大容量存储设备上的数据进行快速读写访问算法的实现,这些包括B树算法、索引顺序访问方法(ISAM)、其他索引技术以及脏块和非脏块的缓冲。这些算法不仅限于DBMS,它们还适用于文件系统、某些编程语言、操作系统、应用服务器等。

除了采用这些例程外,DBMS还保证遵守ACID范式。该合规性意味着,在多用户环境中,一个事务内对数据的所有更改必须是:

  • 原子性:所有更改要么全部进行,要么全部不进行。
  • 一致性:更改将数据库从一个有效状态转变为另一个有效状态。
  • 隔离性:不同用户的事务在同一时间内不会互相影响。
  • 持久性:即使系统发生崩溃,数据库仍然保留已提交的更改。

数据库管理系统设计的分类

可以区分以下几代DBMS的设计和实现:

  1. 层次型DBMS:数据结构设计为层次式的父/子模型,其中每个子节点只有一个父节点(根节点除外,它没有父节点)。这样数据被建模并存储为树结构。子行直接存储在其父行之后,因此不需要在子行中存储父节点的ID或类似信息(XML实现了类似的方法)。如果应用程序以这种层次结构的方式处理数据,它是快速且高效的。但是,如果需要以偏离这种顺序的方式处理数据,访问效率较低。此外,层次型DBMS不提供n:m关系建模。另一个问题是,无法直接导航到存储在较低层的数据,必须先经过给定的层级结构。

    • 最著名的层次型DBMS是IBM的IMS。
  2. 网络型DBMS:网络模型将数据结构设计为复杂的网络,其中从一个或多个父节点到一个或多个子节点有连接,甚至可以形成循环。无需单一的根节点。一般来说,父节点和子节点的术语失去了层次性意义,可以被称为链接源和链接目标。由于这些链接是数据库内的物理链接,遵循这些链接的应用程序具有良好的性能。

  3. 关系型DBMS:关系模型将数据结构设计为关系(表),每个关系有属性(列),并且这些关系之间有相互关系。该模型中的定义是纯粹声明性的,并不预定实现问题,如关系之间的链接或数据库中某些行的顺序。关系完全基于内容进行。运行时,所有的链接和联接操作都是通过评估实际数据值来完成的,例如:... WHERE employee.department_id = department.id ...。因此,除了显式外键外,关系模型中没有父/子或拥有者/成员的含义。关系在这个模型中没有方向。

    • 关系模型和SQL基于关系代数的数学理论。
    • 在1980年代和1990年代,基于关系设计范式的专有和开源DBMS成为了市场的领导者。
  4. 面向对象型DBMS:如今,大多数应用程序是用面向对象编程语言(OOP)编写的。如果底层的DBMS属于关系型DBMS的类别,就会产生所谓的对象关系阻抗不匹配问题。也就是说,与应用程序语言不同,纯关系型DBMS(prDBMS)不支持OOP的核心概念:

    • 类型系统:OOP不仅了解原始数据类型,还可以定义具有复杂内部结构的类。类基于原始类型、系统类、对其他类或相同类的引用。prDBMS仅知道预定义类型。其次,prDBMS要求数据处于第一范式,即属性必须是标量,而在OOP中,它们可以是集合、列表或所需类型的数组。
    • 继承:OOP的类可以从其父类继承属性和方法。prDBMS不具备这种概念。
    • 多态性:运行时系统可以通过延迟绑定决定调用方法组中的哪个方法(这些方法有相同的名称和参数类型)。prDBMS没有这个概念。
    • 封装:数据和对数据的访问方法存储在同一个类中,不能直接访问数据,唯一的方式是通过类的访问方法。prDBMS不具备这种概念。

    面向对象型DBMS旨在弥补prDBMS和OOP之间的差距。在其巅峰时期,它们在1990年代中期和后期的市场位置较弱。此后,它们的一些概念被纳入到SQL标准以及rDBMS实现中。

  5. NoSQL:NoSQL一词代表了新兴的DBMS群体,它们与其他DBMS在核心概念上有所不同:

    • 它们不一定支持ACID范式的所有方面。
    • 数据不一定需要按照任何模式进行结构化。
    • 其目标是支持容错、分布式数据和大规模数据,参见CAP定理。
    • 实现方式在存储技术上差异很大:有键值存储、文档导向数据库、图形导向数据库等。
    • 它们不提供SQL接口。
    • 一些产品:MongoDB、Firebase实时数据库(Google)、Cloud Firestore(Google)。
  6. NewSQL:这一类DBMS旨在提供与NoSQL系统相同的可扩展性能,同时保持ACID范式、关系模型和SQL接口。它们通过避免重量级的恢复或并发控制来寻求可扩展性。

最后修改: 2025年01月28日 星期二 01:38