图形数据库---neo4j

官网:https://neo4j.com/

一、简介

Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。

它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。

Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。

程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

优点:

  1. 数据的插入,查询操作很直观,不用再像之前要考虑各个表之间的关系。
  2. 提供的图搜索和图遍历方法很方便,速度也是比较快的。

缺点:

  1. 插入速度慢。
  2. 超大节点。当有一个节点的边非常多时(常见于大V),有关这个节点的操作的速度将大大下降。
  3. 提高数据库速度的常用方法就是多分配内存。

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)

猜你喜欢

转载自blog.csdn.net/qq_33283652/article/details/88658024