暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PandaDB图查询引擎框架Lynx今日开源啦

科苑数据 2022-01-28
171



近期,PandaDB研发团队发布了图查询引擎框架Lynx。Lynx当前版本(v0.4)支持图查询语法解析、图查询计划生成-优化-执行等功能,支持的图查询语言为Cypher。PandaDB此次发布Lynx,用户即可通过实现Lynx的接口研发自己的图查询引擎或图数据库。










应用背景


随着知识图谱、网络分析等图应用的快速发展,对数据进行基于图结构的查询、管理需求也迅速增长。一些原生支持图数据管理与图查询的图数据库被广泛使用,如Neo4j、TigerGraph、PandaDB等。然而在某些场景下,数据工作者需要对其他来源的数据进行图查询或图分析,如线上日志、Redis中的缓存、ES中的全文索引、MySQL中的业务数据等等。
针对这一任务,一部分开发者选择将数据迁移至图数据库进行管理,这种方式带来的一系列导出-转换-导入的数据处理操作,开销高昂且实时性较差;另一部分开发者选择为实际任务编写专门的业务代码,这种方式灵活性低、拓展性差且无法覆盖完整的图查询逻辑。
Lynx能够解析图查询语句,生成并优化查询计划,并将其转化为一系列数据基本操作。开发者通过实现这些基本操作接口,即可支持图查询分析,简化了研发流程。总结来说,使用Lynx可以:
  • 在传统数据存储引擎上原位实现图查询:开发者通过为目标数据库、存储引擎适配Lynx的读写接口,无需迁移数据,原位实现对图查询语言的支持。
  • 简化图数据库的研发流程:研发人员无需关注语法解析和查询优化,只需要根据目标存储介质的读写特点,有针对性地适配Lynx的读写接口,从而实现图查询功能。

Lynx介绍


Lynx是一个通用的图查询引擎框架。Lynx首先会对输入的图查询语句进行解析,并根据解析的结果生成由若干算子组成的逻辑计划(logical plan)和物理结构(physical plan)。随后,Lynx通过内置的优化器对物理计划进行优化,以优化运行效率。最后将物理计划转换成一系列可执行的基本操作,如添加节点、删除节点、创建索引等等。用户需要做的,就是结合实际应用场景中的存储结构的特点,实现这些基本操作接口。


使用示例


通过Lynx,只需要简单三步即可实现对Cypher查询的支持。

首先,引入Lynx。开发者可以通过Maven配置文件引入Lynx:

<dependencies>

<dependency>

    <groupId>org.grapheco</groupId>

    <artifactId>lynx</artifactId>

    <version>0.4.1</version>

</dependency>

</dependencies>

Lynx将图查询语句转换成一系列图操作,这些操作以抽象方法的形式定义在GraphModel中。第二步需要做的,就是基于应用场景中的实际存储结构去实现GraphModel及其中的图操作。

最后,只需要创建一个CypherRunner,并传入实现好的GraphModel即可。

(获取示例完整源码请访问https://github.com/lynxworld/MemGraph)



欢迎贡献


Lynx采用Apache-2.0开源协议,仓库地址如下:

https://github.com/lynxworld/lynx

欢迎提交issues、PR。



背景知识:图数据模型


使用图形作为数据建模的基本表示是数据管理中的一种新兴方法。在这种方法中,数据集被建模为一个图:

  • 将每个数据实体表示为图的顶点(也称为节点)

  • 将两个实体之间的每个关系表示为对应顶点之间的边

图形数据模型因其独特的优点而备受关注。

首先,图形模型可以自然地适合具有层次结构、复杂结构甚至任意结构的数据集。这样的结构可以很容易地作为边编码到图模型中。这比关系模型更方便,关系模型需要将数据集规范化为一组具有固定行类型的表。

其次,图形模型能够高效执行复杂的查询或数据分析功能,这些功能需要观察数据实体之间的多跳关系,例如可达性查询、最短路径查询或中心性分析。目前使用的图模型有两种:资源描述框架(RDF)模型和属性图模型。


属性图模型


属性图目前统一定义, 以Neo4j为例.

在 Neo4j 中,数据被组织为节点、关系和属性这三者。

节点是图数据中的实体:
  • 节点可以使用标签进行标记,表示它们在域中的不同角色(例如,Person, Car)
  • 节点可以保存任意数量的属性(例如,name, born)
  • 关系在两个节点实体(例如,Person LOVES Person)之间提供有向的、命名的连接。
  • 关系始终具有方向、类型、开始节点和结束节点
  • 可以具有属性,和节点一样。(例如,DRIVES的since属性)
  • 节点可以具有任意数量或类型的关系。

背景知识:图查询语言


Cypher: A standard query language for property graphs

Cypher是属性图的一个标准查询语言。Cypher是一种声明性的图形查询语言,它允许对图形进行表达性和高效的查询、更新和管理。它的设计适合于开发人员和操作专业人员。Cypher设计简单,但功能强大;高度复杂的数据库查询可以很容易地表达出来.

Cypher受到许多不同方法的启发,并建立在已有的表达查询实践的基础上。许多关键字,如WHERE和orderby,都是受SQL启发的。模式匹配借用了SPARQL的表达式方法。一些列表语义是从Haskell和Python等语言中借用来的。Cypher的结构基于英语散文和简洁的图像,使得查询无论是书写还是阅读都很容易。


扫码关注我们
第一时间带你了解
更多科学数据资讯
文章转载自科苑数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论