写在前面(废话篇):
填个坑,系统全部做完做一个毕设专题。
这篇文章在我的草稿箱里蹲了两个月。最近毕设答辩结束,有角度的时间来填个坑。
因为自己懒因为本科没有学过数据库课程(学院不让我们专业修这门课),所以在做毕业设计涉及数据库的内容一概不知。研究能力较差的我重新学一遍数据库实在来不及,就选择了这上手简单,增删改查一应俱的可视化图形数据库。
一、Neo4j可视化图形数据库简介
百度百科上对于neo4j解释如下图。说的很官方是不是?看不懂是不是?
通俗的来说就是这是一个不需要你自己设计的数据库,通过采用结构化设计方式,把各种信息存储在图形中的一个个点上,而不是传统意义上的表格中。
同时展示方面采用图的简单直观可视化效果。相对于冷冰冰的表格数据,图形显得更加有血有肉。
二、下载与安装
neo4j下载
官网下载比较慢,是我电脑的问题吗?
或者直接把安装包上传资源中(点我传送)(更新:这个解压包有问题,直接从百度网盘下载吧!)
不想给楼主贡献金币的话可以点我从百度网盘中下载。(提取码:ruat,失效的话可以联系我)
下载解压之后,傻瓜式安装。
注意:一定要找一个简单合适的文件夹存入。否则后期启动neo4j时,在cmd打开文件夹都需要多点几下。例如,我存在 D:\neo4j 文件夹下
二、配置与使用
因为neo4j是一站式安装,所以在我印象中并没有设置什么环境变量。
安装完成之后打开cmd,进入到安装neo4j文件夹bin目录下。以自己的为例进入到 D:\neo4j\neo4j-community-3.5.5\bin 之后输入以下内容如图。
启动neo4jcmd中提示“Neo4j service started”,就代表我们已经把neo4j启动完成。
可以打开浏览器输入
http://localhost:7474/browser/
进入到neo4j数据库中。
neo4j界面准备完成之后可以进入到下一步。
三、使用方法
知己知彼,方能百战百胜
前期工作做好之后,我们就要开始慢慢了解怎么使用他。
科普内容(非计算机专业建议看一下):
计算机专业离散必修课中有很重要的一个知识点:图
定义: 图是由顶点的有穷非空集合和顶点之间边的集合组成, 通常表示为: G(V,E), 其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。
不喜欢官方说法的同学,我给降维到猫猫水平解释下。
图的定义图片中一共有三个点(V1、V2、V3)和两条边(E1、E2),整体看做为一个图G。这个图是由三个点和两条边构成。以上就可以看做一个简单图的构成。
如果把V1、V2、V3比作人物的话,E1、E2就可以当做人物间的联系。
V1:大雄
V2:静香
V3:哆啦A梦
E1:好朋友
E2:同学(未来可妻)
那么,我们就可以得到以下这种关系。
图的实例化上面这样的图大家是不是很清晰的了解到这三个人物之间的关系呢?
如果无感的,那下面这种感觉对比一下。哪个图片更加直观有效。
因为以上数据太少,可能比较不明显。
来一个比较极端的,以下表格有三万多条数据,光看表格是在费劲。
使用图形式的来展示人物之间的关系,是不是就相对直观很多。
举例1以下内容以三国举例。
在neo4j页面的执行框中写入Cypher语句,不熟悉这种语言的同学可以参考以下模板举一反三。
1、创建节点(增)
1.1 创建单个节点
create (:person{name:"孙权"})
这条语句直接创建了孙权节点,即上图中的圈圈。
建立节点1.2 创建两个节点
与之相对应的是同时创建两个节点并建立两者关系
create (:person{name:"周瑜",age:25})-[:夫妻]->(:person{name:"小乔",age:20});
image.png
建立成功。
备注:
从上述语句中,给读者解释一下。
( ):中间的内容代表节点
{ }:中间的内容代表属性
[ ]:中间内容代表关系
以上均是英文字符。
2、查找节点(查)
刚刚建立的节点怎么样才能找到呢?
return (:person{name:"周瑜"})-->();
如图
建立节点这样我们就能查找到周瑜节点,同时数据库中也会自动匹配出与之建立关系的节点。
如果想查多重层数的关系可以自行深入学习,这里不做过于深入的探讨。
3、匹配关系(增、找)
什么叫关系?得先有两个实体,两种实体之间存在着某种联系可以称为关系。虹猫和蓝兔有关系,我和三舅妈的邻居表弟同学妈妈的三姨母的女儿有联系吗?估计没有。
同样,想要建立联系,首先要建立两个节点才有可能建立关系。
3.1 同时建立节点和关系
这个写法见本文1.2
3.2 直接匹配关系
这种情况是建立在已有的两个节点。
此时数据库已经有孙权,周瑜,小乔的关系了。我可以匹配孙权和周瑜的关系,没问题。但是我要是想建立孙权和大乔的关系可以吗?
当然不行!!! 因为数据库中还没有建立大乔的节点,此时建立关系,会直接报错。
match (a:hperson{name:"孙权"}) match (b:person{name:"周瑜"}) create (a)-[r:基友]->(b) return r;
匹配节点
此时在查找周瑜的节点:
查找节点因为我在周瑜与孙权建立了双向关系,
match (a:hperson{name:"孙权"}) match (b:person{name:"周瑜"}) create (a)<-[r:基友]-(b) return r;
仔细看看这句话和上一条语句有什么不同?
此时已经有了三个节点和两条关系。
试错:如果硬把大乔和孙权建立关系,数据库会给出以下提示。
报错四、高级用法
以上内容均是小打小闹,手动建立节点和关系也太过儿戏。
现代的数据以万为计数单位都算是小的不能再小了。
现在有一个表格的数据,里面包含着几十万条关系,甚至百万千万,手动建立匹配就有点说不过去了吧!
现在介绍一下手动和自动两种方式导入数据库中。
4.1 手动导入
首先我们规定下数据存储格式。
以csv文件为例。我们需要一个表格包含人物节点的内容(nodes.csv),另一个表格包含人物间关系的内容(relations.csv)。
表格来源gayhub,初学时这篇文章对我帮助很大,感谢大佬分享。
节点表格(nodes.csv):
节点格式关系表格(relations.csv):
关系格式把两个csv文件放入 D:\neo4j\neo4j-community-3.5.5\import 目录下,之后在neo4j页面执行框内输入
LOAD CSV WITH HEADERS FROM 'file:///nodes.csv' AS data CREATE (:star{starname:data.name, starid:data.id});
LOAD CSV WITH HEADERS FROM "file:///relations.csv" AS relations
MATCH (entity1:star{starname:relations.subject}) , (entity2:star{starname:relations.object})
CREATE (entity1)-[:relation{relation: relations.relation}]->(entity2)
然后所有数据瞬间导入数据库中,速度就是那么快。
4.2 自动导入
这个需要有好几种方法,埋个坑,有兴趣了解的同学可以留言评论或私信我都可。
最后上个简单的效果图吧。
效果图1 效果图2收工,洗洗睡去了。
对了, 感兴趣的小伙伴可以关注我的个人公众号:小惑有观察。现在开始恢复更新。
[图片上传失败...(image-3140a4-1591974513696)]
网友评论