图数据库neo4j的安装与使用

Posted by Weihao Zeng on March 28, 2021

2021-03-28-neo4j安装与使用

Neo4j是一个世界领先的、高性能的NOSQL开源图形数据库。 它是由Neo技术使用Java语言完全开发的。它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,该引擎具有成熟数据库的所有特性。

详细安装教程

https://www.jianshu.com/p/dc620ca59d19

neo4jjdk版本

https://blog.csdn.net/Zoooozz/article/details/108292034

neo4j命令说明

  • neo4j install-service 安装Neo4j在Windows系统上的服务。
  • neo4j uninstall-service 卸载Neo4j在Windows系统上的服务。
  • neo4j start 启动neo4j服务
  • neo4j stop 关闭neo4j服务
  • neo4j restart 重启neo4j服务
  • neo4j status 查看当前neo4j服务的状态

首次安装Neo4j需要先运行neo4j install-service命令将Neo4j服务添加为系统服务,然后再运行:neo4j start命令启动Neo4j

如果您想要将Neo4j从系统服务中卸载,只需要执行:neo4j uninstall-service命令即可。

neo4j简单使用

https://zhuanlan.zhihu.com/p/88745411

  1. 首先,我们删除数据库中以往的图,确保一个空白的环境进行操作:
1
MATCH (n) DETACH DELETE n

这里,MATCH匹配操作,而小括号()代表一个节点node(可理解为括号类似一个圆形),括号里面的n为标识符

  1. 接着,我们创建一个人物节点:
1
CREATE (n:Person {name:'John'}) RETURN n

CREATE创建操作,Person标签,代表节点的类型。花括号{}代表节点的属性,属性类似Python的字典。这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,属性值是John。

如图所示,在Neo4J的界面上可以看到创建成功的节点。

img

  1. 我们继续来创建更多的人物节点,并分别命名:
1
2
3
4
5
CREATE (n:Person {name:'Sally'}) RETURN n
CREATE (n:Person {name:'Steve'}) RETURN n
CREATE (n:Person {name:'Mike'}) RETURN n
CREATE (n:Person {name:'Liz'}) RETURN n
CREATE (n:Person {name:'Shawn'}) RETURN n

如图所示,6个人物节点创建成功

img

  1. 接下来创建地区节点
1
2
3
4
5
CREATE (n:Location {city:'Miami', state:'FL'})
CREATE (n:Location {city:'Boston', state:'MA'})
CREATE (n:Location {city:'Lynn', state:'MA'})
CREATE (n:Location {city:'Portland', state:'ME'})
CREATE (n:Location {city:'San Francisco', state:'CA'})

可以看到,节点类型为Location,属性包括city和state。

如图所示,共有6个人物节点、5个地区节点,Neo4J贴心地使用不用的颜色来表示不同类型的节点。

img

  1. 接下来创建关系
1
2
3
MATCH (a:Person {name:'Liz'}), 
      (b:Person {name:'Mike'}) 
MERGE (a)-[:FRIENDS]->(b)

这里的方括号[]即为关系,FRIENDS为关系的类型。注意这里的箭头-->是有方向的,表示是从a到b的关系。 如图,Liz和Mike之间建立了FRIENDS关系,通过Neo4J的可视化很明显的可以看出:

img

  1. 关系也可以增加属性
1
2
3
MATCH (a:Person {name:'Shawn'}), 
      (b:Person {name:'Sally'}) 
MERGE (a)-[:FRIENDS {since:2001}]->(b)

在关系中,同样的使用花括号{}来增加关系的属性,也是类似Python的字典,这里给FRIENDS关系增加了since属性,属性值为2001,表示他们建立朋友关系的时间。

  1. 接下来增加更多的关系
1
2
3
4
MATCH (a:Person {name:'Shawn'}), (b:Person {name:'John'}) MERGE (a)-[:FRIENDS {since:2012}]->(b)
MATCH (a:Person {name:'Mike'}), (b:Person {name:'Shawn'}) MERGE (a)-[:FRIENDS {since:2006}]->(b)
MATCH (a:Person {name:'Sally'}), (b:Person {name:'Steve'}) MERGE (a)-[:FRIENDS {since:2006}]->(b)
MATCH (a:Person {name:'Liz'}), (b:Person {name:'John'}) MERGE (a)-[:MARRIED {since:1998}]->(b)

如图,人物关系图已建立好,有点图谱的意思了吧?

img

  1. 然后,我们需要建立不同类型节点之间的关系-人物和地点的关系
1
MATCH (a:Person {name:'John'}), (b:Location {city:'Boston'}) MERGE (a)-[:BORN_IN {year:1978}]->(b)

这里的关系是BORN_IN,表示出生地,同样有一个属性,表示出生年份。

如图,在人物节点和地区节点之间,人物出生地关系已建立好。

img

py2neo使用教程

Py2neoNeo4j数据库的Python驱动

https://www.jianshu.com/p/febe8a248582

链接

默认的端口号就是7474,最新的链接方式是传入用户名和密码的元组

1
2
from py2neo import Graph,Node,Relationship
graph = Graph("http://localhost:7474",auth=("neo4j","password"))

创建节点Node和关系Relationship

1
2
3
4
a = Node("Person", name="Alice")
b = Node("Person", name="Bob")
ab = Relationship(a, "KNOWS", b)
graph.create(ab)

批处理:

对于大量的插入一般是很费时的,首先我们可以使用事务,加快一定速度,而插入的方法一样重要,我们很多时候是遍历一个文件然后生成图,例子中我们生成每个Node后,先把他们放入一个List中,再变为Subgraph实例,然后再create(),耗时比一条条插入至少快10倍以上

1
2
3
4
5
6
7
8
9
10
tx = graph.begin()
nodes=[]
for line in lineLists:
    oneNode = Node()
    ........
    #这里的循环,一般是把文件的数据存入node中
    nodes.append(oneNode)
nodes=neo.Subgraph(nodes)
tx.create(nodes)
tx.commit()

前面我们说了关系的创建,如果在node存进去后,再通过py2neo层面的“查找node,create关系”这样的效率是很低的,时间主要花在通过”reference Id”去一个个去查找对应的node,然后再和这个node建立关系,这里强烈推荐使用原生语句,效率不是一般的高

1
2
3
4
#假定我们已经把两种node存进去了,label分别是Post和User,现在需要在他们间建立某关系
graph.run("MATCH (p:Post),(u:User) \
                WHERE p.OwnerUserId = u.Id \
                CREATE (u)-[:Own]->(p)")