图数据库能做些什么?查询语言说了算

新一代图数据库已经在市场上站稳脚跟 , 与之相伴的一代查询语言也应运而生 。包括Gremlin、Cypher以及GQL等在内的各类图数据库查询语言 , 专门帮助用户解包图内信息 。
图数据库能做些什么?查询语言说了算
文章图片

文章图片
从本质上讲 , 一切数据库都需要一种与客户交流的方式 , 而查询语言的职责正是定义数据库能够做些什么 。良好的图数据库查询语言应该以尽可能简单的方式帮助开发人员根据数据库内定义的网络提出复杂问题 , 进而释放出图数据库的强大力量 。最初 , 这些语言各自面向不同的新数据库以专有方案的形式存在 , 但最近一段时间各查询语言间的开放标准正在加速建立 。
在关系数据库领域 , SQL(结构化查询语言)多年以来一直是行业的主导标准 。它定义了一种在表内搜索符合特定条件的数据行的核心方法 。如果数据跨越多个表 , SQL还提供一种表对齐方法 , 以便将所有信息连接至统一的集合之内 。SQL特别擅长查找包含与某些规定相匹配的特定字段的特定条目集合 , 但也就仅此而已了 。
经典关系数据库也能存储图 , 因此在图数据库出现之前 , 这也是开发人员所能仰仗的唯一选择 。SQL能够回答一部分基础问题 , 但传统查询语言却往往处理不了那些最有用、最具吸引力的问题 。事实上 , 关系数据库在表达极端复杂关系方面远远不及图数据库 , 而关系数据库查询的唯一解决方案就是返回大块数据以供客户端软件运行进一步分析 。
所以大家应该理解了 , 图查询语言的诞生是为了回答更为复杂的问题 , 例如:
在一棵家谱树中 , 某人有多少个远房表亲?在记录朋友或关注者信息的社交媒体图片中 , 两个用户之间的分离程度是多少?在企业的供应链中 , 工厂与客户之间的最长跳数是多少?在一系列银行交易中 , 哪些人与欺诈交易间的关系高于平均水平?在计算机网络中 , 哪些具有更高带宽的新连接可用于解决性能瓶颈?图数据库需要多种不同模型 , 其中某些查询需要跟踪多条链接或跳点 。最初 , 每种图数据库都使用自己的专有查询语言 。好在最近几年 , 图数据库厂商开始添加新的实现并致力于推动开源标准以实现交叉支持 。目前最常见的图查询语言包括:
Gremlin——最初为Apache Tinkerpop项目开发的图搜索语言 , 可实现过程性或声明性查询 。Cypher——最初由Neo4J创建 , 之后以OpenCypher的形式得到普及 , 这种声明性语言可用于搜索匹配特定属性的顶点和边 。GQL——一项标准倡议 , 致力于将Cyher、GSQL以及PSQL统一起来 。SPARQL——一种为了查询RDF格式知识图谱而建立的标准 。PGQL——甲骨文的原创语言 , 用于从符合规范的顶点当中搜索并收集信息 。GSQL——TigerGraph的原创过程语言 。AQL——ArangoDB的原创过程语言 。GraphQL——顾名思义 , 它肯定支持图查询;但GraphQL实际是一种更为通用的查询语言 , 能够高效搜索大部分文档与关系数据库 。它虽然也能发掘出一部分图数据库用途 , 但总体来讲只是在支持与关系数据库相同的常规查询 。
不同查询语言之间存在着一系列本质差异 。有些查询语言属于“声明性” , 另一些则属于“过程性” 。也就是说 , 有些是让开发者通过编写定义子集的简单规则来声明自己“想干什么” , 再由数据库应用这些规则、使用可用的索引构建搜索计划、再找到一切可能的匹配项 。
例如 , 用户可能需要查找相距10英里之内的所有超过10000美元的银行交易行为 , 或者是搜索互有联系而且在过去两周之内没发过新帖的社交媒体用户 。这些规则可以包括对标准查询语言(“WHERE AGE而过程性查询语言则更接近于传统计算机语言 , 允许开发人员控制数据库搜索条目的具体方式 , 一般是编写循环或者其他控制结构 。总的来讲 , 声明式语言更易于理解和使用 , 因为它隐藏掉了大部分搜索工作;但过程性语言则更为强大 。一部分数据库能够同时支持这两种查询方式 。