在传统数据存储引擎上原位实现图查询:开发者通过为目标数据库、存储引擎适配Lynx的读写接口,无需迁移数据,原位实现对图查询语言的支持。 简化图数据库的研发流程:研发人员无需关注语法解析和查询优化,只需要根据目标存储介质的读写特点,有针对性地适配Lynx的读写接口,从而实现图查询功能。

首先,引入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


使用图形作为数据建模的基本表示是数据管理中的一种新兴方法。在这种方法中,数据集被建模为一个图:
将每个数据实体表示为图的顶点(也称为节点)
将两个实体之间的每个关系表示为对应顶点之间的边
图形数据模型因其独特的优点而备受关注。
首先,图形模型可以自然地适合具有层次结构、复杂结构甚至任意结构的数据集。这样的结构可以很容易地作为边编码到图模型中。这比关系模型更方便,关系模型需要将数据集规范化为一组具有固定行类型的表。
其次,图形模型能够高效执行复杂的查询或数据分析功能,这些功能需要观察数据实体之间的多跳关系,例如可达性查询、最短路径查询或中心性分析。目前使用的图模型有两种:资源描述框架(RDF)模型和属性图模型。
属性图目前统一定义, 以Neo4j为例.
在 Neo4j 中,数据被组织为节点、关系和属性这三者。
节点可以使用标签进行标记,表示它们在域中的不同角色(例如,Person, Car) 节点可以保存任意数量的属性(例如,name, born) 关系在两个节点实体(例如,Person LOVES Person)之间提供有向的、命名的连接。 关系始终具有方向、类型、开始节点和结束节点 可以具有属性,和节点一样。(例如,DRIVES的since属性) 节点可以具有任意数量或类型的关系。

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







