书接上回, 上篇文章提到了 Edgar Frank "Ted" Codd 提出了关系型数据库模型, 为数据库领域注入了新的活力. 然而这都是从后人们的角度看到的, 事实上论文发表后整个学术界稍微沸腾了一下, 但是很快就归于沉寂.
因为关系型数据库模型理论在当时还仅仅是个理论. 这与相对论如出一辙, 理论上说人类可以时间旅行, 然而实现起来确实困难重重. 尤其是很多相关理论和实践并不完善.
你现在觉得查询个数据不要太简单, 一条 SQL 就搞定了嘛. 可是你知道 SQL 是在论文发表几年以后才发明的嘛.
除了理论太超前之外, 关系型数据库模型还有个大问题: 性能不太行. 这个很好理解, 毕竟引入了关系代数这样一整套灰常复杂的数学模型, 抽象程度高了, 性能自然也就没法跟其他简单粗暴的模型相比.

因此, 关系型数据库模型蛰伏了一段时间, 直到 1974 年 IBM 的 System R 开启, 关系型数据库模型又再度回归了人们的视野. System R 不仅是第一个实现了 SQL 的数据库, 它同样是第一个实现了关系型数据库模型的数据库, 并且是第一个证明了关系型数据库模型的性能能够满足企业级应用的需要的数据库.
在这里有必要浓墨重彩的吹爆一下 System R , 虽然这只是一个实验性质的原型, 但是它为现代关系型数据库的落地和发展起到了奠基的作用.
System R 的研发一共经历了 3 个阶段.
第 0 阶段, 实现了 SQL 用户界面并实现了 SQL 的子集. SQL 的应用极大提高了程序员们的生产力, 要知道在这之前程序员不光要自己处理数据, 还要负责处理数据的存储逻辑. 如果产品经理改了需求, 程序员需要把数据全部导出, 然后再写好一套新的数据处理及存储逻辑, 最后再导入回去.

现如今, 即便是非技术人员, 也能通过简单的 SQL 从海量的业务数据中查询, 筛选所需要的信息.
第 1 阶段, 实现了多用户, 权限管理, 视图, 数据恢复以及并发锁机制. 在这一阶段, System R 已经颇具雏形.

第 2 阶段, 重点对 System R 进行的各项实验进行评估, 并且在 IBM 内部一些网站上进行了实践. 在这一阶段, 评估并总结了 System R 几个经典的实验性的实践.
首先是将 SQL 编译为机器语言, 通过编译将 CPU 指令大大精简, 提高了执行性能, 极大的降低了用户在拥有强大, 灵活的数据操纵能力的同时所消耗的资源;

其次是优化了数据的可用访问路径, 简单点儿说就是使用 B-tree 索引减少了读写数据时访问磁盘的次数, B-tree 在当时也算一个比较新的数据结构, 由 Rudolf Bayer 和 Edward M.McCreight 两位大佬在 1972 年发表;

接着是基于代价的优化器, 即便有时候你写的 SQL 并不理想, 但是优化器依然能够提供良好的性能优化;

再然后是视图, 鉴权, 恢复子系统和加锁子系统, 视图在一定程度上简化了操作, 同时对底层数据表进行了封装, 只对最终用户暴露必要的字段提高了安全性, 鉴权保证了在多用户场景下, 数据分层分级管理的需要, 恢复子系统通过使用影子页表和日志机制提供了数据灾难恢复, 加锁子系统则为每一个数据库用户提供了 3 个级别的数据隔离机制, 保证当前用户对数据的操作不会干扰到其他用户.
综上所述, System R 可以说是各种现代关系型数据库的鼻祖, 它的诸多理念及机制一直沿用至今, 并且成为各种数据库产品必备的核心要素.
System R 只是一个实验性质的项目, 随后 IBM 基于 System R 上的研究, 开发了一款商业化的关系型数据库产品 DB2 , 当然这都是后话.
1977 年, Larry Ellison 受到 System R 的启发创立了 SDL , SDL 即是后来大名鼎鼎的Oracle的前身. Larry 创立SDL 时期还有一段有趣的历史, 他本打算开发一款兼容 System R 的数据库产品, 然鹅 IBM 却没有看到 System R 的价值, 不肯把代码共享出来, Larry 最后只得作罢.
但是也因此让 Larry 下定决心打造自己的数据库 Oracle , Oracle 是世界上第一款商业化关系型数据库, 并且在此后成为了 IBM 家 DB2 的劲敌, 甚至风头还盖过 DB2. 想来让人不胜唏嘘, 这简直是"今日你对我爱答不理, 明日我让你高攀不起."最真实的写照. (截止发稿日, Oracle 的市值是 IBM 的 2 倍多)
(此处应该有 Oracle 的配图, 但是感觉惹不起 O 记的法务
)
未完待续.
参考资料:
Access Path Selection in a Relational Database Management System
http://x86.cs.duke.edu/courses/spring03/cps216/papers/selinger-etal-1979.pdf
数据库性能之翼:SQL 语句运行时编译
https://zhewuzhou.github.io/2018/09/13/SQL_Compilation_Technology_For_Performance/
A History and Evaluation of System R
https://people.eecs.berkeley.edu/~brewer/cs262/SystemR.pdf
Implementation of a structured English query language
https://dl.acm.org/doi/10.1145/361020.361215




