图数据库Neo4j简介


参考:

https://zhuanlan.zhihu.com/p/88745411?utm_source=wechat_session

在日常工作中,关系数据库mysql、Oracle等可以解决大部分问题。但对于某些特殊的场合,他们却无能为力。

比如对于一些我们并不关注对象的属性,而是更关注他们之间的关系的时候。关系型数据库就变得无能无力了。

在我经历的一些项目中,用到了非常多的数据表,他们之间有复杂的关系,经过多层的筛选、处理、聚合才得到最终的结果表。

当有时候你发现一张结果表可能有问题时,你可能会考虑它是从哪里来的,错误的源头在哪里。

然而,你发现并没有一个很好的工具能够快速得到你想要的结果。

这种情况下,也许你可以考虑一下图数据库——Neo4j

Neo4j是一款成熟的图数据库产品。他提供了免费的社区版供大家学习。

有兴趣的东西可以去这个地址下载。

一、基本概念

label:标签,对应面向对象编程里的类class

node:节点,是label的实例,也就是对象,node后面的大括号里放置节点的属性

relationship:关系,是节点与节点之间的关系,可以自定义

二、基本操作

#创建节点
CREATE (a:Table {name:'ods_ebp_data_service'}) RETURN a
create(p:PERSON {name:"Mask",age:30,heigh:180,weight:80})-[r:SON_OF]->(f:PERSON {name:"OLD_Mask",age:55,heigh:160,weight:60}) return p,r,f
#查询单个节点
MATCH (a:Table {name:'ebp_data_service'}) RETURN a
MATCH (a:Table) WHERE a.name STARTS WITH 'ads' RETURN a
MATCH (a:Movie) WHERE a.released > 1990 AND a.released < 2000 RETURN a
#查询节点和关系
MATCH (a:Table {name:'ebp_data_service'})-[:IMPORT_FROM]->(m:Table) RETURN a,m
MATCH (a:Table {name:'ads_ebp_data_service'})<-[:EXPORT_TO]-(m:Table) RETURN a,m
MATCH (a:Person {name:'Tom Hanks'})-[:ACTED_IN]->(m:Movie) RETURN a,m
MATCH (m:Movie {title:'Cloud Atlas'})<-[:DIRECTED]-(d:Person) RETURN d
#查询节点及所有关系节点
MATCH (a:Table)-[relatedTo]-(b:Table ) 
RETURN a.name, type(relatedTo), b.name
#查询关系
match ()-[r:IMPORT——FROM]-() return startnode(r).name as s, endnode(r).name as e ,type(r) as rtype
match (a:Table {name:"dwd_ebp_data_service"})-[r]-(b) return a,r,b
#设置关系1
MATCH (a:Table {name:'ebp_data_service'}), (b:Table {name:'ods_ebp_data_service'})
MERGE (a)-[r:IMPORT_FROM]->(b) 
RETURN a,r,b
#设置关系2
MATCH (a:Person {name:'Brie Larson'}), (b:Movie {title:'Captain Marvel'})
MERGE (a)-[r:ACTED_IN]->(b) SET r.roles = ['Carol Danvers']
RETURN a,r,b
#设置关系
MATCH (a:Person {name:'Liz'}), (b:Person {name:'Mike'}) MERGE (a)-[:FRIENDS]->(b)
MATCH (a:Person {name:'Shawn'}), (b:Person {name:'Sally'}) MERGE (a)-[:FRIENDS {since:2001}]->(b)
#修改节点,给节点添加或修改属性
MERGE (a:Table {name:'ebp_data_service'}) 
ON MATCH SET a.id= 109
RETURN a
MERGE (a:Table {name:'ebp_data_service'}) 
ON MATCH SET a.name= 'dwd_ebp_data_service'
RETURN a
#删除节点
MATCH (a:Person {name:'Brie Larson'}) DETACH DELETE a
#删除节点及关系
match (p:Person {name:"lisi"})-[r]-() delete p,r
#聚合函数
match(p:Person) return p.name as name,p.age as age,count(p) as count,max(p.age) as maxAge,min(p.age) as minAge,avg(p.age) as avgAge,sum(p.age) as sumAge

 三、界面展示

下面我查询了表a以及所有跟a有关系的表b,同时展示他们之间的关系,是不是很强大!