SQL的不合理有效性

两个分数和五年前,两位年轻的IBM研究人员提出了数据库; 一种在关系中构思的新语言,致力于数据可以以声明方式轻松操作的命题。自Don Chamberlin和Ramond Boyce发表SQL:结构化英语查询语言以来,关系模型和SQL已经扩展并适用于大量技术:OLTP,OLAP,对象数据库,对象关系数据库,甚至NoSQL。SQL启发了非关系数据库的查询语言设计:对象数据库的SQL,对象关系的SQL,XML的SQL,空间的SQL,搜索的SQL,JSON的SQL,时间序列的SQL,流的SQL等等。每个BI工具都使用各种SQL与数据交互。事实上,SQL是最多的成功的第四代语言

“SQL是一种只有它的力量才能超越它的神秘设备。”

卢卡斯埃德尔

正如Don最近所说,SQL基于关系代数的基础,其目标是通过提供类似英语的查询语言来实现以下目标:

  • 声明性语言和处理(而不是程序性)

  • 使语言可组合以帮助轻松编写复杂查询

  • 使用Edger F Codd开发的关系模型

虽然大数据试图赞美和替换数据仓库的关系系统,但他们试图说同一种语言:SQL。Hive,Impala,drill和BigSQL都讲SQL启发语言,优化器和执行类似于SQL的MPP执行。他们还定期添加新的SQL功能。所有这些都在您想到的每种类型的数据存储和模型上。SQL中数据存储格式,数据模型和查询处理的分离产生了显着的好处。自SQL推出四十五年以来,许多数据库都来去匆匆; 许多数据处理已经过去了。NoSQL运动中的一些人暗示,即使在不经意间,SQL和SQL数据库的死亡也是如此。SQL阵营大步迈进,Don Chamberlin最近表示:“当一种语言如此被人们认可,以至于其他语言开始将自己定义为不是那种语言时,它必须做得非常好。”

另一方面,数据库只是简单地使用No-SQL。虽然目前的定义是“Not Only SQL”,但最初的方法是不使用SQL并尝试替代语言和框架,如map-reduce。十年后,每个流行的NoSQL数据库都有SQL的变体:Couchbase中的N1QL,Cassandra中的CQL,Elastic中的ElasticSearch SQL。你说,“MongoDB没有SQL。”我说,“ Squint!您将看到一个非常简单的SQL实现。“通过在MongoDB中使用简单,有点过程和临时设计,查询松散的可组合性,优化以及使用SQL完成的许多创新。

虽然关系模型非常成功,但数据库支持各种数据模型:JSON,图形,XML,时间序列,空间,宽列,列,文档等。大多数(如果不是全部)这些数据库都有自己的SQL版本。N1QL是JSON的SQL; SQL / XML,来自InfluxDB的SQL,SQL / Spatial,Cassandra中的CQL等。甚至NoSQL数据库也实现了SQL和SQL启发的查询语言。即使在新的酷“数据科学”世界中,强烈建议使用SQL技能Lukas Eder在他必看的谈话中阐述了这一点。请参阅下面参考部分中的会谈链接。

现在,NOSQL数据库中的SQL项目比SQL数据库多。

数据模型/格式 SQL实现
JSON Couchbase N1QL:用于JSON的SQL
宽柱 Cassandra CQL
Hadoop /大数据 Hive,Impala,Drill,BigSQL
时间序列 Influxdb
图形 SQL Graph数据库,Oracle Graph
NoSQL数据库 Apache Phoenix
空间的 Oracle Spatial
搜索 弹性SQL


为什么SQL如此成功?

  1. 声明性:您声明输出,查询引擎找出执行查询的最佳方式。优化器,尤其是1979年Pat Selinger等人发明的基于成本的优化器,有助于不断提高性能。这为每个新进入者提供了一个很高的标准。一个基于Apache蜂巢最近的一篇论文是复杂性和完善涉及的例子。

  2. SQL不仅用于“查询”,还用于更新执行事务的数据。存储过程UDF通过将过程语言与声明性SQL结合起来扩展了范围。

  3. SQL具有可塑性。它已经多次标准化,每次添加一本功能齐全的书籍,一个充满语法的商店,以及一个充满关键词的词典。当然,并非所有SQL都是相同的。即使是RDBMS上的传统SQL实现也不完全兼容,除非您小心地将SQL编写为兼容。通过所有这些,SQL的原始精神仍然存在。SQL借用于进化的一个例子是SQL ++Don Chamberlin和Mike Carey教授讨论了支持复杂数据模型的需求,使用户和开发人员可以轻松访问JSON中的数据。Don的书SQL ++ For SQL Users:A Tutorial 向您介绍SQL ++的最新发展,SQL ++是为灵活的JSON数据模型上的数据处理而设计的,但是以SQL兼容的方式。

  4. SQL就像它借用的英语一样,对新数据类型,访问方法和用例的新思想和扩展持开放态度。

  5. SQL与数据表示的独立性允许自己用于非关系数据:CSV,JSON和所有大数据格式。有些人将关系模型表示的刚性与SQL的刚性混为一谈。实际上,在给定的模式中,SQL允许您选择-joed-group-aggregate-project任何数据格式。

评估SQL支持

现在SQL无处不在,您需要在支持级别上进行尽职调查。

  1. 找出每个工作负载工作负载特征和目标。例如交互式应用程序或交互式分析或批量分析或BI工作负载等。

  2. 支持的声明反映了业务能力

  3. 表达式(标量,聚合,布尔),连接(内部,左/右/外部外部),子查询,派生表,排序和分页(LIMIT / OFFSET)方面的语言功能

  4. 索引:没有正确索引的SQL只是图灵机的原型

  5. 优化器:查询重写,选择正确的访问路径,创建最佳查询执行路径是SQL成功4GL的原因。有些具有基于规则的优化器,有些具有基于成本的优化器,有些具有基于成本的优化器。评估优化器的质量至关重要。典型的基准测试(TPC-C,TPC-DS,YCSB,YCSB-JSON)在这里不会帮到你

  6. 俗话说:“数据库中有三件重要的东西:性能,性能和性能。” 衡量工作负载的性能非常重要。YCSB和扩展的YCSB-JSON将使评估更容易

  7. SDK:丰富的SDK和语言支持可加快您的开发速度

  8. BI工具支持:对于大数据分析,BI工具通常通过标准数据库连接驱动程序提供支持非常重要

N1QL的创建者Gerald Sangudi曾经说过SQL是成功的,因为它代表了数据处理的基本操作。SQL支持一组丰富的操作select-join-group-aggregate-having-window-order-paginate-setops。这是我们(或机器)在指定数据操作时的想法吗?虽然还有待观察,但其他语言如python和java正在为数据上的这些操作添加运算符。也许其他人也会效仿。SQL已经走到了关系模型没有的地方。可以毫不夸张地说:

SQL已经死了。SQL万岁。


猜你喜欢

转载自blog.51cto.com/14009535/2379897