绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
关系型数据库架构:概述
2020-05-19 17:35:30

我自2011年开始从事数据库内核开发工作,到目前为止有8年多的工作经验。从Java版的迁移工具,到数据库函数、语法,存储修改、审计、标记、资源监控、索引修改、共享存储集群等,到现在做的加密、存储引擎、分布式。有一定数据库经验,也一直想总结一下。今年读到了论文《Architecture of a Database System》,结合这几年的PostgreSQL开发经验,将以PostgreSQL为基础详细描述关系型数据库的架构。

工作这几年,见过和面过的技术人员也非常多,但真正投入数据库内核开发的真是凤毛麟角。好在在国家支持下,以及大型互联网公司的需要,近些年,数据库产品和技术岗位越来越多。我也希望这篇文章能为将要做或者正在做数据库内核开发的同学提供一定的帮助,希望对大家今后工作有所增益。

好了,按照惯例,还是上一个整体介绍的思维导图(随着文章的不断完善,会经常修改此图)。

按照我对数据库的理解以及结合《Architecture of a Database System》的介绍,我将数据库分为存储管理、查询处理器、进程管理、事务管理以及共享组件5个维度,单用户模式和多用户模式两个阶段向大家介绍。
单用户模式指只能由一个用户登录数据库进行操作,不允许并发。减少其他因素带来的复杂性,以小化的内容阐述。单用户模式下,不需要考虑进程管理、事务的处理,也不需要考虑任何的工具。
多用户模式下,就需要考虑增加并发的内容,这就涉及到了进程的管理以及事务管理。多用户模式下需要有能力,在并发的情况下拥有单用户模式的能力,即串行化。

对于关系型数据库[1]我的理解是,由存储和事务两大基石构成,而查询处理器将两者关联起来。什么是关系型,大家可以阅读论文《大型共享数据库的数据关系模型》,本人正在进行翻译中。简单来讲,就是二维数组(论文内容不止这些)。所有的存储都是建立在这基础之上的;事务首先要知道的四个特性,A(原子性)C(一致性)I(隔离性)D(持久性),所有操作也是基于事务和存储上的。即便对数据库很重要的查询处理器,其实也可以去掉,虽然会导致数据库非常难用。
拿PostgreSQL来举例,数据的小单位就是tuple,它是由数据和事务信息构成的,一条tuple就是一行数据。为了检索性能,PG[2]设计了Page,同时增加了索引。由于PG的存储是调用文件系统接口,所以又设计了虚拟文件句柄;正因为使用了关系型,同时SQL也就应运而生了[3];SQL的产生也就带来的查询处理器,查询处理器带来了很多排序、Join方式,同时为了更准确地进行优化SQL,带来了统计信息机制;为了完成事务性,PG增加了MVCC机制、锁机制、WAL、事务快照,当然查询处理器也承担了一部分事务的工作。而WAL又衍生出来了流复制,逻辑复制。MVCC又衍生出了Vacuum机制,也产生了vm和fsm文件。事务快照也产生了clog或xact。以上这些功能又产生了多个辅助进程完成整个数据库工作。PG选择进程作为用户例程,这又诞生了连接池工具。为了更好的维护数据库,又产生了逻辑备份和物理备份。同时方便用户使用,又产生了libpq,jdbc,odbc等等的驱动以及中间件[4]

我尝尝比喻关系型数据库是一座图书馆。关系型通俗的理解是,数据作为二维数组存在,可以理解为图书馆的图书排列(大型共享数据库的数据关系模型)。书架、楼层可以理解为关系型的数据结构,书作为数据存在,这就是存储。只能一个人进入图书馆(单用户模式),图书馆可以设计的相对简单,图书馆为其提供的就是找到书籍,让用户进行阅读(查询处理器);而当允许很多人都可以进入时(多用户模式),那么就需要复杂的设计,有不同的职责、权限,所有的图书馆管理员就是数据库的进程,做不同的工作(进程管理)。有人救火(数据修复、备份),有人整理书架、书籍(数据整理、归档),而用户进程就是指的来到图书馆的顾客,他们看书、移动书籍,而管理员就会对着维护(事务管理)。其次管理员也有很多工具(共享组件),提高服务质量和效率。以上,希望对你有帮助。

以下为关系型数据库架构完整章节:

  1. 关系型数据库架构:概述
  2. 大型共享数据库的数据关系模型(此为《A Relational Model of Data for Large Shared Data Banks》的翻译)
  3. 单用户模式
    1. 关系型数据库架构: 存储管理
      1. 存储前置文章:《I/O的5分钟法则
      2. 存储前置文章:《存储器系统
      3. 关系型数据库存储管理
    2. 关系型数据库架构: 查询处理器
  4. 多用户模式
    1. 关系型数据库架构: 进程管理
    2. 关系型数据库架构: 事务管理
    3. 关系型数据库架构: 共享组件

作者:

王硕,Shawn Wang,从事PostgreSQL数据库内核开发超过8年。从迁移工具开始接触PostgreSQL,后从事Oracle兼容、安全审计、标记、中分全文检索、资源监控、索引修改、数据加密、共享存储集群等项目工作。目前与PostgreSQL国际社区协作开发TDE(透明数据加密)功能,并对可拔插存储和分布式集群进行研究。对于PostgreSQL整体架构、存储、JIT、插件、Hook有深入研究。

参考

  1. ^后面数据库如不指明,则为关系型数据库
  2. ^PostgreSQL简称
  3. ^参看《大型共享数据库的数据关系模型》
  4. ^数据库内容比价多,这里就不详细展开了。
分享好友

分享这个小栈给你的朋友们,一起进步吧。

华山论剑
创建时间:2019-02-22 18:53:00
没了烟火气,人生就是一段孤独的旅程·····于是,在ITPUB,我们以武论英雄!
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 栈栈
    栈主
  • ?
    嘉宾

小栈成员

查看更多
  • u_9a3ed7a37f8e4a
  • daisyplay
  • boss_ch
  • Jack2k
戳我,来吐槽~