官网:https://neo4j.com/
一、简介
Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。
它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。
Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。
程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
优点:
- 数据的插入,查询操作很直观,不用再像之前要考虑各个表之间的关系。
- 提供的图搜索和图遍历方法很方便,速度也是比较快的。
缺点:
- 插入速度慢。
- 超大节点。当有一个节点的边非常多时(常见于大V),有关这个节点的操作的速度将大大下降。
- 提高数据库速度的常用方法就是多分配内存。
Neo4j适合存储”修改较少,查询较多,没有超大节点“的图数据。
二、安装教程
以win10为例:
下载地址:https://neo4j.com/download-center/
1.下载并解压
2.配置环境变量
3.验证
4.打开页面:http://localhost:7474/browser/
注意:1.第一次登录时密码为neo4j,登录后设置新密码
2.如果想通过ip地址访问,需要修改conf/neo4j.conf文件
三、常用语句
新增:
CREATE (emp:Employee) CREATE(节点名:标签名)
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" }) 创建一个带有属性的标签名
CREATE (fb1:FaceBookProfile1)-[like:LIKES]→(fb2:FaceBookProfile2) 新增关系
查询:
MATCH (n:`hx/sor_config`) RETURN n LIMIT 25 查询sor_config中id前25
MATCH (dept:Dept) RETURN dept.deptno 查询Dept
MATCH (n:`hx/sor_config`) WHERE n.name="ruleset3" RETURN n 条件查询
MATCH (p1:`hx/sor_config`{name:"手术程序"}),(p2:`hx/sor_config`{name:"structured_situation"}), p=shortestpath((p1)-[*..10]->(p2)) RETURN p 查询p1到p2的最短路径
MATCH (n:`hx/sor_config`{name:"手术名称"})-[r*..1]-(m) return n,r,m 查询某个节点的直接关系的其他节点
删除:
MATCH (e: Employee) DELETE e 删除标签
match (n:FaceBookProfile1)-[r]-(m:FaceBookProfile2) delete r 删除关系
MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r 清空数据库
MATCH (n:`hx/sor_config`{name:"有无袖式成型切除"}) DETACH DELETE n 删除某一节点及其所有关系
修改:
MATCH (n:Empty) SET n.atm_pin = 358 RETURN n
四、python代码
#coding:utf-8
from py2neo import Graph,Node,Relationship
##连接neo4j数据库,输入地址、用户名、密码
graph = Graph('http://localhost:7474',username='neo4j',password='123456')
##创建结点
test_node_1 = Node('ru_yi_zhuan',name='皇帝')
test_node_2 = Node('ru_yi_zhuan',name='皇后')
test_node_3 = Node('ru_yi_zhuan',name='公主')
graph.create(test_node_1)
graph.create(test_node_2)
graph.create(test_node_3)
##创建关系
#分别建立了test_node_1指向test_node_2和test_node_2指向test_node_1两条关系,关系的类型为"丈夫、妻子",两条关系都有属性count,且值为1。
node_1_zhangfu_node_1 = Relationship(test_node_1,'丈夫',test_node_2)
node_1_zhangfu_node_1['count'] = 1
node_2_qizi_node_1 = Relationship(test_node_2,'妻子',test_node_1)
node_2_munv_node_1 = Relationship(test_node_2,'母女',test_node_3)
node_2_qizi_node_1['count'] = 1
graph.create(node_1_zhangfu_node_1)
graph.create(node_2_qizi_node_1)
graph.create(node_2_munv_node_1)