技术演进随着需求变迁而产生。近年来,中国企业推进数字化转型,数据成为企业核心资产,数据之间的关系也愈发复杂,市面上对数据进行基于图结构的查询、管理需求也迅速增长,使用图作为数据建模也成为了数据管理中的一种新兴方法。
这里的图并非计算机视觉、图像处理领域的图,而是图论中的图,它由节点和节点间的线组成,通常用来描述某些实体与它们之间的特定关系。
在此背景下,图数据库应运而生。它深度关联数据之间的关系,能让分析者能更多维度地观察和分析数据,让数据分析效率更高,洞察更深层的数据价值,也成为科技巨头战略布局的标配。
在图数据库的实际应用中,开发者若是想对数据进行基于图结构的查询、管理和分析,需要对现有数据进行离线预处理,以提取实体和关联关系,构建图结构数据。
不过这种离线的数据处理流程存在一定问题。一是开发者若是将大规模的数据迁移至图数据库进行管理,不仅流程复杂、开销高昂,图分析结果的实时性也较差;另一方面,开发者若是针对具体业务问题重新编写代码,这不仅拉长了研发流程,还不能保证图数据库查询的灵活性、拓展性以及完整覆盖的图查询逻辑。
针对此类问题,面向大规模知识图谱的人工智能分布式数据库 PandaDB 研发团队开源了一个图查询引擎框架 lynx: 图数据查询引擎开发框架,近期该项目发布了第 0.5 版。开发者们可通过适配 Lynx 的接口按需开发自己的图查询引擎和图数据库。
lynx: 图数据查询引擎开发框架 是一个面向异构数据源的图查询引擎开发框架。开发者们可以基于 Lynx 直接对数据源进行在线图分析,完成解析图查询语句,生成并优化查询计划,并将其转化为一系列数据基本操作,无需进行离线预处理,简化研发流程。
项目地址:lynx: 图数据查询引擎开发框架
开源许可证: Apache-2.0
开源时间: 2022年1月
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 条评论) “” |