关于编辑器:50年长盛不衰SQL为什么如此成功

1次阅读

共计 4589 个字符,预计需要花费 12 分钟才能阅读完成。

关系数据模型于 1970 年推出,并已占据主导地位 50 年。它为什么如此胜利?这要归功第一性原理和布什内尔定律。

1971 年 3 月,英特尔推出世界上第一款通用微处理器——英特尔 4004。它有约 2300 个晶体管,售价 60 美元。

工夫快进到 50 年后,最新的 iPhone 有将近 120 亿个晶体管(但价格仅为 60 美元多一点)。

咱们明天应用的许多编程语言直到 90 年代才推出(Java 是在 1996 年推出的)。不过,有一种编程语言当初依然像近 50 年前推出时一样风行:SQL。本文将探讨关系型数据库产生的背景、SQL 为什么越来越风行,以及咱们能够从它的胜利中学到什么。

晚期数据库治理的历史—IDS 和 CODASYL

1962 年,查尔斯·w·巴赫曼(与埃利希·巴赫曼没有关系)是通用电气一个小团队的一员。一年后,巴赫曼团队推出了起初被公认为第一个数据库管理系统的集成数据存储系统(IDS)。

10 年后,巴赫曼取得图灵奖(通常被称为计算机科学畛域的诺贝尔奖),以表彰他对 IDS 计算的奉献。

IDS 是什么?

在 20 世纪 60 年代晚期,计算机科学刚开始成为一个学术畛域。ASCII 直到 1963 年才推出。

要了解 IDS,咱们必须首先了解促成其倒退的两大驱动力:

  • 磁盘存储的推出
  • 向高级编程语言的迁徙

磁盘存储

1956 年,IBM 推出第一款商用硬盘驱动器——RAMAC 305。磁盘驱动器的引入使得程序员能够间接跳转到磁盘上的某个地位进行数据检索和更新。与其前身磁带驱动器相比,这是一个微小的改良,后者须要在磁带上程序挪动来检索特定的数据片段。

然而当初,开发人员必须找出记录在磁盘上存储的地位。因为晚期操作系统中文件管理系统的局限性,这是一项只有有教训的程序员能力实现的高级工作。开发人员须要一种解决方案来简化磁盘驱动器的应用。

高级编程

与此同时,在采纳曲线上,计算机科学开始从创新者转变为晚期采纳者。像汇编这样的低级编程语言晚期在学术界很风行,然而出于易用性思考,一般程序员开始转向高级编程语言,比方 COBOL。

那么什么是 IDS 呢?IDS 解决了磁盘存储和高级编程问题。IDS 容许开发人员应用高级编程语言(如 COBOL)来构建从磁盘存储输出和检索数据的应用程序。因为这个性能,IDS 取得了第一个数据库管理系统的殊荣。

CODASYL:一个数据库管理系统的新规范

1969 年,数据系统语言委员会(CODASYL)公布了一份报告,提出一个数据库治理规范。巴赫曼是委员会的一员,该报告次要参照了 IDS。

CODASYL 数据模型引入了许多咱们明天应用的数据库管理系统的外围个性:

  • 模式
  • 数据定义语言(DDL)
  • 数据操作语言(DML)

最重要的是,IDS 和 CODASYL 引入了一种新的数据建模办法,这种办法影响了 SQL 的最终开发——网络数据模型。

网络数据模型——比现在的关系模型更好?

数据模型是一种形容(模型)世界(数据)的标准化办法。

后面的档次数据模型应用树型构造来形容数据,然而这些树型构造仅限于一对多的关系。新的网络模型容许记录有多条父记录,从而创立一个图构造。通过反对多个父节点,网络模型可能对多对一和多对多关系进行建模。

在网络模型中,表之间的关系存储在汇合中。每个汇合都有一个所有者(即老师)和一个或多个成员(即班级和学生)。

网络模型的其中一个次要益处是,汇合中的相干记录是通过指针间接连贯的。汇合是应用 next、prior 和 owner 指针实现的,这样就能够像链表一样轻松遍历。

网络数据模型的低级个性提供了性能劣势,但也付出了代价。网络数据模型减少了存储老本,因为每个记录都必须额定存储指向前一条记录和父记录的指针。

关系模型的到来

1970 年,在 IDS 诞生 8 年后,Edgar F. Codd 在他的开创性论文《A relational model of Data for Large Shared Data Banks》中引入关系模型(这也为他博得了图灵奖)。

Codd 指出,数据库中的所有数据都能够用元组(SQL 中的行)示意,这些元组被分组成关系(SQL 中的表)。为形容数据库查问,他创造了一种一阶谓词逻辑的模式,称为元组关系演算。

元组关系演算引入了一种申明性语言用于查问数据。应用申明性编程语言,程序员只需阐明他们想做什么,而不用形容如何做。

对开发人员来说,这种新的申明性语言更容易应用。关系模型公开了所有数据。开发人员能够用一条命令,从一个表中检索所有数据或者读取一行数据。

在指针迷宫中查找数据的日子曾经一去不复返了。

关系数据模型 vs 网络数据模型

关系型数据库通过数据规范化升高了网络型数据库的昂扬存储老本。规范化是一个分解表以打消冗余的过程,能够缩小磁盘占用。

然而,关系型数据库减少了 CPU 老本。为了解决规范化数据,关系型数据库必须将表加载到内存中,并应用计算能力将表“连贯”在一起。让咱们通过一个例子来看下这个过程:在一个关系模型中,给定老师,查找所有的班级和学生。

首先,数据库系统执行一个操作来检索所有相干的班级。而后,它将执行第二个操作来检索学生数据。所有这些数据都将存储在内存中,在返回后果前,它将运行第三个操作来合并数据。

在一个应用实在数据的性能案例钻研中,Raima 发现,网络数据库模型的插入性能好 23 倍,查问性能快 123 倍。

那么为什么关系型数据库会成为当先的数据库解决方案?

易用性

关系模型更容易批改,它的申明性语法简化了程序员的工作。

摩尔定律在背地施展了神奇作用。计算成本继续降落,最终,生产力的进步对消了关系模型所减少的计算成本。

快进 50 年,当初,数据中心中最低廉的资源是 CPU。

SQL 崛起

最初,咱们迎来了大家都喜爱的 SQL。

在 Codd 的论文发表 4 年后,Donald Chamberlin 和 Raymond Boyce 发表了《SEQUEL: A Structured English Query Language》。

他们将 SEQUEL 形容为“一组对于表格构造的简略操作,[…] 和一阶谓词演算同样弱小。”IBM 看到其后劲,并在 20 世纪 70 年代晚期迅速开发出 SEQUEL 的第一个版本,作为其 System R 我的项目的一部分。

因为与英国 Hawker Siddeley 飞机公司的商标问题,其名称起初改为 SQL。

SQL 的下一个大倒退是在近十年后。1986 年,美国国家标准协会(ANSI)和国际标准化组织(ISO)公布第一个官网 SQL 规范:SQL-86。该规范将 SQL 分为以下几个局部:

  • 数据定义语言(DDL):此类命令用于定义和批改模式及关系;
  • 数据操作语言(DML):此类命令用于查问、插入和删除数据库信息;
  • 事务管制:此类命令用于指定事务的工夫;
  • 完整性:此类命令用于对数据库信息设置束缚;
  • 视图:此类命令用于定义视图;
  • 受权:此类命令用于指定能够拜访的用户;
  • 嵌入式 SQL:此类命令用于具体阐明如何将 SQL 嵌入其余语言。

SQL 的竞争者

从 1974 年到明天,有许多竞争者试图从 SQL 统治的查询语言市场中抢占市场份额。通常,这些新语法是针对特定的新技术:

  • Lisp ->CLSQL
  • .NET ->LINQ
  • Ruby on Rails ->ActiveRecord

35 年过来了,在数据库中,SQL 依然无处不在。SQL 作为一种查询语言是如何放弃统治位置的?咱们能够从它的故事中学到什么?

SQL 统治市场 50 年的机密

Stack Overflow 开发者考察,2017

在文章结尾,咱们首先介绍了巴赫曼推出的第一个数据库管理系统 IDS。咱们探讨了为什么磁盘存储和高级编程须要一种解决数据的新办法。而后,CODASYL 来了,标准了数据库治理。IDS 和 CODASYL 引入了新的网络数据模型,而最终,Codd 投下了关系模型。

这个过程继续了 8 年。

SQL 是如何在接下来的 50 年里坚持下去的呢?我认为次要有四个起因:

  • 基于第一性准则构建
  • 布什内尔定律
  • 聆听和调整
  • 采纳 API

基于第一性准则构建

第一性准则是一个根本命题,它不能从任何其余命题或假如中推导进去。例如,将碳氢化合物与氧气联合,产生化学反应。这依然是驱动每一辆车的内燃机原理。

1970 年,Codd 为数据库创立了一个新的第一性准则:元组关系演算。这个新创建的逻辑引出了关系模型,而后引出 SQL。元组关系演算是化学反应,关系模型是内燃机,SQL 是汽车。

布什内尔定律

仅仅建设在第一性原则上并不能保障其胜利。汇编是程序员所能做到的最靠近输出 1 和 0 的程序,但它依然被 COBOL(起初是 C)所取代。

它短少的一个要害因素是可用性。

从网络模型到关系模型的转换,咱们看到同样的状况。网络模型性能更好,然而当初每个公司都在应用关系型数据库,因为它很容易(动手)。

最好的游戏易于学习而难于精通。——Atari 创始人诺兰·布什内尔

诺兰·布什内尔晓得如何让人们应用新产品。但遗憾的是,汇编既难学又难精通。

SQL 找到了完满的均衡。10 个左右的 SQL 命令,任何人都能够学会其中的 20%,并实现 80% 的工作。然而要想精通,须要通过长期的积攒,具备丰盛的索引、视图和优化教训。

聆听和调整

查询语言不是一块永恒的巨石,而是一组随工夫变动的自适应规范。随着工夫的推移,SQL 规范始终在一直调整,并退出了来自用户的反馈。

从概念最后提出开始,咱们看到了 10 种不同的 SQL 规范,它们都有重要的更新。以下是三项比拟大的:

  • SQL:1999:增加了正则表达式匹配、递归查问(例如传递闭包)、触发器、对过程语句和流控制语句的反对、非标量类型(数组)和一些面向对象的个性(例如结构化类型)。反对在 Java 中嵌入 SQL(SQL/OLB),反之亦然(SQL/JRT)。
  • SQL:2003:引入了与 XML 相干的个性(SQL/XML)、窗口函数、标准化序列和主动生成值的列(包含标识列)。
  • SQL:2016:增加行模式匹配、多态表函数、JSON。

SQL 语法不是强制性的,它只是提供了一个数据库规范,每种数据库都能够创立它们本人的实现(T-SQL、MySQL、PSQL 等)。

采纳 API

SQL 胜利的最初一个机密是应用程序编程接口(API)的衰亡。API 通过形象底层实现,只公开开发人员须要的对象或操作,简化了编程。

API 让 SQL 能够应用专门的语法适应新技术的倒退。2006 年,Hadoop 引入分布式文件系统(HDFS),SQL 语法最后是无法访问该零碎的。而后,在 2013 年,Apache 创立了 Apache Impala,它容许开发人员应用 SQL 查问 HDFS 数据库。

小结

SQL 是当今最广泛的编程语言之一,但咱们常常遗记它的历史有多久了。它的旅程开始于古代计算机的拂晓,由 2 位图灵奖获得者赋予了它生命。对于为什么 SQL 可能放弃其主导地位,我曾经分享了我的认识:第一性准则、布什内尔定律、调整和 API。您认为促成 SQL 胜利的次要因素是什么?请给我留言。

还有一项 50 年来都没有扭转的技术。

SQL 编辑器

随着越来越多的人学习 SQL,数据库应用越来越须要合作。现在,开发人员可能会与营销团队的成员一起剖析用户数据,或者与数据科学家一起调试查问,市场上也呈现了越来越多基于 SQL 编辑器的各类数据库管理工具,如 Navicat、DBeaver、DataGrip 等。

而随着云的趋势,又有一批新型数据库管理工具登上舞台,如 CloudQuery。CloudQuery 作为一体化数据管控云平台,不仅仅作为一款 SQL 编辑器应用,更集成了开发者和 DBA 日常所需各种数据工具,致力于将 SQL 数据操作体验做到极致。

正文完
 0