图查询想省时又省力?快来体验这款图查询引擎开发框架

图查询想省时又省力?快来体验这款图查询引擎开发框架

技术演进随着需求变迁而产生。近年来,中国企业推进数字化转型,数据成为企业核心资产,数据之间的关系也愈发复杂,市面上对数据进行基于图结构的查询、管理需求也迅速增长,使用图作为数据建模也成为了数据管理中的一种新兴方法。

这里的图并非计算机视觉、图像处理领域的图,而是图论中的图,它由节点和节点间的线组成,通常用来描述某些实体与它们之间的特定关系。

在此背景下,图数据库应运而生。它深度关联数据之间的关系,能让分析者能更多维度地观察和分析数据,让数据分析效率更高,洞察更深层的数据价值,也成为科技巨头战略布局的标配。

在图数据库的实际应用中,开发者若是想对数据进行基于图结构的查询、管理和分析,需要对现有数据进行离线预处理,以提取实体和关联关系,构建图结构数据

不过这种离线的数据处理流程存在一定问题。一是开发者若是将大规模的数据迁移至图数据库进行管理,不仅流程复杂、开销高昂,图分析结果的实时性也较差;另一方面,开发者若是针对具体业务问题重新编写代码,这不仅拉长了研发流程,还不能保证图数据库查询的灵活性、拓展性以及完整覆盖的图查询逻辑。

针对此类问题,面向大规模知识图谱的人工智能分布式数据库 PandaDB 研发团队开源了一个图查询引擎框架 lynx: 图数据查询引擎开发框架,近期该项目发布了第 0.5 版。开发者们可通过适配 Lynx 的接口按需开发自己的图查询引擎和图数据库。

图查询想省时又省力?快来体验这款图查询引擎开发框架

Lynx 是什么?

lynx: 图数据查询引擎开发框架 是一个面向异构数据源的图查询引擎开发框架。开发者们可以基于 Lynx 直接对数据源进行在线图分析,完成解析图查询语句,生成并优化查询计划,并将其转化为一系列数据基本操作,无需进行离线预处理,简化研发流程

项目地址:lynx: 图数据查询引擎开发框架


开源许可证: Apache-2.0


开源时间: 2022年1月

功能与优势

功能

  • 支持的图查询语言:Cypher
  • 提供图查询语言解析、图查询计划生成生成-优化-执行等功能。

优势

1.最近发布的第 0.5 版增强图查询语法的覆盖度,支持 LDBC(国际关联数据基准委员会)基准测试中的全部图查询语法

2.在传统数据存储引擎上原位实现图查询

开发者通过为目标数据库、存储引擎适配 Lynx 的读写接口,无需迁移数据,原位实现对图查询语言的支持

3.简化图数据库的研发流程

研发人员无需关注语法解析和查询优化,只需要根据目标存储介质的读写特点,有针对性地适配 Lynx 的读写接口,从而实现图查询功能

操作流程

1.Lynx 对输入的图查询语句进行解析,并根据解析结果生成由若干算子组成的逻辑计划(logical plan)和物理结构(physical plan)。

2.通过内置优化器对物理计划进行优化,以优化运行效率。

3.将物理计划转换成一系列可执行的基本操作,如添加节点、删除节点、创建索引等等。

4.用户结合实际应用场景中的存储结构的特点,实现基本操作接口。

流程图

图查询想省时又省力?快来体验这款图查询引擎开发框架

使用示例

1.通过 Maven 配置文件引入 Lynx

Lynx 将图查询语句转换成一系列图操作,这些操作以抽象方法的形式定义在 GraphModel 中



    org.grapheco

    lynx

    0.4.1

2.基于应用场景中的实际存储结构去实现 GraphModel 及其中的图操作

val graphModel = new GraphModel {

override def nodes(): Iterator[LynxNode] = {...}

overpide def relationships(): Iterator[PathTriple] = {...}

override def write: WriteTask = new WriteTask {

override def deleteRelations(ids: Iterator[LynxId]): Unit = {...}

override def deleteNodes (ids: Seq[LynxId]): Unit = {..}

...
}
}

注:实现 GraphModel 的具体方法需前往memgraph: 基于内存的图数据库demo,作为Lynx的应用示例。获取完整源码

仓库地址:https://gitee.com/grapheco/memgraph

3.创建 CypherRunner,传入实现好的 GraphModel

private val runner = new CypherRunner(this)

def run(query: String, param: Map[String, Any] = Map.empty[String, Any]): LynxResult = {
  // runner.compile(query)
  runner.run(query, param, None)
}

在这篇文章里,我们介绍了这款开源图查询开发框架 Lynx。它极大简化了图数据库的研发流程,产品与工程师们可以把精力放在业务逻辑、隐私以及更加复杂的系统上,而不用再花时间去关注语法解析和查询优化,如何才能有效的读取他们想要的数据,只需要根据目标存储介质的读写特点,有针对性地适配Lynx的读写接口,从而实现图查询功能。如果你也想开发自己的图查询引擎及图数据库,快上手试试吧。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章