当前位置: 首页 > 科技观察

50年的统治:为什么SQL在今天仍然很重要

时间:2023-03-19 18:00:06 科技观察

本文转载自公众号《核心阅读》(ID:AI_Discovery)1971年3月,英特尔公司推出了世界上第一款通用微处理器——英特尔4004,它有2,300个晶体管,售价60美元。快进50年左右,最新的iPhone拥有近120亿个晶体管(遗憾的是超过60美元)。直到90年代,我们今天使用的许多编程语言才被引入(1996年引入了Java)。然而,有一种编程语言在50年前推出,并且仍然像当时一样流行,那就是SQL。早期数据库管理历史——IDS和CODASYL1962年,CharlesW.Bachman(与硅谷的ErlichBachman无关)是通用电气公司一个小团队的成员。一年后,Bachmann的团队推出了集成数据存储系统(IDS),后来被公认为第一个数据库管理系统。十年后,巴赫曼因其对IDS计算的贡献而获得了梦寐以求的图灵奖,也被称为计算机科学的诺贝尔奖。什么是IDS?在20世纪60年代初期,计算机科学才刚刚开始成为一个学术领域。在此背景下,美国信息交换标准码(ASCII)直到1963年才被引入。要了解IDS,我们需要了解其发展的两个主要驱动因素:磁盘存储的引入向高级编程-RAMAC的转变305.磁盘驱动器的引入使程序员能够直接跳转到磁盘上的某个位置来检索和更新数据。与它的前身磁带驱动器相比,这是一个巨大的改进,磁带驱动器需要通过磁带顺序移动来检索特定数据。但目前开发人员必须弄清楚记录在磁盘上的存储位置。由于早期操作系统中文件管理系统的限制,这是一项只有经验丰富的程序员才能完成的高级任务。开发人员需要一种解决方案来简化磁盘驱动器的操作。高级编程与此同时,在采用曲线上,计算机科学开始从创新者转变为早期采用者。像Assembly这样的低级编程语言在早期学术界很流行,但普通程序员会转向像COBOL这样的高级编程语言,因为它们更容易使用。什么是IDS?IDS解决了磁盘存储和高级编程的问题,允许开发人员使用COBOL等高级编程语言来构建从磁盘存储导入和检索数据的应用程序。由于这个特性,IDS成为第一个数据库管理系统。CODASYL-数据库管理的新标准1969年,数据系统语言委员会(CODASYL)发布了一份报告,提出了数据库管理标准。Bachmann是该委员会的成员,该报告大量引用了IDS。CODASYL数据模型引入了当今数据库管理系统的许多核心特性:模式数据定义语言(DDL)数据操作语言(DML)最重要的是,IDS和CODASYL引入了一种影响SQL最终开发的数据建模新方法,网络数据模型。网络数据模型-比今天的关系模型更好?图:网络模型范式数据模型是描述(模拟)世界(数据)的标准方式。以前的分层数据模型使用树结构来描述数据,但仅限于一对多关系。新的网络模型允许子记录有多个父记录,创建一个图形结构。通过允许多个父记录,网络模型可以模拟多对一和多对多关系。在网络模型中,表之间的关系存储在集合中。每个集合都有一个所有者(即教师)和一个或多个成员(即班级和学生)。网络模型的一个关键优势是集合中的相关记录通过指针直接连接。集合通过next、prior、owner指针实现,可以像链表一样方便遍历。网络数据模型的底层特性提供了性能优势,但这是有代价的。网络数据模型增加了存储成本,因为每个记录都必须存储指向先前记录和父记录的额外指针。关系模型的出现:关系模型的范式1970年,在IDS之后的8年,EdgarF.Codd在他的开创性论文《大型共享数据库的数据关系模型》中介绍了关系模型(这篇论文也让他和Bachman一样获得了图灵奖优胜者)。Codd表明,数据库中的所有数据都可以由分组为关系(SQL中的表)的元组(SQL中的行)表示。为了描述数据库查询,他发明了一种称为元组关系演算的一阶谓词逻辑形式。元组关系演算引入了一种用于查询数据的声明性语言。声明式编程语言允许程序员说出他们“想做什么”,而无需描述“如何做”。这种新的声明式语言更易于开发人员使用。关系模型公开所有数据。开发人员可以从表中检索所有数据,或在单个命令中读取单个行(多亏了查询优化器)。按照迷宫般的指针查找数据的日子已经一去不复返了。关系数据模型与网络数据模型通过规范化数据,关系数据库可以降低网络数据库的高存储成本。规范化是分解表以删除冗余的过程,从而减少数据占用的磁盘空间。但是,关系数据库会增加CPU成本。为了处理规范化数据,关系数据库必须将表加载到内存中并使用计算能力将表“连接”在一起。让我们来看看通过关系模型为特定教师查找所有班级和学生的过程。数据库系统将首先执行一个操作来检索所有相关类。然后,它的第二个操作是检索学生数据。所有的数据都会存储在内存中,在返回结果之前,它会进行第三次操作,合并数据。关系模型和网络模型的性能对比图在使用真实数据的性能案例研究中,Raima发现网络数据库模型的性能比真实数据高出23倍,插入和查询数据的速度比真实数据快123倍。那么,为什么关系数据库是领先的数据库解决方案呢?易用性关系模型更易于更改,其声明性语法简化了程序员的工作。摩尔定律在其背后发挥其魔力。计算成本继续降低,最终,关系模型中增加的计算成本抵消了生产力的提高。再过50年,如今,数据中心中最昂贵的资源是CPU。SQL时代的兴起在Codd的文章发表四年后,DonaldChamberlin和RaymondBoyce发表了《SEQUEL:结构化英语查询语言》。他们将SEQUEL描述为“一组基于一阶谓词演算的简单运算......在表格结构上”。IBM认识到了这种潜力,并在1970年代初期迅速开发了第一个版本的SEQUEL作为其SystemR项目的一部分。后来由于与英国供应商HawkerSiddeley的商标纠纷而更名为SQL。SQL的下一次飞跃距离我们还有将近十年的时间。1986年,美国国家标准协会(ANSI)和国际标准化组织(ISO)发布了第一个正式的SQL标准:SQL-86。该标准将SQL分为以下部分:数据定义语言(DDL):用于定义和修改模式和关系的命令。数据操作语言(DML):用于从数据库中查询、插入和删除信息的命令。事务控制:指定事务时间的命令。完整性:对数据库信息设置约束的命令。视图:用于定义视图的命令。权限:指定用户访问权限的命令。嵌入式SQL:指定如何在其他语言中嵌入SQL的命令。自1974年以来,无数竞争者试图从占统治地位的查询语言SQL手中夺取市场份额。这些新语法通常特定于新技术:Lisp->CLSQL.NET->LINQRubyonRails->ActiveRecord35年后,SQL在数据库中仍然无处不在。它是如何保持其作为查询语言的主导地位的,我们可以从它的故事中学到什么?SQL统治50年的秘诀——我们可以从中学到什么?图:2017年StackOverflow开发人员调查我们从第一个数据库管理系统IDS的引入开始,Bachmann讨论了从磁盘存储到高级编程的转变,这种转变创造了对新的数据处理方式的需求。然后是CODASYL和标准化数据库管理。IDS和CODASYL引入了一种新的网络数据模型。最终,Codd放弃了关系模型。这一切的发展历时8年多。SQL是如何在接下来的50年里保持流行的?我认为有4个主要原因:建立在基本原则之上基本原则是不能从任何其他命题或假设推导出来的基本命题。例如,碳氢化合物和氧气结合会产生一种化学反应,这种化学反应仍在驱动每辆汽车的内燃机。1970年,Codd创建了一个新的数据库基本原理:元组关系演算。这种新逻辑的创建导致了关系模型,后来又导致了SQL。元组关系演算是化学反应,关系模型是内燃机,SQL是汽车。布什内尔定理仅基于第一性原理并不能保证成功。汇编是程序员所能创造的最接近1和0的东西,但仍被COBOL(以及后来的C)所取代,而且缺少的要素是易用性。巧合的是,在从网络模型到关系模型的过渡中,网络模型表现更好,但现在每个公司都在使用关系数据库,因为它更容易(上手)。装配不仅难以掌握,而且也难以上手。SQL在两者之间取得了完美的平衡。10条左右的SQL命令,任何人都可以学会20%,然后进阶到80%,但成为高手需要一个漫长的索引、视图和优化过程。倾听和适应一种查询语言并不是一种单一的永恒语言,而是一套随时间演变的适应性标准。SQL标准随着时间的推移进行了调整,并吸收了用户的反馈。自最初的概念以来,我们已经看到了10种不同的SQL标准,每一种都做出了重要的改变。以下是三大更新:1.SQL:1999:增加了正则表达式匹配、递归查询(如传递闭包)、触发器、对流程语句和流控制语句的支持、非标量类型(数组)和一些对象-面向特征(例如结构化类型)。支持在Java(SQL/OLB)中嵌入SQL,反之亦然(SQL/JRT)。2、SQL:2003:引入了XML相关的特性(SQL/XML)、窗口函数、标准化序列、自动生成值的列(包括标识列)。3.SQL:2016:新增行模式匹配、多态表函数、JSON。SQL还演示了创建其他产品所基于的轨道的能力。SQL没有需要强制执行的语法,而是为每个数据库提供了一个标准来实现自身(T-SQL、MySQL、PSQL等)。API采用SQL成功的最后一个秘诀是应用程序编程接口(API)的兴起。API通过抽象低级操作简化编程,仅公开开发人员需要的对象或操作。API使SQL能够使用特定语法不断适应新技术。2006年,Hadoop引入了分布式文件系统(HDFS),最初是SQL语法无法访问的。然而,在2013年,Apache创建了ApacheImpala,使开发人员能够使用SQL查询HDFS数据库。SQL是当今最普遍的编程语言之一,我们不应该忘记它丰富的历史。它的旅程始于现代计算的黎明,并由两位图灵奖获得者赋予生命。