图数据库Neo4j的安装与使用教程(win&Linux)

什么是Neo4j

图形数据库(Graph Database)是NoSQL数据库家族中特殊的存在,用于存储丰富的关系数据,Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以由一个或多个属性。Neo4j创建的图是用顶点和边构建一个有向图,其查询语言cypher已经成为事实上的标准。

关系型数据库只对单个Join操作进行优化查询,而多重Join操作查询的性能显著下降。图形数据库适合查询关系数据,由于图形遍历的局部性,不管图形中由多少节点和关系,根据遍历规则,Neo4j只访问与遍历相关的节点,不受到总数据集大小的影响,从而保持期待的性能;相应地,遍历的节点越多,遍历速度越慢,但是变慢是线性的,这使得图形数据库不适合做海量数据统计分析。对与存在大量丰富关系的数据,遍历的性能不受图形数据量大小的影响,这使得Neo4j成为解决图形问题的理想数据库。

Windows安装Neo4j社区版

前提条件:jdk环境
官网:https://neo4j.com/
下载地址:https://neo4j.com/download-center/
普通的业务需求用社区版即可,企业版按年收费几十万美元。。。

图数据库Neo4j的安装与使用教程(win&Linux)_第1张图片
在这里插入图片描述
下载版本:neo4j-community-4.1.0-windows.zip
解压,默认情况下,不需要进行任意配置,就可以启动服务器。
说明几点关于这个文件:

  1. 核心数据文件的位置data/graph.db
  2. 安全验证,默认是启用的

网络连接配置
Neo4j支持三种网络协议(Protocol),分别是Bolt,HTTP和HTTPS,默认的连接器配置有三种,为了使用这三个端口,需要在Windows防火墙中创建Inbound Rules,允许通过端口7687,7474和7473访问本机。

监听地址
要想通过网络远程访问Neo4j数据库,需要修改监听地址为 0.0.0.0,这样设置之后,就能允许远程主机的访问。

# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
dbms.default_listen_address=0.0.0.0

windows 需要添加防火墙过滤,你需要设置入站规则以及出站规则的7474端口和7687端口。

启动Neo4j程序
进入bin目录

neo4j.bat console

把Neo4j安装为服务

bin\neo4j install-service
bin\neo4j uninstall-service
bin\neo4j start
bin\neo4j stop
bin\neo4j restart
bin\neo4j status

图数据库Neo4j的安装与使用教程(win&Linux)_第2张图片
Neo4j集成的浏览器

地址:http://localhost:7474/

默认的host是bolt://localhost:7687,默认的用户是neo4j,其默认的密码是:neo4j,第一次成功登陆到Neo4j服务器之后,需要重置密码。neo4j@12345
图数据库Neo4j的安装与使用教程(win&Linux)_第3张图片
访问Graph Database需要输入身份验证,Host是Bolt协议标识的主机。
图数据库Neo4j的安装与使用教程(win&Linux)_第4张图片

创建节点和关系

需要学习一点Cypher语法

Docker安装Neo4j

docker pull neo4j
docker run --name neo4j -it -d -p 7474:7474 -p 7687:7687 neo4j

基本语法

基础知识
图是一组节点和连接这些节点的关系。
图形数据存储在节点和关系在属性的形式,属性是键值对表示数据。
图形是一组节点和连接这些节点的关系, 图形以属性的形式将数据存储在节点和关系中, 属性是用于表示数据的键值对。
在图形理论中,我们可以表示一个带有圆的节点,节点之间的关系用一个箭头标记表示。

Neo4j图数据库主要有以下构建块

  1. 节点
  2. 属性
  3. 关系
  4. 标签
  5. 数据浏览器

CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。

创建节点和管理

neo4j默认有两个库,system和neo4j。社区版不支持多数据创建,此处就跳过了。

1. 创建节点

CREATE(dev:Dev{id:1,name:"小刚"})
CREATE(dev:Dev{id:2,name:"小明"})
CREATE(dev:Dev{id:3,name:"小梁"})
CREATE(dev:Dev{id:4,name:"小红"})

2. 查询match
match要和return一起使用

MATCH(dev:Dev) RETURN dev.id,dev.name

3. 删除

  1. delete 删除节点和关系
  2. remove 移除属性
match(dev:Dev) delete dev
match(dev{id:5}) remove dev.name return dev

图数据库Neo4j的安装与使用教程(win&Linux)_第5张图片

MATCH (dev: Dev) DELETE dev

节点关系

创建2个节点,人员和电影,关系为观看

UNWIND [{
     id:1,name:"张三丰"},{
     id:2,name:"赵敏"},{
     id:3,name:"张无忌"}] as row
CREATE (u:User)
SET u.id = row.id, u.name = row.name
###################################
UNWIND [{
     id:1,title:"泰坦尼克号"},{
     id:2,title:"拯救大兵瑞恩"}] as row
CREATE (f:Film)
SET f.id = row.id, f.title = row.title

WHERE

MATCH (u:User) 
WHERE u.name = '张三丰' OR u.name = '张无忌'
RETURN u

创建关系

不同节点之间关系

MATCH (u:User),(f:Film) 
WHERE u.id = 1 AND f.id= 1
CREATE (u)-[r:观看]->(f) 
RETURN r

相同节点之间关系

MATCH (u:User),(x:User) 
WHERE u.id = 1 AND x.id= 3
CREATE (u)-[r:师徒]->(x) 
RETURN r
## 双向关系
MATCH (u:User),(x:User) 
WHERE u.id = 1 AND x.id= 3
CREATE (x)-[r:师徒]->(u) 
RETURN r

图数据库Neo4j的安装与使用教程(win&Linux)_第6张图片
现在先改下师徒关系,改为师傅和徒弟双向关系。

MATCH (n:User {id:1})-[r:师徒]->(m:User {id:3})
CREATE (n)-[r2:师傅]->(m)
SET r2 = r
WITH r
DELETE r

MATCH (n:User {id:3})-[r:师徒]->(m:User {id:1})
CREATE (n)-[r2:徒弟]->(m)
SET r2 = r
WITH r
DELETE r

图数据库Neo4j的安装与使用教程(win&Linux)_第7张图片
删除关系

match(p1:Profile1)-[r:LIKES]->(p2:Profile2) delete r

你可能感兴趣的:(数据库,数据库,neo4j)