neo4j图数据库与cypher基础

本文详细介绍了Neo4j的基础概念,包括数据模型的图论基础、构建元素(节点、属性、关系、标签和数据浏览器),以及如何通过CQL进行环境搭建、命令操作和数据管理。涵盖了安装、CQL语句、索引与约束等内容,适合初学者快速上手。
摘要由CSDN通过智能技术生成

目录

一、数据模型基础

1.1 图论基础

1.2 属性图模型

二、Neo4j的构建元素

2.1 节点

2.2 属性

2.3 关系

2.4 标签

2.5 Neo4j Browser

三、环境搭建

3.1 安装neo4j

3.2 docker按钻过neo4j

四、CQL使用

4.1 简介

4.2 常用命令

4.2.1 CREATE

4.2.2 RETURN 返回

4.2.3 WHERE子句

4.2.4 DELETE删除

4.2.5 REMOVE 删除

4.2.6 SET子句

4.2.7 ORDER BY 排序

4.2.8 UNION子句

4.2.9 LIMIT和SKIP子句

4.2.10 NULL 值

4.2.11 IN操作符

4.2.12 INDEX 索引

4.2.13 UNIQUE约束

4.2.14 DISTINCE 

4.3 常用函数

4.3.2 字符串函数

4.3.3 AGGREGATION聚合

4.3.4 关系函数

五、neo4j-admin的使用

5.1 备份

5.2 还原


一、数据模型基础

1.1 图论基础

图是一组节点和连接这些节点的关系,图形以属性的形式将数据存储在节点和关系中,属性是用于表示数据的键值对。

在图论中,我们可以表示用圆表示节点,节点之间的关系用一个箭头标记表示。

最简单的可能图是单个节点:

在两个节点之间创建关系:

1.2 属性图模型

属性图模型规则

  • 表示节点,关系和属性中的数据
  • 节点和关系都包含属性
  • 关系连接节点
  • 属性是键值对
  • 节点用圆圈表示,关系用方向键表示。
  • 关系具有方向:单向和双向。
  • 每个关系包含"开始节点"或"从节点”和“到节点"或"结束节点”

在属性图数据模型中,关系应该是定向的。如果我们尝试创建没有方向的关系,那么它将抛出一个错误消息,“关系应该是方向性的"

图数据库数据模型的主要构建块是:

  • 节点
  • 关系
  • 属性

简单的属性图的例子:

这里我们使用圆圈表示节点。使用箭头表示关系, 关系是有方向性的。

我们可以用Properties (键值对)来表示Node的数据。

二、Neo4j的构建元素

Neo4j图数据库主要有以下构建元索:

  • 节点
  • 属性
  • 关系
  • 标签
  • 数据浏览器

2.1 节点

节点(Node)是图数据库中的一个基本元索,用来表示一个实体记录,就像关系数据库中的一条记录一 样。

在Neo4j中节点可以包含多个属性(Property)和多个标签(Label)。

  • 节点是主要的数据元索
  • 节点通过关系连接到其他节点
  • 节点可以具有一个或多个属性(即,存储为键/值对的属性)
  • 节点有一个或多个标签,用于描述其在图表中的作用

2.2 属性

属性(Property)是用于描述图节点和关系的键值对。其中Key是一个字符串, 值可以通过使用任何Neo4j数据类型来表示

  • 属性是命名值,其中名称(或键)是字符串
  • 属性可以被索引和约束
  • 可以从多个属性创建复合索引

2.3 关系

关系(Relationship) 同样是图数据库的基本元素。当数据库中已经存在节点后,需要将节点连接起来构成图。关系也称为图论的边(Edge) ,其始端和末端都必须是节点,关系不能指向空也不能从空发起。

关系和节点一样可以包含多个属性,但关系只能有一个类型(Type)

  • 关系连接两个节点
  • 关系是方向性的
  • 节点可以有多个甚至递归的关系
  • 关系可以有一个或多个属性(即存储为键/值对的属性)

基于方向性,Neo4j关系被分为两种主要类型:

  • 单向关系
  • 双向关系

2.4 标签

标签(Label)将一个公共名称与一组节点或关系相关联,节点或关系可以包含一个或多个标签。我们可以为现有节点或关系创建新标签,我们可以从现有节点或关系中删除标签。

  • 标签用于将节点分组
  • 一个节点可以具有多个标签
  • 对标签进行索引以加速在图中查找节点
  • 本机标签索引针对速度进行了优化

2.5 Neo4j Browser

一旦我们安装Neo4j, 我们就可以访问Neo4j数据浏览器

htp://192.168.65.200:7474/0w5er/

三、环境搭建

3.1 安装neo4j

下载地址:neo4j.com/download-center/

下载时注意jdk版本。我下载了一个windows版本的。

使用说明:Thanks for Downloading Neo4j - Neo4j Graph Database Platform

运行截图:

 运行后,可以在浏览器上查看数据库的相关信息(首次登陆会提示修改密码,我的密码改成了123456):

 如果启动时失败或者闪退,见:把Neo4j安装为windows服务之后,无发启动服务是怎么回事? - Neo4j 图数据库中文社区

3.2 docker按钻过neo4j

  • 7474 for HTTP.
  • 7473 for HTTPS.
  • 7687 for Bolt.

拉取镜像

docker pu11 neo4j:3.5.22-community

运行镜像

docker run -d -p 7474:7474 -p 7687:7687 --name neo4j \
-e "NEO4J_ AUTH=neo4j /123456" \
-V /usr/1oca1/soft/neo4j/data:/data \
-V /usr/1oca1/soft/neo4j/logs:/logs \
-V /usr/1oca1/soft/neo4j/conf:/var/1ib/neo4j/conf \
-V /usr/loca1/soft/neo4j/import:/var/1ib/neo4j/import \
neo4j:3.5.22-community

四、CQL使用

4.1 简介

Neo4j的Cypher语言是为处理图形数据而构建的,CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL, Neo4j具有CQL作为查询语言。

  • 它是Neo4j图形数据库的查询语言。
  • 它是一种声明性模式匹配语言
  • 它遵循SQL语法。
  • 它的语法是非常简单且人性化、可读的格式。

(fox)<-[:knows]-(周瑜)-[:knows]->(诸葛)-[:knows]->(fox)

4.2 常用命令

官方手册:Clauses - Neo4j Cypher Manual

4.2.1 CREATE

create语句是创建模型语句用来创建数据模型

创建节点

#创建简单节点
create (n)

#创建多个节点
create (n),m)

#创建带标签和属性的节点并返回节点
create (n:person {name:'如来'})return n

创建关系

Neo4j图数据库遵循属性图模型来存储和管理其数据。根据属性图模型,关系应该是定向的。否则,Neo4j将抛出一 个错误消息

基于方向性, Neo4关系被分为两种主要类型。

  • 单向关系.
  • 双向关系
#使用新节点创建关系
CREATE (n:person {name:'杨戬'})-[r:`师傅`]->
(m:person {name:'玉鼎真人'}) return type(r)

match (n:student {name:"小明"}), (m:student {name:"小红"})
create (n)-[r:同学]->(m) return n.name, type(r) , m.name

4.2.2 RETURN 返回

Neo4j CQL RETURN子句用于

  • 检索节点的某些属性
  • 检索节点的所有属性
  • 检索节点和关联关系的某些属性
  • 检索节点和关联关系的所有属性
MATCH (n:`西游`) RETURN id(n) ,n.name ,n.tail,n.relation

4.2.3 WHERE子句

像SQL一样, Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询的结果。

MATCH (n:person) where n.name='孙悟空' or n.name='猪八戒'RETURN n

#创建关系
match (n:person), (m:person) where n.name='孙悟空' and m.name='猪八戒'
create (n)-[r:师弟]->(m) return n.name, type(r) ,m.name

4.2.4 DELETE删除

Neo4j使用CQL DELETE子句

  • 删除节点。
  • 删除节点及相关节点和关系。
#删除节点(前提:节点不存在关系)
MATCH (n:person{name:"白龙马"}) delete n

#删除关系
MATCH (n:person{name:"沙僧"})<-[r]-(m) delete r return type(r)

4.2.5 REMOVE 删除

有时基于客户端要求,我们需要向现有节点或关系添加或删除属性。我们使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。

  • 删除节点或关系的标签
  • 删除节点或关系的属性
#删除属性
MATCH (n:role {name:"fox"}) remove n.age

return n
#创建节点
CREATE (m:role:person {name:"fox666"})

#删除标签
match (m:role:person {name:"fox666"]}) remove m:person return m

REMOVEDELETE区别

  • DELETE语句用于删除节点和关联关系
  • REMOVE语句用于删除标签和属性

4.2.6 SET子句

有时,根据我们的客户端要求,我们需要向现有节点或关系添加新属性。要做到如下功能:

  • 向现有节点或关系添加新属性
  • 添加或更新属性值
MATCH (n:role {name:"fox"}) set n.age=32 return n

4.2.7 ORDER BY 排序

Neo4j CQL在MATCH命令中提供了"ORDER BY"句,对MATCH查询返回的结果进行排序。

我们可以按升序或降序对行进行排序。

默认情况下,它按升序对行进行排序。如果我们要按降序对它们进行排序, 我们需要使用DESC子句。

MATCH (n:`西游`) RETURN id(n), n.name order by id(n) desc

4.2.8 UNION子句

与SQL-样, Neo4j CQL有两个子句,将两个不同的结果合并成一组结果

UNION

  • 它将两组结果中的公共行组合并返回到一组结果中。它不从两个节点返回重复的行。
  • 限制:结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。

UNION ALL

  • 它结合并返回两个结果集的所有行成一个单一 的结果集。 它还返回由两个节点重复行。
  • 限制:  结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的。

4.2.9 LIMIT和SKIP子句

Neo4j CQL已提供LIMIT子句和SKIP来过滤或限制查询返回的行数。

LIMIT返回前几行,SKIP忽略前几行。

#前两行
MATCH (n: `西游`) RETURN n LIMIT 2

#忽略前两行
MATCH (n:person) RETURN n SKIP 2

4.2.10 NULL 值

Neo4j CQL将空值视为对节点或关系的属性的缺失值或未定义值。

当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有NULL属性值的新节点。

match (n:`西游`) where n.1abe1 is nu11 return id(n) ,n.name ,n.tail,n.1abel

4.2.11 IN操作符

与SQL一样, Neo4j CQL提供了一个IN运算符,以便为CQL命令提供值的集合。

match (n: `西游`) where n.name in['孙悟空','唐僧'] 
return id(n) ,n.name ,n tail,n.label

4.2.12 INDEX 索引

Neo4j SQL支持节点或关系属性上的索引,以提高应用程序的性能。

我们可以为具有相同标签名称的所有共占的属性创建索引

我们可以在MATCH或WHERE或IN运算符上使用这些索引列来改进CQL Command的执行。

Neo4J索引操作

  • Create Index创建索引
  • Drop Index丢奔索引
#创建索引
create index on :`西游` (name)

#删除索引
drop index on :`西游` (name)

4.2.13 UNIQUE约束

在Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使您使用相同的值,它也会插入一个新行。根据我们对某些节点或关系的应用需求,我们必须避免这种重复。

像SQL一样,Neo4j数据库也支持对NODE或Relationship的属性的UNIQUE约束

UNIOUF约束的优点

  • 避免重复记录。
  • 强制执行数据完整性规则
#创建唯-约束
create constraint on (n:xiyou) assert n.name is unique

#删除唯-约束
drop constraint on (n:xiyou) assert n.name is unique

4.2.14 DISTINCE 

这个函数的用法就像SQL中的distinct关键字,返回的是所有不同值。

match (n: `西游`) return distinct (n.name)

4.3 常用函数

4.3.2 字符串函数

与SQL一样, Neo4J CQL提供了-组String函数,用于在CQL查询中获取所需的结果。

MATCH (e) RETURN id(e), e.name, substring(e.name, 0, 2)

4.3.3 AGGREGATION聚合

和SQL一样, Neo4j CQL提供了一些在RETURN子句中使用的聚合函数。它类似于SQL中的GROUP BY句。

我们可以使用MATCH命令中的RETURN + 聚合函数来处理一组节点并返回一些聚合值。

MATCH (e) RETURN count(e)

4.3.4 关系函数

Neo4j CQL提供了一组关系函数, 以在获取开始节点,结束节点等细节时知道关系的细节。

match (a)-[r]->(b) return id(r),type(r)

五、neo4j-admin的使用

5.1 备份

对Neo4j数据进行备份、还原、迁移的操作时,要关闭neo4j

cd %NE04J_HOME%/bin
#关闭neo4j
neo4j stop
#备份
neo4j-admin dump --database=graph.db --to=/neo4j/backup/graph_backup.dump

5.2 还原

还原、迁移之前,要关闭neo4j服务。

#数据导入
neo4j-admin 1oad --from=/neo4j/backup/graph backup.dump --database=graph.db --force

#重启服务
neo4j start

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值