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

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

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

image.png

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

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

GraphQL

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

image.png

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 就是最好的选择。

image.png

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

GQL

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

image.png

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

Gremlin

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

image.png

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 更好,并不是所有这些都是开发者们正在寻找的,但他们的而出现都提供了一个新的机会,让你有机会以不同的方式思考某些服务器上的海量字节,期待你能找到一种新的方法来阐明自我所需,不是吗?

相关文章
|
21天前
|
SQL 安全 数据处理
揭秘数据脱敏神器:Flink SQL的神秘力量,守护你的数据宝藏!
【9月更文挑战第7天】在大数据时代,数据管理和处理尤为重要,尤其在保障数据安全与隐私方面。本文探讨如何利用Flink SQL实现数据脱敏,为实时数据处理提供有效的隐私保护方案。数据脱敏涉及在处理、存储或传输前对敏感数据进行加密、遮蔽或替换,以遵守数据保护法规(如GDPR)。Flink SQL通过内置函数和表达式支持这一过程。
49 2
|
28天前
|
SQL 关系型数据库 MySQL
|
28天前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `<rest>` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
33 0
|
28天前
|
测试技术 Java
全面保障Struts 2应用质量:掌握单元测试与集成测试的关键策略
【8月更文挑战第31天】Struts 2 的测试策略结合了单元测试与集成测试。单元测试聚焦于单个组件(如 Action 类)的功能验证,常用 Mockito 模拟依赖项;集成测试则关注组件间的交互,利用 Cactus 等框架确保框架拦截器和 Action 映射等按预期工作。通过确保高测试覆盖率并定期更新测试用例,可以提升应用的整体稳定性和质量。
52 0
|
28天前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
37 0
|
28天前
|
Java 测试技术 容器
从零到英雄:Struts 2 最佳实践——你的Web应用开发超级变身指南!
【8月更文挑战第31天】《Struts 2 最佳实践:从设计到部署的全流程指南》深入介绍如何利用 Struts 2 框架从项目设计到部署的全流程。从初始化配置到采用 MVC 设计模式,再到性能优化与测试,本书详细讲解了如何构建高效、稳定的 Web 应用。通过最佳实践和代码示例,帮助读者掌握 Struts 2 的核心功能,并确保应用的安全性和可维护性。无论是在项目初期还是后期运维,本书都是不可或缺的参考指南。
32 0
|
28天前
|
测试技术 Java
揭秘Struts 2测试的秘密:如何打造无懈可击的Web应用?
【8月更文挑战第31天】在软件开发中,确保代码质量的关键在于全面测试。对于基于Struts 2框架的应用,结合单元测试与集成测试是一种有效的策略。单元测试聚焦于独立组件的功能验证,如Action类的执行逻辑;而集成测试则关注组件间的交互,确保框架各部分协同工作。使用JUnit进行单元测试,可通过简单示例验证Action类的返回值;利用Struts 2 Testing插件进行集成测试,则可模拟HTTP请求,确保Action方法正确处理请求并返回预期结果。这种结合测试的方法不仅提高了代码质量和可靠性,还保证了系统各部分按需协作。
10 0
|
28天前
|
SQL 数据管理 数据库
SQL中外键:维护数据完整性的关键
【8月更文挑战第31天】
40 0
|
28天前
|
SQL 数据管理 关系型数据库
SQL分区表技术的奥秘:如何用分区策略让你的大规模数据飞起来?
【8月更文挑战第31天】在现代软件开发中,处理大规模数据是常见挑战,而SQL分区表技术提供了一种高效的解决方案。本文详细介绍了SQL分区表的概念、类型(范围、列表、哈希和键分区)及其创建与维护方法,并通过示例代码展示了如何添加、删除和重组分区。遵循了解查询模式、定期维护分区及使用数据库性能工具等最佳实践,可以帮助开发者更高效地进行数据管理。随着SQL生态的发展,分区表技术将在未来发挥更大作用。
24 0