Chapter 2: Traditional RDBMS Systems
Introduced by Michael Stonebraker
Readings:
Michael Stonebraker and Lawrence A. Rowe. The design of POSTGRES. SIGMOD, 1986.
本章讨论的论文(可以说是)是关于 DBMS 系统最重要的三篇论文。我们将在这章中按时间顺序讨论它们。
System R 项目是在 IBM 研究院的 Frank King 的指导下开始的—大概在 1972 年。那时 Ted Codd 的开创性论文已经发表了 18 个月,对很多人来说,显然一般都会建立一个原型系统来测试他的 ideas。不幸的是,Ted 没有被允许领导这项工作,于是他转而去思考 DBMS 的 natural language interfaces 了。System R 很快决定实现 SQL,SQL 是从1972年的干净的块结构语言(block structured language)[2] 演变成为这篇论文[1]中描述的更复杂的结构。关于SQL语言设计的评述见 [3] ,它是在十年后写的。
System R 的结构分为两组,”下半部”和”上半部”。它们并不是完全同步的,因为下半部分实现了链接,而上半部分并不支持这些链接。为下半部团队的决定辩护,很明显他们是在与IMS竞争,后者有这样的结构,所以包括它是很自然的。上半部分只是没有让优化器为这种结构工作。(这里原文就很绕,大意是计算层组和存储层组不太对付)
transaction manager 可能是这个项目最大的遗产,由已故 Jim Gray 创作。他的许多设计至今仍在商业系统中延续。第二名是 System R 的优化器。基于成本(cost-based)的动态规划(dynamic programming)方法仍然是优化器技术的黄金标准。
我对 System R 最大的抱怨是,这个团队从来没有停下来去清理 SQL 。因此,”上半部”整体被简单地粘在 VSAM (注:Virtual Storage Access Method - Wikipedia)上形成DB2时,语言层被完整地保留下来。这个语言的很多烦人的特征沿用到现在。SQL将是2020年的 COBOL,一种人人都会抱有怨言的语言。
我第二大的抱怨是,System R 使用子存储过程的调用接口(subroutine call interface)(现在叫 ODBC )来连接应用系统和 DBMS 。我认为 ODBC 是世界上最糟糕的接口之一。为了一个简单查询,需要打开一个database,打开一个游标,再绑定一个查询,然后再对数据记录进行一次轮询。仅仅为了运行一个查询,就需要一页相当难以理解的代码。Ingres[11] 和 Chris Date[4] 都有更简洁的语言嵌入。此外,Pascal-R[9] 和 Rigel[7] 也是在编程语言中包含 DBMS 功能的优雅方式。直到最近,随着 Linq[6] 和 Ruby on Rails[8] 的出现,我们才看到更简洁的特定语言嵌入的重新出现。
在 System R 之后,Jim Gray 去了 Tandem 从事 Non-stop SQ L的工作,Kapali Eswaren 做了一个关系型的启动。团队中的大多数人都留在了 IBM ,并继续从事其他各种项目的工作,包括 R*。
第二篇论文涉及 Postgres。这个项目开始于1984年,当时很明显,继续使用学术上的 Ingres 代码库做原型是没有意义的。对 Postgres 历史的叙述出现在[10]中,读者可以在那里看到对开发过程中的起伏的全面回顾。
然而,在我看来,Postgres 的重要遗产是其抽象数据类型(ADT)系统。用户定义的类型和函数已经被添加到大多数主流的关系型 DBMS 中,使用 Postgres 的模型。因此,这个设计特点一直延续到今天。该项目还试验了时间旅行,但效果并不理想。我认为,随着更快的存储技术改变了数据管理的经济性,无覆盖存储会有它的一天。
还应该指出的是,Postgres 的大部分重要性来源于于一个强大的、性能良好且高可用的开源代码工作线。这是开源社区开发和维护模式的一个最佳例子。在20世纪90年代中期,一个志愿者组建的自上而下的团队接管了 Berkeley 代码线,并从那时起一直在指导其发展。Postgres 和 4BSD Unix[5] 都推动了使开源成为代码开发的首选机制。
Postgres 项目一直在伯克利直到到1992年,当时成立了商业公司 Illustra 来支持商业代码工作线(commercial code line)。关于 Illustra 在市场上经历的起伏,见 [10] 。
除了 ADT 系统和开源分发模型(open source distribution model),Postgres 项目的一个重要遗产是培养一代训练有素的 DBMS 实现者,他们在其他几个商业数据库系统建设中发挥了重要作用。
本节中的第三个系统是 Gamma,1984 年至 1990 年期间在威斯康星州构建的。在我看来,Gamma 普及了多节点数据管理的无共享分区表方法。尽管 Teradata 也有同样的想法,但正是 Gamma 推广了这些概念。此外,在 Gamma 之前,没有人会讨论 Hash Join,所以提出这类算法应该归功于Gamma(和 Kitsuregawa Masaru 一起)。
基本上所有的数据仓库系统都使用 Gamma 风格的架构。使用 shared disk 或 shared memory 系统的 idea 都几乎消失了。除非网络延迟和带宽能够与磁盘带宽接近,否则我预计目前的 shared-nothing 架构将继续存在。
References:
[1] Chamberlin, D.D. Early history of sQL. Annals of the History of Computing, IEEE. 34, 4 (2012), 78-82.
[2] Chamberlin, D.D. and Boyce, R.F. SEQUEL: A structured english query language. Proceedings of the 1974 aCM sIGFIDET (now sIGMOD) workshop on data description, access and control, 1974, 249-264.
[3] Date, C.J. A critique of the SQL database language. ACM SIGMOD Record. 14, 3 (Nov. 1984).
[4] Date, C.J. An architecture for high-level language database extensions. SIGMOD, 1976.
[5] McKusick, M.K., Bostic, K., Karels, M.J. and Quarterman, J.S. The design and implementation of the 4.4 BSD operating system. Pearson Education. 1996.
[6] Meijer, E., Beckman, B. and Bierman, G. Linq: Reconciling object, relations and XML in the .NET framework. SIGMOD, 2006.
[7] Rowe, L.A. and Shoens, K.A. Data abstraction, views and updates in RIGEL. SIGMOD, 1979.
[8] Ruby on rails: Ruby on rails. http://www.rubyonrails.org.
[9] Schmidt, J.W. Some high level language constructs for data of type relation. ACM Trans. Database Syst. 2, 3 (Sep. 1977).
[10] Stonebraker, M. The land sharks are on the squawk box. Communications of the ACM.
[11] Stonebraker, M., Held, G., Wong, E. and Kreps, P. The design and implementation of iNGRES. ACM Transactions on Database Systems (TODS). 1, 3 (1976), 189-222.