跳转到内容

主内存数据库系统设计/介绍

来自维基教科书,开放书籍,开放世界

第一部分:数据库和数据库管理系统简介


目录上一页: 前言下一页: DBMS 简介


第一章:概述

1.1 简介

[编辑 | 编辑源代码]

数据库系统已成为每个软件应用程序的重要组成部分。数据库系统诞生于 1960 年代,并花了 10 年时间才得到广泛应用。越来越多的组织开始采用数据库技术来管理其企业数据,这发生在 1970 年代中期。

广义更新访问方法 (GUAM) 是由洛克希德公司在 1960 年代初期开发的一种层次式数据库系统。洛克希德公司开发此软件是为了管理通常与制造操作相关联的数据。IBM 在此之后不久就推出了信息管理系统 (IMS) 作为一种层次式数据库管理系统。1970 年代是关系型数据库技术诞生的黎明。埃德加·F·科德博士关于[[w:Relational model|关系模型]]的论文彻底改变了人们对数据系统的思考方式。行业对关系模型的优越性做出了迅速反应,将他们的产品改编成该模型。在 1980 年代,数据库系统获得了很大的发展,大部分企业从面向文件的系统过渡到数据库系统。一些领先的产品,如 ORACLE、DB2、SQL Server、Informix 和 Sybase,开始凭借其旗舰关系型数据库管理系统 (RDBMS) 统治数据库世界。

关系模型在 1990 年代成熟起来,成为主要的数据库模型。在 1990 年代末,面向对象数据库开始流行起来,但是,使用关系模型开发的旧应用程序不愿迁移到面向对象模型。

2000 年代后期出现了NoSQL 运动,该运动转向更具体的应用程序数据模型,而不是关系模型。面向对象模型是正在使用的替代数据模型之一。

大多数领先的数据库管理系统支持面向对象模型。它们中的许多提供了对象到关系的映射,以实现面向对象模型的支持。例如,DB2 是关系型、层次型 (XML)、面向对象的数据库管理系统。

商业 DBMS

开源 DBMS

1.2 数据库

[编辑 | 编辑源代码]

“数据库”一词是常用的。我们经常互换使用“数据库”和“数据库管理系统”这两个词,这在大多数情况下是错误的。因此,我们必须首先定义“数据库”的含义。

数据库是为特定目的而设计、构建和填充数据的相关数据的集合。

数据库可以是任何大小,并且复杂程度不同。例如,员工姓名和地址列表可能包含几百到几千条记录,具体取决于组织规模。实际上,有些数据库存储了更多数据,例如,税务部门维护的数据库,用于跟踪所有已缴税款。在印度,假设大约有 10 亿纳税人,如果每个纳税人每张表格提交约 500 个字符的信息,那么我们会得到一个 10^9 * 500 = 500 吉字节 (GB) 数据的数据库。为了至少保存过去三年的申报表,我们需要 1.5 太字节 (TB) 的空间。必须组织和管理大量信息,以便用户可以按需搜索和更新数据。

数据库也可能非常复杂,因为不同记录之间存在复杂的关系。印度铁路预订系统就是一个很好的例子。

1.3 数据库管理系统

[编辑 | 编辑源代码]

数据库管理系统 (DBMS) 是一种通用软件系统,它使用户能够定义、构建、操作和共享信息或数据。此外,它还提供长期的数据“持久性”。存储的信息被称为数据库。

数据库管理系统包括可以应用于数据的基本操作。每个数据库管理系统都提供以下基本操作,统称为 CRUD 首字母缩略词

  • C—通过将其插入数据库来创建数据
  • R—从数据库中读取数据
  • U—更新已存储在数据库中的数据
  • D—从数据库中删除数据

1.3.1 DBMS 的优点

[编辑 | 编辑源代码]

简单地运行 CRUD 操作不需要 DBMS。实际上,可以使用电子表格甚至编写我们自己的程序集来简单地创建和维护数据。但是,DBMS 软件已经解决了在此过程中必然会出现的许多其他问题,例如

  1. 与多个用户共享数据,并进行访问控制
  2. 多用户事务处理
  3. 并发处理
  4. 冗余控制
  5. 查询处理和优化
  6. 安全性
  7. 备份和恢复
  8. 完整性约束强制执行
  9. 标准强制执行
  10. 应用程序数据抽象

1.4 数据库系统类型

[编辑 | 编辑源代码]

数据库软件已经发展到支持不同类型的数据模型。当我们尝试在数据模型中表示现实世界中的数据需求时,我们会在一段时间内提出不同的数据模型。事实证明,我们可以通过几种不同的方式查看数据需求并创建数据模型。它们列在下面。

1.4.1 层次式 DBMS

[编辑 | 编辑源代码]

层次式数据库的性质类似于文件系统,具有根节点和一个或多个引用父节点的子节点。这提供了非常快的 数据访问路径,但应用程序维护量很大。

数据被组织成树状结构,允许使用父/子作为一对多关系来重复信息。父节点可以有多个子节点,但子节点只有一个父节点。该模型在最初的主机数据库管理系统中得到了广泛应用。目前最常见的层次模型形式是 LDAP 模型。随着最近 XML 数据库的出现,该模型再次流行起来。

XML 数据库是一种数据持久性软件系统,允许以 XML 格式导入、访问和导出数据。存在两种主要类型的 XML 数据库

  • 启用 XML:它们将所有 XML 映射到传统数据库(如关系型数据库),接受 XML 作为输入并呈现 XML 作为输出。
  • 原生 XML (NXD):此类数据库的内部模型依赖于 XML,并使用 XML 文档作为基本存储单元。

1.4.2 网状 DBMS

[编辑 | 编辑源代码]

该模型是层次式数据模型的扩展,其中每个记录可以有多个父节点和多个子节点记录。实际上,它支持多对多关系。它提供了灵活的方式来表示对象及其关系。但在它获得普及之前,新的模型“关系模型”被提出,并且在提出之后就取代了网状数据库模型。

1.4.3 关系型 DBMS

[编辑 | 编辑源代码]

关系模型是任何关系型数据库管理系统 (RDBMS) 的基础。它定义了如何创建、存储和检索数据,以及如何使数据在逻辑上保持一致。关系模型有三个核心组件:对象或关系的集合、作用于对象或关系的操作符以及数据完整性方法。

关系模型之父 E. F. Codd 博士制定了规则并提出了该模型。数据表示为数学上的 n 元关系,n 元关系是 n 个域的笛卡尔积的子集。“关系”是“表”的数学术语,因此“关系型”大致意味着“基于表”。

关系模型的基本原则是信息原则:所有信息都由关系中的数据值表示。根据该原则,关系数据库是一组关系,每个查询的结果都以关系形式呈现。

关系的基本构建块是域或数据类型。元组是属性值的无序集。属性是属性名称和类型名称的有序对。属性值是属性类型的特定有效值。它可以是标量值或更复杂类型。关系被定义为一组 n 元组。关系数据库中的表(也称为关系)是一个用于保存相关信息的二维结构。数据库包含一个或多个相关的表。不要将关系与关系混淆。关系本质上是一个表,而关系是关联、连接或关联两个表的一种方式。

表中的一行是单个事物的集合或实例,例如一个员工或发票上的一行项目。一列包含所有单一类型的信息,而行和列交叉处的数据块(字段)是数据库查询语言可以检索到的最小信息块。


关系数据库的一致性不是通过构建到使用它的应用程序中的规则来强制执行的,而是通过作为逻辑模式的一部分声明并在 DBMS 中对所有应用程序强制执行的约束来强制执行的。关系模型通过外键实现的逻辑链接,建立了相关数据出现的连接。

关系模型定义了选择、投影和连接等操作。虽然这些操作可能在特定的查询语言中并不明确,但它们提供了构建查询语言的基础。

SQL 代表结构化查询语言,它支持几乎所有现代关系数据库系统中的数据库组件。SQL 已由美国国家标准协会 (ANSI) 进行了 20 多年的改进和完善。

ANSI 引入了标准查询语言来访问关系数据库,即 SQL(结构化查询语言)。所有数据库供应商在其关系引擎之上开发了 SQL 引擎,以解释和执行这些 SQL 语句。这也导致编程语言中出现了标准接口。用于 C 的 ODBC 和用于 JAVA 的 JDBC 成为访问 SQL 引擎的事实标准。

本书主要关注关系型数据库管理系统 (RDBMS),因为其他数据库系统构建在 RDBMS 之上,而它们无法从 MMDB 的主内存特性中获益。

1.4.4 主内存 DBMS

[edit | edit source]

内存数据库系统 (IMDB) 是一种内存驻留关系数据库,它通过将数据存储和操作在主内存中来消除磁盘访问。它也称为主内存数据库 (MMDB) 或实时数据库 (RTDB)。在实时数据库的情况下,可预测性比性能更重要。

磁盘和内存容量的增长速度远远快于延迟和带宽的提高。现在,多 TB RAM 扫描需要几分钟,而 TB 磁盘扫描需要数小时。现在我们将整个数据库保存在内存中,并智能地设计数据结构和算法,并使用共享大量主内存的多处理器,并智能地使用宝贵的磁盘带宽。数据库引擎需要彻底改变其算法,以应对主内存容量巨大(数十亿页,数万亿字节)这一事实。主内存数据库实现已经证明,它们可以比传统方法快 10 到 20 倍地执行查询。主内存数据库的时代终于到来了。在这本书中,我们将讨论这种类型的数据库管理系统。

1.4.5 列或垂直 DBMS

[edit | edit source]

以三元关系(键、属性、值)的形式将数据存储在列中,可以实现非凡的压缩,通常作为位图。查询此类位图可以将查询时间减少几个数量级,并启用全新的优化策略。这是由于它执行 OLAP(联机分析处理)查询时执行的磁盘 I/O 总数由于数据压缩而急剧下降。由于查询执行时间大幅缩短,这些类型的数据库在 OLAP 应用程序中开始流行起来。

1.4.6 流处理 DBMS

[edit | edit source]

数据越来越多地由监控环境的仪器生成——观察天体的望远镜、观察急诊室病人生命体征的病人监护仪、寻找欺诈的手机和信用卡系统以及监控产品在供应链中流动的 RFID 扫描仪。在所有这些情况下,人们都希望将传入数据与对象的记录进行比较。此类流处理系统的數據结构、查询运算符和执行环境与经典 DBMS 架构有本质区别。实质上,到达的数据项代表了对现有数据库的相当复杂的查询。研究人员一直在构建流处理系统,他们的流处理理念已开始出现在主流产品中。

1.4.7 对象关系型 DBMS

[edit | edit source]

对象关系型数据库管理系统 (ORDBMS) 提供了一种关系型数据库管理系统,允许开发人员将其数据库与他们自己的自定义数据类型和方法集成。对象视图允许开发人员在现有的关系数据库表上定义面向对象的结构。这样,现有应用程序就不需要立即更改,任何新开发都可以使用表的面向对象定义。这使得从关系型数据库过渡到对象关系型数据库相对容易,因为对象定义可以引用现有的关系组件。术语对象关系型数据库有时也指在传统 DBMS 上运行的外部软件产品,以提供类似的功能。

1.4.8 分布式 DBMS

[edit | edit source]

分布式数据库将分布式计算的优势带到数据库管理领域。它是一组分布在计算机网络上的多个逻辑上相互关联的数据库,以及管理分布式数据库的分布式管理器软件。它包括数据复制、数据碎片、分布式查询处理、分布式事务处理、分布式数据库恢复等。

本书重点介绍关系型主内存数据库系统。

[edit | edit source]

对于小型个人数据库(例如联系人列表),通常一个人来定义、构建和操作数据库,并且没有数据共享。然而,庞大而复杂的数据库需要许多人来定义、构建、操作和维护数据库。数据库涉及许多角色,列举如下:

  • 数据库管理员负责数据库本身、DBMS 和相关软件。他负责授权访问数据库、监控数据库使用情况以及根据需要获取软件和硬件资源。
  • 数据库设计人员负责识别要存储在数据库中的数据,并选择合适的结构来表示和存储这些数据。他们与专业用户互动,并开发满足其应用程序要求的数据库“视图”。
  • 系统分析师/软件工程师彻底了解 DBMS 的功能,以便实施应用程序以满足其复杂的应用程序要求。
  • DBMS 内核开发人员是设计和实施 DBMS 接口和模块作为软件包的人员。
  • DBMS 工具开发人员包括开发工具来访问和使用 DBMS 软件的人员。典型软件包包括数据库设计、性能监控、GUI 等。

本书主要关注执行“DBMS 内核开发人员”角色的人员。

1.6 编程接口

[编辑 | 编辑源代码]

大多数数据库系统提供交互式接口,用户可以在其中输入 SQL 命令,数据库系统将检索并显示结果记录。例如,在安装了 MYSQL RDBMS 的计算机系统中,命令 mysql 将启动交互式接口。此工具便于创建模式和执行偶尔的临时查询。然而,实际上大多数数据库交互都是通过程序执行的。这些程序通常称为数据库应用程序。由于超过 90% 的应用程序涉及数据库,我们可以说所有应用程序都是数据库应用程序。

有三种方法可以以编程方式访问数据库:

  • 嵌入式 SQL - 在通用编程语言中嵌入 SQL 命令。数据库语句嵌入到编程语言中,并由预处理器通过前缀 “EXEC SQL” 进行识别。这些预处理器将这些语句转换为 DBMS 生成的代码。例如,ESQL 用于 C/C++,而 SQLJ 用于 Java。
  • 原生语言驱动程序 - 位于 SQL 命令之上的标准接口。这些驱动程序提供函数来连接数据库、执行语句、检索结果记录等等。ODBC 和 JDBC 就是例子。
  • 专有语言/驱动程序 - PL/SQL、PHP 驱动程序。Mysql 提供 PHP 驱动程序来访问数据库。

目录上一页: 前言下一页: DBMS 简介

华夏公益教科书