Neo4j入门
一、介绍
Neo4j是一个开源的图形数据库管理系统,它基于Java语言开发。与传统的关系型数据库不同,Neo4j使用图形结构来存储和查询数据,这使得它在处理复杂关系时更加高效和灵活。
Neo4j的核心特性包括:
代码语言:javascript复制1. 图形结构:Neo4j的数据模型是基于图的,每个节点表示一个实体,每个边表示两个实体之间的关系。这种结构使得Neo4j非常适合处理复杂的关系问题,例如社交网络、推荐系统等。
2. 快速查询:由于Neo4j采用基于路径的查询方式,因此它的查询速度非常快。相比之下,传统的关系型数据库需要遍历整个表才能找到所需的数据,这会导致性能问题。
3. 灵活性:Neo4j支持动态模式,这意味着它可以轻松地适应不断变化的数据模式。此外,Neo4j还支持ACID事务,确保数据的一致性和可靠性。
4. 可扩展性:Neo4j可以通过添加更多的节点和边来扩展其数据模型,这使得它非常适合处理大规模数据集。此外,Neo4j还支持集群部署,以提高可扩展性和容错能力。
总之,Neo4j是一个功能强大、灵活、高效的图形数据库管理系统,适用于处理各种复杂的关系问题。
Neo4j的优点和缺点:
优点:
代码语言:javascript复制1. 高效的数据模型:Neo4j采用基于图的数据模型,可以更加高效地处理复杂的关系问题。相比之下,传统的关系型数据库需要遍历整个表才能找到所需的数据,这会导致性能问题。
2. 灵活的数据操作:Neo4j支持动态模式,可以轻松地适应不断变化的数据模式。此外,Neo4j还支持ACID事务,确保数据的一致性和可靠性。
3. 易于扩展:Neo4j可以通过添加更多的节点和边来扩展其数据模型,这使得它非常适合处理大规模数据集。此外,Neo4j还支持集群部署,以提高可扩展性和容错能力。
4. 可视化工具:Neo4j提供了一些可视化工具,如Cypher和Gremlin,可以帮助用户更加方便地管理和查询数据。
缺点:
代码语言:javascript复制1. 学习成本高:相对于传统的关系型数据库,Neo4j的学习成本较高,需要一定的学习曲线。
2. 不支持SQL:Neo4j不支持SQL语言,需要使用Cypher或Gremlin等专门的语言进行查询和管理。
对比MySQL数据库:
与MySQL数据库相比,Neo4j的优点在于它更加适合处理复杂的关系问题,具有更高的效率和灵活性。而MySQL则更加适合处理结构化数据,具有更好的扩展性和可靠性。因此,选择使用哪种数据库取决于具体的应用场景和需求。如果需要处理复杂的关系问题,建议使用Neo4j;如果需要处理结构化数据,建议使用MySQL。
二、安装
1)官网下载
官网下载中心:https://go.neo4j.com/download-thanks.html?edition=community&release=3.5.28&flavour=winzip
直接下载解压就可以,进入bin
目录,黑框启动,如下
打开http://localhost:7474
,输入账号密码neo4j
,neo4j
就成功启动啦
2)Docker镜像容器
代码语言:javascript复制docker pull neo4j:3.5.28-community
docker run -d -p 7474:7474 -p 7687:7687 --name neo4j -e "NE04J_AUTH=neo4j/123456" -v /usr/local/soft/neo4j/data:/data -v /usr/local/soft/neo4j/logs:/logs -v /usr/local/soft/neo4j/conf:/var/lib/neo4j/conf -v /usr/local/soft/neo4j/import:/var/lib/neo4j/import neo4j:3.5.28-community
这个就不演示了
三、CQL语句
官网:Clauses - Cypher Manual (neo4j.com)
1)create
创建没什么好说的,可以创建节点、关系
代码语言:javascript复制// 创建一个单独的节点
create (n:person {name:'半月无霜'}) return n
// 创建多个独立的节点
create (n:person {name:'小明'}),(m:person {name:'小红'}) return n,m
// 创建多个节点,且节点之间有关系
create (n:person {name:'孙悟空'})-[r:关系 {label: '师弟'}]->(m:person {name:'猪八戒'}) return n,m
// 创建一个关系,作用于已有的节点
// 本质就是先查询出两个节点,再创建这两个节点的关系
match (n:person),(m:person)
where n.name = '小明' and m.name = '小红'
create (n)-[r:关系 {label: '同学'}]->(m)
return n.name, r.label, m.name
2)delete
删除节点,关系
代码语言:javascript复制// 删除节点,先查询到,再删除
match (n:person {name: '半月无霜'}) delete n
// 也可以使用where进行查询
match (n:person) where n.name = '半月无霜' delete n
// 如果删除节点报错,可能是因为节点上有关系,要先删除关系,才能把节点删除
// 删除节点上的所有关系,并删除该节点
match (n:person)-[r:`关系`]-()
where n.name = '小明'
delete r,n
// 删除关系,但不删除节点
match ()-[r:`关系`]->()
where r.label = '师弟'
delete r
3)set、remove
- set:节点上面有属性,我们可以对其进行更新
- remove:节点上面有属性,我们可以对其进行移除
// 修改节点的属性
match (n:person {name: '小红'}) set n.name = '红孩儿'
// 修改关系的属性,比如说孙悟空的师父是猪八戒,这明显是错误的,我们要将其纠正
match (n:person {name: '孙悟空'})-[r:`关系`]->(m:person {name: '猪八戒'})
set r.label = '师弟'
return n,r,m
// 修改节点的label
match (n:person)
set n:`西游记`
remove n:person
// 删除节点的一个属性,并新增外号
match (n:`西游记` {name: '孙悟空'}),(m:`西游记` {name: '红孩儿'}),(l:`西游记` {name: '猪八戒'})
set n.nickname = '齐天大圣', m.nickname = '牛圣婴', l.nickname = '猪刚鬣'
remove n.name,m.name,l.name
return n
4)match
用于匹配查找,上面已经用到了许多,不再详细展开了
上面的一些操作,简单来说就是
- 先匹配找到节点或关系
- 再对其节点或关系进行操作
上面没提到的操作关键字
关键字 | 说明 |
---|---|
return | 返回结果 |
where | 进行where条件匹配 |
下面再来看几组匹配的查询把
代码语言:javascript复制// 查询单独一个节点
match (n:`西游记`)
where n.nickname = '齐天大圣'
return n
// 如果查询其中的属性
match (n:`西游记`)
return n.nickname
// 查询有师弟关系的所有节点
match (n)-[r:`关系`]->(m)
where r.label = '师弟'
return n,r,m
// 查询节点有关系的所有其他节点和关系,*代表的是层级关系,不填则为与节点的直接关系
match p=(n:`西游记`)-[r*]->(m)
where n.nickname = '齐天大圣'
return p
四、最后
使用Neo4j
学起来比以前的MySQL
简单,但这仅仅是入门,后面估计还有很多坑没有踩呢。
我是半月,你我一同共勉!!!