前语:
Abstract:本文的首要内容是图形数据建模、范畴常识对建模的重要性以及图数据模型和实例模型之间的区别。
笔者近日在学习有关常识图谱Knowledge Graph的相关内容。
Neo4j是项目所需的一款功能强大的应用,特此来学习之,并记载于本文。
笔者是AI范畴的小白,作为初学者,文章中难免会有出错或许不恰当的部分,烦请读者朋友们指出(在以下恣意平台)。
个人博客:conqueror712.github.io/
知乎:www.zhihu.com/people/soeu…
Bilibili:space.bilibili.com/57089326
:/user/129787…
注意:本文不是教程,只是个人学习的记载和心得,或许会对你有帮助,建议合作官方文档一起学习!
官方文档链接:graphacademy.neo4j.com/courses/mod…
再注:原文是英文,若有较好的英文阅读才能能够直接读,本文是对原文中重要的内容进行了翻译,以及加上了笔者自己的理解。
初窥门径:
什么是图形数据建模:
首要咱们要知道的是Neo4j中,图的组成部分有哪些,详细来说有四个组件,别离是:
- 节点
- 标签
- 联络
- 特点
而创立图形数据模型的进程又如下所示:
- 了解范畴并为应用程序界说特定用例(问题)。
- 开发初始图形数据模型:
- 对节点(实体)建模。
- 对节点之间的联络建模。
- 针对初始数据模型测验用例。
- 运用 Cypher 运用测验数据创立图形(实例模型)。
- 测验用例,包含针对图表的功能。
- 由于要害用例的变化或功能原因,重构(改善)图形数据模型。
- 在图上施行重构并运用 Cypher 从头测验。
由此可见,图形数据建模事实上是一个迭代的进程,有些读者或许会觉得那么频频的重构是很麻烦的,不过事实上,与RDBMS相比,利用Cypher言语构建的Neo4j图形修正起来是十分灵敏和便利的。
模型的意图:
在为应用程序履行图形数据建模进程时,至少需求两种类型的模型:
- 数据模型
- 实例模型
听起来姓名差不多?那么,这两种模型别离都是什么呢?
事实上:
- 数据模型描绘的是图形的标签、联络和特点。
- 实例模型是用来测验模型用例的,这是图形数据建模的重要一环。
这是一个数据模型的比方:
而这是一个实例模型的比方:
建模节点:
这一部分首要学习的是:
- 从您的用例中辨认实体。
- 在图中创立节点以支撑数据模型。
界说标签:
实体是应用程序用例中的主导名词,比方:食谱中首要运用了哪些成分?
加粗的名词便是所谓的实体。
而这些实体便是在图中的节点,咱们界说标签也是用名词来界说,也便是节点的”姓名”。
界说特点:
节点不仅有姓名(标签),还要有特点,特点是用来唯一标识一个节点的,还能够答复应用程序用例的详细细节和回来数据。
详细问题需求详细分析。
建模联络:
这一部分首要学习的是:
- 从用例中辨认联络。
- 在图中创立联络以支撑数据模型。
首要咱们要知道的是,联络是实体之间的联络,一般来说是动词。
比方:食谱中首要运用了哪些成分?
虽然这看上去不是一件很难的事情,可是它们的微观和宏观规划能够说是图形功能中最要害的要素。
命名联络:
如上例,”运用了”便是一种命名,不能随意命名,以防混淆。
联络方向:
在Neo4j中创立联络的时候,一定是一条有向的边,假使真的需求无向边,那就正反都创立就好了。
值得一提的是,联络能够是两个节点之间的,也能够是一个节点的自环。
Fanout:
直接翻译成扇出不知道合不合适,咱们就暂时先用Fanout了。
在这里,咱们的实体(Person、Residence)不是表示为单个节点,而是表示为网络或链接节点。
联络特点:
在这里咱们看到咱们在MARRIED联络上有一个日期特点来进一步描绘 Michael 和 Sarah 之间的联络。
此外,咱们在WORKS_AT联络上有一个人物特点来描绘迈克尔在 Graph Inc. 工作时拥有或拥有的人物。
测验模型:
在本模块中,咱们将测验图是否能够用于测验模型的用例。
简单来说,在测验用例期间,咱们需求做的是:
- 向图中增加更多数据以测验可扩展性。
- 测验和修正用于测验用例的任何 Cypher 代码。
- 假如无法答复用例,则重构数据模型。
重构图:
在本模块中,咱们将学习:
- 为什么咱们重构一个图数据模型和图。
- 向数据模型增加标签。
为什么重构:
重构是更改数据模型和图形的进程。
重构的三个原因:
- 建模的图表并没有答复一切的用例。
- 出现了一个新的用例,您必须在数据模型中考虑该用例。
- 用例的 Cypher 体现不佳,尤其是当图形缩放时。
重构进程:
要重构图形数据模型和图形,您必须:
- 规划新的数据模型。
- 编写 Cypher 代码来转化现有图形以实现新的数据模型。
- 从头测验一切用例,或许运用更新的 Cypher 代码。
详细内容待弥补
消除重复数据:
概述:
咱们应该注意防止在图表中重复数据。
有些数据库需求一种非规范化形式来进步一组查询的速度,而图形数据库并不总是这样。
去重数据给你带来了额外的好处,答应你通过一个节点进行查询。
例如,找到购买了特定产品的其他客户,或许依据其他用户的评分找到相似的电影。
此外,在图中仿制数据会增加图的大小以及查询或许需求检索的数据量。
详细内容待弥补
特殊化联络:
为什么要重构图表以特殊化联络:
- 减少需求检索的节点数。
- 进步查询功能。
特殊联络答应您遵从特定的联络类型并防止在单个查询中遍历图的大部分。
怎么建立动态联络:
运用Cypher中的APOC库,这是图形引擎在运行时可用的库中的专用进程。
详细内容待弥补
中心节点:
有时,咱们会发现需求将更多数据衔接到联络的状况,而不是能够在特点中彻底捕获的数据。
换句话说,您需求衔接两个以上节点的联络。
数学通过超边的概念答应这样做。这在 Neo4j 中是不或许的,但咱们也有办法,解决方案是创立中心节点。
流程:
- 在单个上下文中衔接两个以上的节点。
- 超边(n 元联络)
- 将某事与一段联络联络起来。
- 在实体之间共享图中的数据。
详细内容待弥补