Neo4j图数据库安装和简单介绍

全文以“农业知识图谱”为例进行介绍

下载地址

https://neo4j.com/download/other-releases/

安装教程:

https://blog.csdn.net/lihuaqinqwe/article/details/80314895

csv数据存储格式

目录:/work/apps/neo4j-community-3.4.1/import

 

总共6个csv表,其中三个表存储节点信息,三个表存储两个节点之间的关系的信息

1.存储节点:

  • hudong_pedia.csv ,存储节点的属性信息

    {“title”,"url","image","openTypeList","detail","baseInfoKeyList",""}
    {   菊糖,"http://www.baike.com/wiki/菊糖","http://a0.att.hudong.com/72/85/20200000013920144736851207227_s.jpg","健康科学##分子生物学##化学品##有机物##科学##自然科学##药品##药学名词##药物中文名称列表","[药理作用] 诊断试剂 人体内不含菊糖,静注后,不被机体分解、结合、利用和破坏,经肾小球滤过,通过测定血中和尿中的菊糖含量,可以准确计算肾小球的滤过率。菊糖广泛存在于植物组织中,约有3.6万种植物中含有菊糖,尤其是菊芋、菊苣块根中含有丰富的菊糖[6,8]。菊芋(Jerusalem artichoke)又名洋姜,多年生草本植物,在我国栽种广泛,其适应性广、耐贫瘠、产量高、易种植,一般亩产菊芋块茎为2 000~4 000 kg,菊芋块茎除水分外,还含有15%~20%的菊糖,是加工生产菊糖及其制品的良好原料。","中文名:","菊糖"}

     

    title
    url
    image
    openTypeList
    detail
    baseInfoKeyList
    baseInfoValueList
     
            
            
            
            

     

     

  • hudong_pedia2.csv    存储节点的属性信息 

    title,"url","image","openTypeList","detail","baseInfoKeyList","baseInfoValueList")
    

     

  • new_node.csv          (存储节点的属性信息,只有title,label)

2.存储关系:

  • wikidata_relation.csv   (存储关系,格式:节点,关系,节点 ,包括HudongItem1,relation,HudongItem2)     hudong 和hudong本身节点的关系
  • wikidata_relation2.csv    (存储关系,格式:节点,关系,节点 ,包括HudongItem,relation,NewNode)          hudong 和newnode的关系
  • attributes.csv    (存储关系,格式:节点,关系,节点 ,包括Entity,AttributeName,Attribute)                          存入的所有节点之间的关系,有部分节点可能和其他节点没有关系

注意:存储关系的时候,关系两边的节点是从已经存入的节点中取,也就是第一项和第三项是已经存入的节点,第二项是两节之间的关系

举例:

hudong_pedia.csv ,hudong_pedia2.csv :

title,"url","image","openTypeList","detail","baseInfoKeyList","baseInfoValueList"
 


new_node.csv:

title,lable 
药物治疗,newNode
膳食纤维,newNode
Boven Merwede,newNode
亚美尼亚苏维埃百科全书,newNode


以上是节点

wikidata_relation.csv:

HudongItem1,relation,HudongItem2
菊糖,instance of,化合物
菊糖,instance of,多糖
瓦尔,instance of,河流
菊糖,subclass of,食物

wikidata_relation2.csv

HudongItem,relation,NewNode
菊糖,instance of,药物治疗
菊糖,subclass of,膳食纤维
瓦尔,mouth of the watercourse,Boven Merwede
菊糖,described by source,亚美尼亚苏维埃百科全书


attributes.csv:

Entity,AttributeName,Attribute
密度板,别名,纤维板 
葡萄蔓枯病,主要为害部位,枝蔓

以上是关系

节点举例:菊糖,药物治疗,膳食纤维,化合物

关系举例:

instance of
subclass of
country
has part
diplomatic relation
taxon rank
occupation
place of death
described by source
别名
主要为害部位

 

如:

密度板是节点,纤维板是节点,两个节点之间的关系是别名

中国(节点)和共产主义国家(节点)是instance of的关系

菊糖,instance of,化合物
菊糖,instance of,多糖
Welch,instance of,城市
瓦尔,instance of,河流


菊糖,subclass of,食物
音源,subclass of,机械
小型计算机,subclass of,电子计算机


纳木错,country,中华人民共和国
温县,country,中华人民共和国
Satsuma,country,美国
波河,country,意大利
Bishop,country,美国


甘油醛,has part,碳
甘油醛,has part,氧
氟烷,has part,碳
地球,has part,地球大气层
地球,has part,地球表面
地球,has part,生物圈
地球,has part,水圈


赞比亚,diplomatic relation,南非
赞比亚,diplomatic relation,美国
赞比亚,diplomatic relation,埃及
赞比亚,diplomatic relation,埃塞俄比亚


Vetch,taxon rank,种
碧玉兰,taxon rank,种
短颌鲚,taxon rank,种


荷马,occupation,诗人
克里克,occupation,生物学家
李渊,occupation,皇帝
Christ,occupation,木匠

吴起,place of death,楚国

克雷洛夫,place of death,圣彼得堡

赵孟頫,place of death,北京市

王维,place of death,西安市

乔木,place of death,北京市

将csv文件导入neo4j

1.csv节点文件的导入

// 将hudong_pedia.csv 导入
LOAD CSV WITH HEADERS FROM "file:///hudong_pedia.csv" AS line 
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})

// 新增了hudong_pedia2.csv
LOAD CSV WITH HEADERS FROM "file:///hudong_pedia2.csv" AS line 
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})

2.csv关系文件的导入

// 导入新的节点
LOAD CSV WITH HEADERS FROM "file:///new_node.csv" AS line
CREATE (:NewNode { title: line.title })

导入完成后:对titile属性添加UNIQUE(唯一约束/索引)

// 创建索引
CREATE CONSTRAINT ON (c:HudongItem)
ASSERT c.title IS UNIQUE
//添加索引
CREATE CONSTRAINT ON (c:NewNode)
ASSERT c.title IS UNIQUE

简单的查询(语言cypher)

MATCH命令用于:

  • 从数据库获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据

1.查询节点属性

例:match (entity:HudongItem) return entity 

也可写成match(entity:HudongItem)return entity .title,entity.url,entity.image

entity是节点名,HudongItem是节点标签名,返回节点的全部属性

2.查询关系

问题:无籽西瓜的父类是什么?

例:match(entity1:HudongItem{title:"无籽西瓜"})-[r1:RELATION{type:"subclass of"}]->(F)  return r1,entity1

其中RELATION是关系,r1是关系标签,F是变量名,也就是需要查询的节点

意思是查询无籽西瓜的关系为subclass of的节点是什么

3.查询多重关系

问题:木火的国家的首都是什么?

例:match(entity1:HudongItem{title:"木火"})-[r1:RELATION{type:"国籍"}]-()-[r2:RELATION{type:"instance of"}]->(F) return entity1,r1,r2,F limit 10

查询语句包含三个节点,两个关系,先查木火的国家是中国,再查中国的首都是北京

4.带条件的查询

两种类型:“=”,in

例:match(entity1:HudongItem) where entity1.title ="西瓜" return entity1

例:match(entity1:HudongItem) where entity1.title in ["西瓜","专用车"] return entity1

查询西瓜和专用车的属性

5.限制返回的结果数量

limit的使用

例:match (entity:HudongItem)return entity limit 10

和关系数据库相比的优势

neo4j:

优点:
1.更快的数据库操作。当然,有一个前提条件,那就是数据量较大,在MySql中存储的话需要许多表,并且表之间联系较多(即有不少的操作需要join表)。
2.数据更直观,相应的SQL语句也更好写(Neo4j使用Cypher语言,与传统SQL有很大不同)。
3.更灵活。不管有什么新的数据需要存储,都是一律的节点和边,只需要考虑节点属性和边属性。而MySql中即意味着新的表,还要考虑和其他表的关系。
4.数据库操作的速度并不会随着数据库的增大有明显的降低。这得益于Neo4j特殊的数据存储结构和专门优化的图算法。

 

(1)闪电般的读/写速度,无与伦比的高性能表现。
(2)非结构化数据存储方式,在数据库设计上具有很大的灵活性。
(3)能很好地适应需求变化,并适合使用敏捷开发方法。
(4)很容易使用,可以用嵌入式、服务器模式、分布式模式等方式来使用数据库。
(5)使用简单框图就可以设计数据模型,方便建模。
(6)图数据的结构特点可以提供更多更优秀的算法设计。
(7)完全支持ACID完整的事务管理特性
(8)提供分布式高可用模式,可以支持大规模的数据增长。
(9)数据库安全可靠,可以实时备份数据,很方便恢复数据。
(10)图的数据结构直观而形象地表现了现实世界的应用场景

缺点:

 1.超大节点。当有一个节点的边非常多时(常见于大V),有关这个节点的操作的速度将大大下降。这个问题很早就有了,官方也说过会处理,然而现在仍然不能让人满意。

 2.提高数据库速度的常用方法就是多分配内存,然而看了官方操作手册,貌似无法直接设置数据库内存占用量,而是需要计算后为其”预留“内存…

 

关系型数据库:

如果要表现一个部门的用户,按照第三范式的设计要求,至少需要三张表格来表示,即部门表、用户表和部门-用户关系表,这样实体和关系就被人为地隔开了,它们是完全分离的,存在于不同的表中,这就给查询带来了一定的难度,从而影响了查询的性能。

 

鉴于其明显的优缺点,Neo4j适合存储”修改较少,查询较多,没有超大节点“的图数据。

通常来讲,对于10亿节点以下规模的图谱来说Neo4j已经足够了。

 

 

 

王维,place of death,西安市

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值