数据库的基本架构

数据库的基本架构

Content #

我们先通过一张架构图看看数据库的全貌。

这张图从约瑟夫 · 海勒斯坦 (Joseph M. Hellerstein) 等人的论文“Architecture of a Database System”中翻译而来。文中将数据库从逻辑上拆分为 5 个部分:

  1. 客户端通讯管理器 (Client Communications Manager) 这是应用开发者能够直观感受到的模块,通常我们使用 JDBC 或者 ODBC 协议访问数据库时,连接的就是这个部分。
  2. 查询处理器(Relational Query Processor)它包括四个部分,功能上是顺序执行的。首先是解析器,它将接收到的 SQL 解析为内部的语法树。然后是查询重写(Query Rewrite),它也被称为逻辑优化,主要是依据关系代数的等价变换,达到简化和标准化的目的,比如会消除重复条件或去掉一些无意义谓词 ,还有将视图替换为表等操作。再往后就是查询算法优化(Query Optimizer),它也被称为物理优化,主要是根据表连接方式、连接顺序和排序等技术进行优化,我们常说的基于规则优化(RBO)和基于代价优化(CBO)就在这部分。最后就是计划执行器(Plan Executor),最终执行查询计划,访问存储系统。
  3. 事务存储管理器(Transactional Storage Manager)它包括四个部分,其中访问方式(Access Methods)是指数据在磁盘的具体存储形式。锁管理(Lock Manager)是指并发控制。日志管理(Log Manager)是确保数据的持久性。缓存管理(Buffer Manager)则是指 I/O 操作相关的缓存控制。
  4. 进程管理器(Process Manager)连接建好了,数据库会为客户端分配一个进程,客户端后续发送的所有操作都会通过对应的进程来执行。当然,这里的进程只是大致的说法。事实上, Oracle 和 PostgreSQL 是进程的方式,而 MySQL 使用的则是线程。还有,进程与客户也不都是简单的一对一关系。
  5. 共享组件与工具 (Shared Components and Utilities) 在整个过程中还会涉及到的一些辅助操作,当然它们对于数据库的运行也是非常重要的。例如编目数据管理器(Catalog Manager)会记录数据库的表、字段、视图等元数据信息,并根据这些信息来操作具体数据内容。复制机制(Replication)也很重要,它是实现系统高可靠性的基础,在单体数据库中,通过主备节点复制的方式来实现数据的复制。

Viewpoints #

From #

04 | 架构风格:NewSQL和PGXC到底有啥不一样?

Architecture of a Database System