“超越” SQL 的数据查询语言“新秀”Top8:GraphQL、PRQL、WebAssembly上榜

几十年来,SQL(结构化查询语言)一直在数据查询语言领域处于主导地位,几乎成了数据库的“代名词”,任何想从数据库中检索信息的人都必须学习 SQL。但随着时代的变迁,SQL 对数据检索的主导力量正在减弱。

众所周知,世界上其他地方都使用小写字母,但 SQL 用户却仍在输入 SELECT 或 WHERE 等单词,这本身就是一种“倒退”。也正因为如此,现在市面上已经出现了一批使用全新语言的新数据库。

近日,InfoWorld 评选出了 8 款“超越” SQL 的数据查询语言,不仅为现代用例提供了更多的优雅、简单和灵活性,有些甚至还更好用,一起来看看吧!

GraphQL

GraphQL 的名字乍一听会让人有点困惑,因为它并非一种利用图形数据库中所有可能性的语言,反而更像一种查询类似于 JSON 的嵌套格式存储数据的优雅速记。

GraphQL 数据查询语言只是对结果的查询做快速描述,通过后端查看该字段列表,这些字段可能对值有限制,并尝试查找匹配的结果。SQL 一般是指定数据库应该如何完成请求,而 GraphQL 用户只需提供一个字段列表。

特别对于某些 JSON 数据库来说,GraphQL 语言是一种天然的匹配语言,且 GraphQL 在使用表格模式搜索关系数据库时也越来越流行,智能后端可以将嵌套请求转换为符合模式的连接模式。

GraphQL 最初由 Facebook 构建,用于 API 的查询语言,允许开发人员选择他们想要发出的请求类型,并在单个请求中接收所需的信息。在作为一个独立的开源项目被发布后,开发人员开始开发 GraphQL 后端。

PRQL

PRQL 语言为 Pipelined Relational Query Language(发音为“Prequel”)的缩写。这种语言中的查询被构造为一系列小命令,这些命令只使用所需的数据生成结果。

与许多现代编程语言类似,PRQL 查询的思考模型采用函数方法,变量等简单功能可以减少重复,简化流程。一行的结果以长链形式输入下一行,如果您想删除一个步骤,通常只需注释掉这一行,其余的 pipeline 仍然可以工作。

PRQL 的代码采用了 Rust 编写,以此将 PRQL 转换为 SQL 的传输工具,因此基本结构是可扩展的,这种简单的实验确保了语言的快速发展。

WebAssembly

许多开发人员认为 WebAssembly(缩写为 Wasm)是一种用于创建在 web 浏览器中运行的快速应用程序的工具,当 Redpanda 开始构建一个数据流工具来取代 Kafka 时,他们希望添加一种机制,不仅可以传递数据,而且可以在过程中偶尔转换数据,WebAssembly 就是最好的选择。

当然,WebAssembly 甚至比某些数据库中的存储过程功能更强、级别更低。并非所有开发人员都想编写字节级代码。但是这个选项打开了数据流,使其能够进行复杂的转换,远远超出了 SQL 所能实现的范围。

GQL

图形查询语言(Graph Query Language,简称GQL)是一种被提议的标准,它融合了类似 Cypher、PGQL 和 GSQL 的声明式编程语言。

开发人员通过为一组节点指定特定模型来创建查询,然后数据库负责查找匹配项。GQL 使用更复杂的属性图,允许成对的节点共享多个不同的连接。

Gremlin

Gremlin 是搜索图形的原始语言之一,它要求执行一组步骤来搜索节点之间的连接,因此被一些人称为“基于路径”或“图形遍历”语言。

Gremlin 语言每个查询都是基于步骤构建的,每个步骤都可能涉及映射当前节点、过滤列表或以某种方式将结果制成表格。

Gremlin 语言通常只是一个起点,如在扩展 Gremlin 时,在其中嵌入 Python 解释器,以便查询可以包含 Python 代码。也有人将 Gremlin 嵌入 Java 等标准编程语言中,以此来从该语言中挖掘 Gremlin 的威力。

Gremlin 最初是为 Apache 的 TinkerPop 项目构建的,它已被主要的事务性分布式图形数据库(如 Amazon 的 Neptune)和使用 Apache Spark 或 Hadoop 的图形处理框架所采用。

N1QL

N1QL(发音为“nickel”)旨在让 SQL 原生用户更容易处理可能存储在 Couchbase 中的 JSON 对象。与 SQL 一样,基本查询有几个由关键字 SELECT、FROM 和 WHERE 指定的部分,指定数据将来自的数据结构路径的细节将根据 JSON 对象的嵌套世界进行调整和调整。

多年来,数据库软件公司 Couchbase 一直在寻找查询一般文档的最佳方式。一开始,查询是作为一个 JavaScript 函数编写的,然后交给数据库执行。尽管这是一个很好的、通用的解决方案,但有时需要花费很长时间才能生成结果,因此开发者创造出了 N1QL。

为了鼓励实验,N1QL 提供了一个带有可视化界面的查询工作台,用于测试和优化查询。此外,Couchbase 还提供了一个通用的全文搜索选项,可独立运行,用于搜索文本词而非结构化数据的查询。

Malloy

Malloy 的创建者曾表示,SQL 的问题在于语法细节 —— 表达哪怕是最简单的查询也需要时间,因为语言冗长且充满隐藏的性能陷阱。因此,他们创造了一种具有自然默认值和更简单语法的现代编程语言 —— Malloy,可以编译成 SQL,因此没有人需要改造 stock database。

其结果是一种类似于更强大的 GraphQL 的语法,查询更像是结果的模型或愿景,包括任何限制、匹配或默认值。Malloy 可在后台处理一些优化,如可以自动生成更智能的连接,以避免一些性能陷进;而子查询可以聚合以节省时间,还可根据需要添加索引。因此,编写查询更像是编写现代代码,标点符号可以保持结构简洁。

Malloy 的开源核心是在 TypeScript 中构建的,用于包含在 Node.js 中的代码,VS Code 插件简化了开发。

Basis

大多数查询语言都直接绑定到特定的数据库,而 Basis 正在构建更多的管道,在使用 SQL 和 Python 混合过滤之前,可以从各种源中提取数据,最后再将数据交付给各种标准选项进行输出,从运行代码到人工智能算法再到图表和仪表盘。

Basis 只是更新的数据管道工具的一个例子,这些工具正在打开查询过程,从多个源中提取数据,使用多个语言进行过滤,并以多种形式交付数据。

综述

上面 8 个新型数据查询语言的出现,也并非意味着 SQL 越来越不受欢迎。如果说有什么区别的话,那就是编写的 SQL 比以往任何时候都多,而数据存储的世界正在以更快的速度发展,而这些发展和增长正在激发更多新尝试和新拓展。

当然,也并非所有这些新类型语言都比 SQL 更好,并不是所有这些都是开发者们正在寻找的,但他们的而出现都提供了一个新的机会,让你有机会以不同的方式思考某些服务器上的海量字节,期待你能找到一种新的方法来阐明自我所需,不是吗?


SegmentFault_行业快讯
第一时间为开发者提供行业相关的实时热点资讯
955 声望
41 粉丝
0 条评论
推荐阅读
第十六届中国大数据技术大会五大分论坛顺利举办!
1 月 8 日下午,由苏州市人民政府指导、中国计算机学会主办、苏州市吴江区人民政府支持,CCF 大数据专家委员会、苏州市吴江区工信局、吴江区东太湖度假区管委会、苏州市吴江区科技局、苏州大学未来科学与工程学院...

MissD阅读 5.7k

2022 星策 Summit 峰会首批嘉宾确认,火热报名中!
Start Together, Star Together ,一起开始,一起闪耀!星策社区年度最大峰会来 啦!2022 星策 Summit 是由星策开源社区主办、思否社区协办,面向企业管理层、CTO、CEO、AI 工程师、开发者的线上直播活动。本次...

MissD阅读 9.7k

Mybatis源码解析之执行SQL语句
通过调用 session.getMapper (AccountMapper.class) 所得到的 AccountMapper 是一个动态代理对象,所以执行 accountMapper.selectByPrimaryKey (1) 方法前,都会被 invoke () 拦截,先执行 invoke () 中的逻辑。

京东云开发者3阅读 799评论 1

封面图
社区盛会 | Pulsar Summit Asia 2022 议程全览
Pulsar Summit 是 Apache Pulsar 社区年度盛会,它将分布在世界各地的 Apache Pulsar 项目 Contributor、Committer 和各企业 CTO/CIO、开发者、架构师、数据科学家,以及消息和流计算社区的精英召集在一起。于此...

MissD阅读 7.5k

2023年语言和框架我们值得关注什么?
前端新技术一如既往的更新迭代快:前几天 Next.js 大会,邀请了 vercel 的 CEO 来讲 vercel 的认知。顺带推出了 turbopack,号称比 webpack 快 700 倍,比 vite 快 10 倍。又有很多前端同学在问,我们要学 Rust ...

阿里巴巴终端技术1阅读 958

封面图
Mysql 数据库的批量插入或更新(Upsert)
这个问题已经困扰我一段时间了,对于大量数据的插入或更新,批量操作肯定比每条记录调用一次快得多,新数据可以用 insert 批量插入,老数据可以用 replace into 批量更新。但如果不知道数据是否存在(是否有唯一k...

songofhawk2阅读 1.6k

封面图
Mybatis源码-动态SQL的实现原理
Mybatis提供了强大的动态SQL语句生成功能,以应对复杂的业务场景,本篇文章将结合Mybatis解析SQL语句的过程对Mybatis中对<if>,<where>,<foreach>等动态SQL标签的支持进行分析。

半夏之沫1阅读 1.2k

955 声望
41 粉丝
宣传栏