Stack Overflow(IT技术问答网站)今年开展了一项调查,共有64000名开发者参与。调查显示,SQL是目前第二大编程语言,有50%的开发者(包括Web,桌面,运维,数据等方向)在使用SQL。唯一打败了SQL的,是年龄只有SQL一半的JavaScript。
开发者最常用的语言排行, Stack Overflow 2017
这对于一门已经43岁的语言来说是一个了不起的成就,况且还是在变化日新月异的软件和科技领域。
当然,C和C++的年龄与SQL不相上下,但即使是把这两种语言加在一起也没有SQL那么流行。这可能就要由开发者们对各种数据库技术的使用情况来解释了:
数据库技术使用比例排行, Stack Overflow 2017
可以看到,SQL相关技术牢牢地占据数据库技术使用比例的前几位。虽然这些技术远远不是最受欢迎的,不过好在有PostgreSQL这个意外:
最受欢迎的数据库技术排行, Stack Overflow 2017
而且SQL语言虽然是最流行的语言,但也没有得到太多的喜爱:
最受欢迎的编程语言排行, Stack Overflow 2017
但也有一件好事,SQL是最不被害怕的语言……
最令人畏惧的语言排行, Stack Overflow 2017
综上所述,调查数据告诉我们,SQL是使用最广泛但却不怎么受欢迎的语言……
SQL和关系数据库管理系统(RDBMS)都是在1970年代早期开发的。Edgar F. Codd 开发了RDBMS,而Donald D. Chamberling 和Raymond F. Boyce 开发了SQL。
二者都诞生在计算机技术的早期,而且在90%的时间里都非常有效,使得数据库成为了一项“已经被解决的问题”。就像MailChimp已经成为了发送新闻简讯的同义词。如果你想使用数据库,你就得使用RDBMS和SQL。
不过,仍然还是有人使用其他email软件,正如还是用人使用非SQL的数据库。但即使是存在着其他可供使用的数据库技术,SQL依旧占据霸主地位。
以下8条,就是我们在SQL诞生43年后依旧使用它的原因。
SQL最初基于关系代数和元组关系演算——由Codd特别为关系数据库开发的两种数学模式。
所以,SQL是特别为处理数据而设计的,而事实证明,它非常善于存取和组织数据。
那么第一个原因就是:作为一种数据库技术,SQL非常称职。
RDBMS已经问世很长时间了,所以已经用于了大量不同的情况。在“前网络时代”,它就作为线下数据库使用,到如今,有了重大修改的SQL数据库,仍在Facebook这样的全球性app中扮演中核心角色——RDBMS和SQL已经久经沙场。而在众多产品中运行过的无数个小时,证明了它们是可信赖的。
有些软件就是能解决问题,尤其是当你在处理充斥着丢失、损坏和失败等问题的数据库时,这种优势尤为明显。作为成熟的软件,SQL有着备份计划、变化管理和操作严谨性,而这些会使棘手的情况大为好转。
因此,SQL数据库几乎总是最好的选择。
当事物存在一段时间之后,围绕着它的知识体系就会被建立。SQL也不例外。最过去的时间里,大量的SQL知识被写成文档,SQL社区快速发展,许许多多的技术人才成长了起来。
因为SQL社区如此活跃,SQL文档又如此丰富,所以它便吸引了大量的人才和商业活动。而又因为SQL吸引了大量的人才,所以SQL社区更加壮大,知识更加深入。
这就是多年来SQL的发展状况。
计算机语言发展了这么久,直到今天,SQL仍然是一种非常易学的语言。短短几天,你就可以学会基本的功能,能够进行查询和返回数据。非常简单。
即使是传统意义上的非技术岗位,比如市场,公司高管,以及非技术性的产品经理,都会去学习基本的SQL功能,来支持他们的工作。
而深入地了解SQL基于的关系型数据库系统,完全是另一件事。对于大多数只需要使用查询功能的人来说,SQL真是太好用了。
因为有半数的开发者都会使用SQL和RDBMS,所以我们可以肯定地说,这两者高度普及。这绝不是一件坏事。正如上文所说,由于使用人数多,相关知识和社区得以快速发展。而又由于其简单,故而对于开发者以及其他相关人员来说,SQL知识几乎是常识。
于是,相关知识就极易在公司、产业之间传播,人才储备充足。而这又反过来促进了知识的创造和社区的成长。
可见,SQL数据库普及度极高的特性,已经为其自身的成长构筑了一个良性循环。
从1995年至今,开源的SQL技术(MySQL和PostgreSQL)已经成为了主要的SQL数据库技术。
开发者使用的数据库技术排行, Stack Overflow 2017
其实,PostgreSQL是2017年开发者最希望使用的数据库技术之一。尽管它领先的幅度很小,且被MongoDB大幅超越。
2017开发者最希望使用的数据库技术排行, Stack Overflow 2017
这种向开源SQL数据库切换的趋势,对于已经规模庞大的SQL社区来说是一件好事。同时这种趋势的存在也印证了,SQL社区中的开发者们正在努力地使SQL变得更好。
坊间流传着这样一句话……
能用SQL server做好的事情就别写代码。
这句话背后的逻辑是,在绝大多数情况下,SQL都能找到最有效的办法来完成你的任务,而且做得比任何能自己写代码来解决的人更好。
举个例子。假设我们需要建立一份关于“加利福尼亚2017年第三季税收”的报告,具体做法是,选出列表中加利福尼亚的用户,并按照数据进行排列。那么你只需要一句SQL语句就可以完成:
SELECT SUM(Value_USD) AS California_Revenue_Q3 FROM Transactions WHERE Location = ‘California’ AND DATEPART(q, Date) = 3 AND YEAR(Date) = 2017;
而如果你要按照不同的地区对数据进行分解,那么SQL语句是这样的:
SELECT Location, SUM(Value_USD) AS Revenue_Q3 FROM Transactions WHERE DATEPART(q, Date) = 3 AND YEAR(Date) = 2017 GROUP BY Location ORDER BY Location;
如果你想得到税收最高的5个区域:
SELECT TOP 5 Location, SUM(Value_USD) AS Revenue_Q3 FROM Transactions WHERE DATEPART(q, Date) = 3 AND YEAR(Date) = 2017 GROUP BY Location ORDER BY SUM(Value_USD) DESC;
如果你想用其他语言来进行这些查询,情况就会复杂很多,既耗时间,语句也长得多。设计SQL就是为了切割数据,而且看起来SQL做得非常好。毕竟,不是数据因计算而存在,而是计算因数据而存在。
数据库是工具。工具不应该只有斧子,还应该有扳手,螺丝刀,锯子等等。每一种工具各司其职,解决不同的问题。而每一种数据库都长于一些事情,而短于另一些事情。
当你无法预见数据汇总或数据用途的所有可能性,但又需要表示一个系统中各部分的关系时,关系数据库就是最好的选择。而且老实说,大部分系统在这方面做得并不好。再者,SQL语言本身提供了一种用户友好型的数据组织方式。
SQL/RDBMS只是众多工具中的一种,且刚好在很多情况下都是切实能用的那种。而当需要保证数据的完整性、一致性时(比如金融领域),SQL/RDBMS就是最好用的工具。
SQL数据库有它们自身的缺点,且对于某些工作来说,并不是最好的选择。但在大部分情况下,它们可以轻松打败其他非SQL数据库。
有些人会担心数据规模的问题,但实际上,只有很小一部分人需要解决RDBMS的扩容问题——毕竟你不是Facebook或者Google。因此,你仍然可以用SQL数据库管理数一百万计的用户信息,而不出现任何问题。
更何况,只要知道如何权衡利弊,RDBMS是可以扩容的。
尽管数不清的其他数据库系统和技术,都在不断扩大着使用人群,但是,毫无疑问地,SQL数据库在可预见的未来甚至更远,会一直发挥作用。随着大数据,深度学习和物联网的到来,即使SQL数据库再流行43年也不奇怪。
确实,SQL数据库是有缺点的。但在绝大多数的案例中,庞大的社区,简单的语言,以及有强大的RDBMS作为其基础,使得SQL成为了最好的选择之一。
为什么我们在SQL诞生43年后还一直使用它呢?因为它能用,而且在90%的情况中都能完成任务。这对于身处越来越复杂的技术与集成环境中的开发者而言,就是最大的优点。
作者:码农网