几十年来,SQL一直主导着数据查询,而新近出现的一些查询语言为之提供了更多优雅、简单和更具灵活性的方法。
在过去的30多年里,数据库和结构化查询语言(SQL)几乎是同义词。如果不借助第三方工具,任何人如果想要从数据库中检索信息,就必须学习SQL。同理,想要维护数据库或胜任数据库管理工作,都需要掌握其中的细微差别。
从某种程度上说,SQL语言有些倒退,它让人们像大型机用户一样思考和编码。虽然世界其他地方都接受小写字母,但SQL用户必须继续键入诸如SELECT或者WHERE之类的大写单词。好在正如当初字母全大写对那些穿着领带和短袖衬衫处理打孔纸带的工程师不是问题,今天对于穿着泰迪熊睡衣的远程工作者来说也勉强可以接受。
但是SQL对数据检索的控制力正在下滑。因为新的数据库正在出现,有些使用全新的数据查询语言,特别是NoSQL。比如MapReduce、Bigtable、Dynamo、Cassandra、MongoDB、Aerospike等。
NoSQL数据库一般不支持标准的SQL语言查询和管理,但很多NoSQL数据库提供了自己的独特的查询语言,这些查询语言大都是类SQL的,比如Cassandra的CQL、Aerospike的AQL语言等。
AQL是Aerospike用于检查数据库的数据浏览器,是一种易于维护的轻量级管理任务的工具。aql命令是对Aerospike管理工具的补充,它们是主要的、广泛的DB需求或检查的主要管理机制。
此外,也出现了一些和SQL一样更为通用的数据查询语言(本文所介绍的基本属于这些一类)。这些语言各有其适合的应用场景,它们的目的并非要替代SQL,但在一些特定的场合,它们的效率更好,可以为使用者带来方便。
本文介绍了八种检索数据的新方法。其中有些创新只是表面上的,开发人员更新了SQL的语法,使其更简洁、更易于阅读,从而在为浏览器编写代码和检索数据之间切换得更为顺畅。这些工具的创建者强调底层结构与SQL基本相同。它仍然很容易学习,别担心。
也有些需要我们以完全不同的方式思考,比如把数据存储在图数据库或时间序列数据库,它们为程序员如何描述他们想要查找的内容提供了新的范例。
并非所有这些都比SQL更好,你需要根据自己的需求选择,同时,这些并不一定能满足所有需要。但是它们提供了一个新的机会,可以使你重新思考保存在服务器上的海量数据。
值得一提的是,我们并不是说SQL变得不那么流行了,实际上,今天正在编写的SQL语句比以往任何时候都多。只是数据存储世界正在爆炸式增长,其中一些增长激发了人们尝试和扩展的冲动。
GraphQL
GraphQL的名称有点令人困惑,因为它实际上并不是一种对图数据库进行操作的语言。它更像是查询以类似JSON嵌套格式存储的数据的操作速记。该查询只是对结果应该是什么样子进行了简单描述。后台据此查看此字段列表(可能对值有要求),并尝试找到匹配的结果。SQL指定数据库应如何完成请求,而GraphQL用户只需提供字段列表。有人称其为“示例查询”。
该语言与某些JSON数据库天然地匹配,同时,GraphQL在使用表格模式搜索关系数据库时也越来越流行。智能后端可以将嵌套请求转换为适合的JOIN模式。
GraphQL最初是Facebook的一个内部项目,但在作为一个独立的开源项目发布后,其他人开始开发GraphQL后端。现在已经有几乎所有主要语言和许多现代实验语言编写的版本。
PRQL
如果您将软件视为一个Pipeline或一种汇编语言,那么您可能会喜欢PRQL,它是Pipelined Relational Query Language(发音为“Prequel”)的缩写。这种语言的查询由一系列小命令组成。把这些命令放到一起,就会产生一个只包含您想要数据的结果。
与许多现代编程语言类似,查询模型采用函数式方法。变量等简单功能减少了重复并简化了流程。一行的结果作为下一行的输入。如果您想删除某个步骤,通常只需注释掉该行,Pipeline的其余部分仍然可以工作。
PRQL的代码是用Rust编写的,并作为将PRQL转换为SQL的转译器。基本结构是可扩展的,因此您可以添加更多抽象来适应您的用例。这种易于实验的特性确保了该语言可以迅速进化。
WebAssembly
许多开发人员认为WebAssembly(缩写为Wasm)是一种用于创建在浏览器中运行得更快速的应用程序的工具。当Redpanda开始构建一个数据流工具来取代Kafka时,他们希望添加一种机制,不仅可以交付数据,而且偶尔还会在此过程中对其进行转换。WebAssembly就是他们的选择。
Redpanda通过创建不可更改且有序的数据流来完成分类帐。事件被添加进来,程序员可以在过去的任何时间点接入数据流。大多数从新创建的事件开始,但有些可能始于从过去某个创建历史聚合的时间点。
WebAssembly甚至比作为某些数据库一部分的存储过程能力更强、级别更低。虽然并非所有开发人员都想编写字节级的代码,但是它允许对数据流进行更多操作,远远超出SQL可能实现的那些转换。
GQL
图形查询语言或GQL是一个建议标准,它合并了类似的声明性语言,如 Cypher、PGQL和GSQL。开发人员通过为一组节点指定特定模型来创建查询,数据库负责查找匹配项。GQL使用更复杂的属性图,允许节点对共享几个不同的连接。
该标准正在积极开发中。目前,最好的实现是一些不适合长期部署的研究工具。
Gremlin
Gremlin是搜索图的原始语言之一,它通过多个步骤来搜索节点之间的连接。有人称其为“基于路径”或“图遍历”的语言。每个查询都建立在步骤之上,每个步骤或映射当前节点、或过滤列表、或以某种方式将结果制成表格。
语言通常只是一个起点。例如,有些人正通过在其中嵌入Python解释器来扩展Gremlin,以便可以在Python代码进行查询。还有人则将 Gremlin嵌入到Java等标准编程语言中,以便程序员可以在该语言中利用Gremlin的强大能力。
Gremlin最初是为Apache的TinkerPop项目构建的,它已被Amazon 的Neptune等主要事务图形数据库和使用Apache Spark或Hadoop的图形处理框架采用。
N1QL
多年来,Couchbase一直在寻找查询普通文档的最佳方式。一开始,查询被编写为一个JavaScript函数,该函数被交给数据库执行。这是一个很好的通用解决方案,有时需要很长时间才能生成结果,但它要求程序员懂得JavaScript。
N1QL(发音为“nickel”)旨在让SQL更容易地、原生地使用可能存储在 Couchbase中的JSON对象。一个基本查询有几个由SELECT、FROM 和WHERE关键字分为几个部分,就像SQL一样。对于数据从哪个数据结构来然后存入哪个数据结构的路径信息已调整以适应JSON对象的嵌套。
为了方便探索,N1QL提供了一个带有可视化界面的查询工作台,用于测试和优化查询。Couchbase还提供了一个通用的全文搜索选项,该选项独立运行,用于搜索文本词而不是查询结构化数据。
Malloy
根据Malloy的创建者的说法,SQL的问题在于语法细节。表达即使是最简单的查询也需要时间,因为语言冗长且充满隐藏的性能陷阱。因此,他们创建了一种现代编程语言,具有自然的默认值和更简单的语法,可以编译为SQL,因此无需改造数据库。
结果就是一种类似于强大的GraphQL的语法。查询更像是结果的模型或愿景,包括任何约束、匹配或默认值。Malloy在后台进行优化。例如,可以自动生成更智能的JOIN,以避免性能陷阱;子查询可以聚合在一起以节省时间;如果需要可以添加索引。因此,编写查询更像是编写现代的代码,标点符号有助于保持结构简洁。
Malloy的开源核心是在TypeScript中构建的,可以包含在Node.js代码中。VS Code插件简化了开发。
Basis
大多数查询语言直接与特定数据库相关联。Basis正在构建一个更好的管道,该管道可以从各种数据源中提取,然后再混合使用SQL和Python对它们进行过滤。在管道的末端是导出器,它们将数据提交给各种标准的使用方,从运行代码到AI算法再到图表和仪表板。
开发人员已经在他们自己的代码中构建了这样的管道。许多项目都依赖于相似的结构,Basis提供了一个预建选项,可以以更精细的方式进行定制。输入范围从标准数据库查询到API接入再到自定义Python代码。转换器不仅限于SQL的基本WHERE子句,也可以编写Python代码来做很多事情,而不仅仅是对数据流进行过滤。
Basis只是较新的数据管道工具的一个,这些工具启动了查询进程以从多个来源中提取数据,以及使用多种语言进行过滤,并以多种形式交付数据。它们的愿景是能从几乎任何数据源获取数据并将其交付给几乎任何消费者。
关于Aerospike
Aerospike实时数据平台:使组织能够面对数十亿笔交易规模时实时采取行动,同时将服务器占用空间减少多达80%。
Aerospike多云平台:以可预测的亚毫秒级性能为实时应用程序提供支持,数据规模高达PB 级,正常运行时间为 5个9,并提供全球分布的、强一致的数据存储能力。
基于Aerospike实时数据平台构建的应用程序:可用于打击欺诈、面向在线电子商务进行商品推荐、支持全球数字支付等,并为数千万客户提供超个性化的用户体验。
服务客户包括:Airtel、Experian、Nielsen、PayPal、Snap、Wayfair 、 Yahoo 等。
公司总部位于加利福尼亚州山景城,在伦敦、班加罗尔和特拉维夫设有办事处,目前已在中国开展业务。
微信搜索Aerospike服务号,既可以下载社区版本,也可以随时提问。欢迎添加小编微信:Aerospike_China,帮你解决更多问题。