前语:
Abstract:本文的主要内容是图数据库的入门以及Neo4j的根底常识。
笔者近来在学习有关常识图谱Knowledge Graph的相关内容。
Neo4j是项目所需的一款功能强大的使用,特此来学习之,并记载于本文。
笔者是AI范畴的小白,作为初学者,文章中难免会有出错或许不恰当的部分,烦请读者朋友们指出(在以下任意渠道)。
个人博客:conqueror712.github.io/
知乎:www.zhihu.com/people/soeu…
Bilibili:space.bilibili.com/57089326
:/user/129787…
还有要阐明的是,笔者此前的文章存在一个问题是,篇幅过长,
这不只导致读者不愿意看,就连笔者自己再次翻阅的时分都只能利用Ctrl+F
才干找到我要找的内容。
故拆分之,便于阅览和检查,每篇文章控制在1.5k~3.5k
字之间。
注意:本文不是教程,仅仅个人学习的记载和心得,或许会对你有协助,主张配合官方文档一同学习!
官方文档链接:graphacademy.neo4j.com/courses/neo…
Neo4j – AuraDB入门:
入门部分会有五个板块:
- Create a database
- View online courses
- Start console tour
- Open Sample Guide
- More resources
首先进入网址:console.neo4j.io/?product=au…
咱们就暂时用免费版来学习,点击Start Here,随后会生成一个随机的初始暗码,就像这样:
随后咱们会修正这个暗码,这实在是太难记了!
能够看到,咱们已经创立成功了,它在欢迎咱们呢!
到此为止,都十分顺利,不过咱们马上就遇到了第一个难题:他居然引荐咱们先学四个课程再来玩这个,
那好吧,作为优秀的新时代新青年,咱们秉承磨刀不误砍柴工的精神,先去学一下这些课程。
官方告诉咱们,这四门课程总共需求6个小时才干学完,
没联系,俗语说的好,慢慢来才比较快,接下来咱们就进入课程的学习吧。
(已经学完了或许以为自己不需求学的读者能够直接跳到下一部分)
Neo4j – 根底常识:
这些课程都有官方的中文版教程,有能力的读者能够自行前往阅览,
这儿笔者给出自己的学习进程,以及一些在学习进程中的见解。
注意:与官方文档中重复的部分就不予记载了,查阅即可!
(文档链接仍是最上面的链接,咱们Start Here之后就有了)
以图的方法去考虑
关于概念:
七桥问题→图论的诞生:节点 + 边
现在看来,图是一种十分有用的东西,能够帮咱们建模和剖析数据,广泛使用于处理复杂问题上,包括路线查找、供给链剖析和实时引荐。
学到这儿,你会发现这个网站的教程居然还有讲堂小测!这真是太良知了,感动哭了
在常识图谱中,咱们常常听到”对象”,”实体”这样的名词,事实上,这都是”节点”的别名,它能够代表任何你想代表的事物。
而”联系”,也便是”边”,通常是动词。
联系是图数据库中最重要的元素。
关于图的遍历:
Neo4j
的Cypher
言语针对节点遍历进行了优化,因而边不会被屡次遍历,这对使用程序来说是一个巨大的性能提升。
Graphs are Everywhere:
MATCH (c:Category)-[:HAS_CHILD|HAS_PRODUCT*1..3]->(p:Product)
RETURN p.id, p.title, collect(c.name) AS categories
解说:
- 查找间隔类别节点最多三个联系远的产品节点
- 查询匹配到的产品节点的id和title特点,一同回来一个集合categories,其间包含了这些产品所属的一切类别的名称。
为什么引荐算法中常用图数据库?
因为图数据库的优势在于,需求遍历更小份额的图就能生成引荐。
你能够简略地从一个产品节点遍历购买该产品的用户,然后再遍历他们购买的后续产品。
不只如此,图和图数据库还能够用到方方面面,Neo4j Graphgist站点有许多示例数据模型。
特点图
哦!咱们大概终所以遇到了一个新的概念——特点图。
咱们能够运用两个额外的元从来为数据供给一些附加的上下文。
什么是特点图
标签
只需求一张图就能够解说清楚,这也是官方文档中给出的图:
看!那些黑框框里面的零个、一个或多个词便是标签。
特点
相同给出一张图,不过这或许就得多说两句了,
为节点添加特点,能够使其具体化。
特点是键值对的方法。
不需求为具有特定标签的每个节点都指定特点。 假如节点的特点不存在,则将其视为 null
。
边的类型和特点以及方向
不仅仅点,边(联系)也是有标签和特点的,只不过把”标签”换成了”类型”。
而且和点不同的是,Neo4j的每个联系必须有一个类型,
这不只完善了图的意义,还便于咱们对图进行部分遍历。
什么是部分遍历呢?就比如说咱们只关怀谁在哪工作,不关怀谁和谁成婚。
当然,假如是这样的话咱们或许需求进行多源遍历,这需求看情况。
关于联系的特点,这些能够指加权图中的权值,或许仅仅为联系供给额外的上下文。
除此之外,在Neo4j中,图的每个联系必须有方向。
不过,尽管方向是必需的,但能够在任一方向查询联系,或在查询时彻底忽略。
原生图的优势
接下来的内容或许有点陌生了,至少关于笔者这样的新手来说是这样的,
了解和学习或许会花费更多的时刻,
不过没联系,让咱们继续吧!
Neo4j是一个原生图数据库,这意味着从数据存储到查询言语的一切内容都是专门为遍历而设计的。
Neo4j契合ACID规范——业务中的一组修正将全部提交或失利。
无索引邻接IFA
提交数据库业务时,对联系的引证与联系开端和完毕处的节点一同存储。
因为每个节点都知道与其衔接的每个传入和传出联系,底层图引擎将简略地查询内存中的指针——这是计算机十分擅长的。
查询进程:
- 根据指定的锚点方案查询
- 运用索引来检索锚节点
- 依照指针检索所需的结果节点
与联系数据库访问相比,IFA 的优点是:
- 更少的索引查找
- 没有表扫描
- 减少数据重复
仍是不好了解?没联系,以下这个比如会协助到你!
假设你要规划一次游览,而且需求找到一个好的餐厅去享用美食。
你或许会在互联网上搜索各种餐厅的信息,而且想了解它们的菜单、方位、点评等信息。
假如这些信息存储在一个联系型数据库中,那么你或许需求进行多个查询来获取一切信息。
例如,你或许需求先查询餐厅表格,然后再查询菜单表格和谈论表格,最终将这些信息整合起来以得出你需求的信息。这种查询方法需求屡次查询和衔接多个表格,因而查询速度或许会比较慢。
相比之下,假如这些信息存储在一个图数据库中,那么你只需求进行一个查询,就能够得到一切相关的信息。
图数据库运用图的方法来存储数据,其间节点表明实体,边表明实体之间的联系。
例如,在图数据库中,你能够运用**一个节点表明餐厅,另一个节点表明菜单,运用一条边表明餐厅和菜单之间的联系。**这种查询方法只需求一次查询和一次遍历,因而查询速度会比较快!
从其他数据库到图数据库
随着联系数据库中记载数的添加,查询变得越来越慢。
图数据库中的查询时刻将与查询期间实践触及的数据巨细保持一致。
将联系视为一等公民也能够在开端时供给优势。
在图中建模联系比创立数据透视表来表明多对多联系更天然。
也便是说,总结起来便是一句话:
能够将联系模型实现为图模型,这样关于了解起来会更便利!
除此之外,键值存储和文档存储也是能够实现用图来提高性能的存储方法。
你的第一个图
电影图数据
这部分内容是一个图数据库的比如,协助了解上述常识,
这儿放一张图,以示实践使用中的图数据库是什么样子的:
具体的内容就不展开了,咱们能够自行前往检查。
或许有的读者会大失人望,还以为是要开端创立第一个项目了呢!
先别着急,还记得一开端官方教程中告诉咱们的吗?这刚刚是第一个根底,还有三个根底等着咱们呢!
先让咱们庆祝一下,咱们已经完成了第一部分的学习!
乃至给我颁发了一个证书 XD
Thanks for reading and see you next time!
本文正在参与 人工智能创作者扶持方案