共计 4499 个字符,预计需要花费 12 分钟才能阅读完成。
编译:袁钰涵 | 发自:思否编辑部
1971 年 的 3 月,英特尔推出了世界上第一个通用微处理器,即 [Intel 4004],老本 60 美元的它,领有约 2,300 个晶体管。
现在,最新款的 iPhone 领有近 120 亿个晶体管,以及略高于 60 美元的老本。
50 年带来的扭转是微小的,然而有的货色却始终不变。
20 世纪 90 年代有一大批编程语言开始引入,其中 1996 年引入了 Java,岁月无声,这么多年过来了,SQL 在泛滥编程语言中仍旧领有着属于本人的一席之地,甚至和 50 年前一样风行。
这篇文章将从为何引入关系数据库以及 SQL 为什么越来越风行进行分享,同时思考咱们能从中学到什么。
数据库治理的晚期历史——IDS 和 CODASYL
1962 年,Charles W. Bachman 在 General Electric 的一个小团队中工作。
一年后,Charles W. Bachman 的团队推出了人们口中说的第一个数据库管理系统——the Intergrated Data Store(IDS)。
10 年后,巴赫曼对 IDS 计算的奉献取得了被人们成为计算机界诺贝尔奖的图灵奖。
什么是 IDS?
19 世纪 60 年代初,计算机科学刚开始成为一个学术畛域。
也是在这个期间,美国信息替换规范码(ASCII)才被引入。
想要理解 IDS,咱们须要先理解推动其倒退的两个次要力量:
一,磁盘存储的推广
挪动 RAMAC 305
1956 年,IBM 推出了第一个商用硬盘驱动器:RAMAC 305。
以前应用磁带驱动器的时候,须要顺次在磁带中挪动以检索特定的数据,但磁盘驱动器的引入使程序员能够间接跳转到磁盘上的某个地位来检索和更新数据,为程序员带来了极大的便当。
只是这样一来,开发人员必须对于磁盘上的存储地位十分理解,受限于晚期操作系统中的文件管理系统,磁盘带来的便当仅供经验丰富的程序员享受。
于是开发人员须要一个能简化磁盘驱动器应用的解决方案。
二、编程语言从低级向高级的迁徙
同时,计算机科学在采纳曲线上,人们开始从创新者转变为晚期的采纳者。晚期风行像 Assembly 这样的低级编程语言,但随着对语言的进一步应用,更多程序员出于可用性的思考,改用像 COBOL 这样的高级编程语言。
到这个时候,咱们或者能猜到 IDS 为何存在了,它解决了磁盘存储的问题,同时不便了高级编程语言的应用。
IDS 容许开发人员应用高级编程语言(例如 COBOL)来构建可从磁盘存储中输出和检索数据的应用程序,因而,IDS 作为第一个数据库管理系统取得了殊荣。
CODASYL——数据库治理的新规范
1969 年,数据系统语言委员会(CODASYL)公布了一份报告,报告中提出了数据库治理规范,巴赫曼是这个委员会的成员,这些规范次要来自于 IDS。
CODASYL 数据模型引入了咱们明天应用的数据库管理系统的许多外围性能,其中包含了:
- 数据定义语言(DDL)
- 数据操作语言(DML)
最重要的是,IDS 和 CODASYL 引入了一种新的数据建模办法,该办法影响了 SQL 的最终开发,那就是——网络数据模型。
网络数据模型与关系模型
数据模型是形容建模世界数据的规范。
以前的分层数据模型应用树结构来形容数据,让关系限度在了一对多的组合中。
新的网络模型容许记录具备多个父级,从而创立了一个“图构造”,多个父级存在后,网络模型便能对多对一以及多对多的关系进行建模。
在网络模型中,表之间的关系存储在“集”中。每组都有一个所有者和一个或多个成员,就像一个老师会领有一位或多位学生个别。
网络模型的次要长处之一就是汇合中的相干记录通过指针间接连贯。汇合是用 next、prior、owner ponters 实现的,这相似于列表的链接,不便了开发者的查阅。
网络数据模型的 低级性质(low-level nature)提供了性能劣势,但因为每个记录都必须存储指向其先前记录和父记录的额定指针,它让咱们付出了高贮存老本。
关系模型的到来
一个关系模型的例子
1970 年,即 IDS 推出 8 年后,埃德加·科德(Edgar F. Codd)在他的开创性论文“大型共享数据库的数据关系模型”中介绍了关系模型,这篇论文也为他博得了图灵奖。
埃德加·科德(Codd)表明,数据库中的所有数据都能够用元组(SQL 中的行)示意,这些元组被分组为关系(SQL 中的表)。为了形容数据库查问,他创造了一种称为元组关系演算的一阶谓词逻辑。
元组关系演算引入了一种用于查问数据的申明性语言。在申明性编程语言中,程序员不须要说如何执行,只须要说想做什么,目标就可达成。
对于开发人员而言,这种新的申明性语言要容易得多。关系模型将所有数据公开,开发人员能够通过一个命令从一个表中检索所有数据,或读取一行(这要感激查问优化器),从此人们辞别了用迷宫般的指针来查找数据的日子。
关系与网络数据模型
规范化是分解表以打消冗余,从而缩小磁盘上数据占用量的过程。关系数据库通过规范化数据缩小了网络数据库具备的高存储老本。
然而,为了解决规范化的数据,关系数据库必须将表加载到内存中,并利用计算能力将表“联接”在一起,它又减少了 CPU 老本。
通过介绍如何应用关系模型不便老师查找所有班级和学生,你将会明确为何有如此高的 CPU 老本了:
当老师开始输出须要查找的数据时,数据库系统将首先检索所有相干类,而后它再进行第二次操作,检索学生数据。在这个过程中,所有的数据都将存储在内存中,在返回后果之前,将运行第三次操作把数据合并。
关系模型和网络模型之间的性能比拟
在应用理论数据的成果案例钻研中,Raima 发现网络数据库模型的插入性能是关系模型的 23 倍,查问性能更是它的 123 倍。
那么,为什么关系数据库是当先的数据库解决方案?
关系模型批改的时候更灵便,它的申明性语法简化了程序员的工作。
摩尔定律让计算机的性能取得极大的进步,计算成本继续降落,最终关系模型的计算成本被进步的生产率对消了。
工夫线拉到 50 年后的明天,以上综合种种影响下,数据中心中最价格最贵的配置就是 CPU。
SQL 的衰亡与统治
顺着工夫往下走,咱们遇见了咱们所青睐的 SQL。
埃德加·科德(Codd)发表论文 4 年后,Donald Chamberlin 和 Raymond Boyce 发表了名为“SEQUEL:一种结构化的英语查询语言”的论文。
他们将 SEQUEL 形容为“对表格构造的一组简略操作,等效于一阶谓词演算”。IBM 看到了这种后劲,并在 19 世纪 70 年代初迅速开发了 SEQUEL 的第一个版本,将其作为 System R 的一部分。
起初因为与英国霍克·西德利飞机公司的商标发生冲突,SEQUEL 更名为 SQL。
1986 年,美国国家标准协会(ANSI)和国际标准化组织(ISO)公布了第一个正式的 SQL 规范:SQL-86,这是 SQL 被用了十年后走出的重要一步。该规范将 SQL 分为几个局部:
数据定义语言(DDL):用于定义和批改架构和关系的命令
数据操作语言(DML):用于查问,插入和删除数据库信息的命令
交易管制:用于指定交易工夫的命令
完整性:用于设置数据库信息束缚的命令
视图:用于定义视图的命令
受权:用于指定用户拜访权限的命令
嵌入式 SQL:指定如何以其余语言嵌入 SQL 的命令
从 1974 年到明天,许多人研发了语法,试图与 SQL 抢夺查询语言的市场份额。这些新语法通常投合了过后特定的新技术:
[Lisp-] > [CLSQL .NET-]> [LINQ] Ruby on [Rails-]> [ActiveRecord]
35 年过来了,SQL 在数据库中仍无处不在,SQL 如何维持其作为查询语言的统治位置,咱们又能够从它的故事中学到什么?
SQL 50 年统治的秘诀,以及咱们能够学到什么
2017 年堆栈溢出开发人员考察
咱们从巴赫曼与第一个数据库管理系统 IDS 开始这个故事,探讨了磁盘存储和高级编程的转变以及如何须要一种新的数据处理形式,而后 CODASYL 进行了标准化的数据库治理,IDS 和 CODASYL 引入了新的网络数据模型,最初埃德加·科德(Codd)放弃了关系模型。
八年就产生了以上的种种变动。
在接下来的 50 年中,SQL 如何胜利地坚持下去?我认为有四个次要起因:
一、建设在第一性原理上
第一性原理是不能从任何其余命题或假如中推论得出的根本命题。例如,将碳氢化合物与氧气联合以产生化学反应,这是为每辆汽车的内燃机提供能源的最基本原理。
1970 年,埃德加·科德(Codd)为数据库创立了一个新的第一性原理:元组关系演算。这个新逻辑保住了关系模型与 SQL 的产生。在这三者中,元组关系演算是化学反应,关系模型是内燃机,SQL 是汽车。
二、布什内尔定律
仅凭第一性原理还不能保障胜利,汇编程序与程序员能够一键输出的 1 和 0 某种程度上十分靠近,但它仍被 COBOL(以及起初的 C)取代了,因为它短少了可用性。
从网络到关系模型的转变,咱们也看到了同样的故事。网络模型具备更快的性能,然而现在,每个公司都应用关系数据库,因为它初期应用起来非常简单。
“最好的游戏总是容易上手但很难把握”——诺兰·布什内尔(雅达利公司创始人)
这句话中,诺兰·布什内尔(Nolan Bushnell)说出了让人们应用新产品的机密。
在难学又难把握的汇编中,SQL 找到了完满的均衡。借助约 10 条 SQL 命令,任何人都能够从 20% 的常识中取得 80% 的学习效率。然而,要做到母版、索引、视图、优化,后续学习则还有很长的路要走。
三、聆听反馈与适应环境
查询语言不是永恒的整体,而是随工夫变动适应环境的规范组,年复一年中,SQL 规范一直地调整,排汇用户的反馈欠缺着本人。
从最后的构想开始统计,咱们曾经看到 10 种不同的 SQL 规范,每一个规范都有着很重要的更新。其中有 3 个更新十分大,这里列了进去:
1、1999 年,减少了正则表达式匹配,递归查问(例如,传递闭包),触发器,对过程和流程管制语句的反对,非标量类型(数组)和一些面向对象的性能(例如结构化类型)。反对在 Java(SQL / OLB)中嵌入 SQL,反之亦然(SQL / JRT)。
2、2003 年,引入了与 XML 相干的性能(SQL / XML),窗口函数,标准化序列以及具备主动生成的值(包含身份列)的列。
3、2016 年,增加行模式匹配,多态表函数,JSON。
SQL 还发明了其余产品能够应用的 Rails 构架。在 SQL 中没有强制语法,它只是为每个数据库提供了不便他们自行组建(T-SQL,MySQL,PSQL 等)的规范。
四、采纳 API
SQL 胜利的最终秘诀是应用程序编程接口(API)的衰亡。API 的抽象化底层实现、仅公开开发人员须要的对象与操作,大大简化了编程。
Hadoop 在 2006 年引入了分布式文件系统(HDFS),最后 SQL 语法无法访问,但 2013 年,Apache 创立了 Apache Impala,自此开发人员能够应用 SQL 查问 HDFS 数据库。API 让 SQL 以其非凡语法适应着新技术。
总结
SQL 是当今应用最宽泛的编程语言之一,它始于古代计算的曙光,并由 2 位图灵奖获得者赋予了它生命。
SQL 能放弃其主导地位是因为:建设于第一性原理、布什内尔定律的呈现、它的自适应性和 API 被应用。
如果你有其余认识,能够留言评论,咱们一起分享 SQL 胜利多年的起因是什么。