Neo4j介绍
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。
在一个图中包含两种基本的数据类型:Nodes(节点) 和 Relationships(关系)。Nodes 和 Relationships 包含key/value形式的属性。Nodes通过Relationships所定义的关系相连起来,形成关系型网络结构。
Neo4j的优点,即适用于:
- 自带一套易于学习的查询语言(名为Cypher)
- 不使用schema,因此可以满足你的任何形式的需求。
- 与关系型数据库相比,对于高度关联的数据(图形数据)的查询快速要快上许多。
- 它的实体与关系结构非常自然地切合人类的直观感受。
- 支持兼容ACID的事务操作。
- 提供了一个高可用性模型,以支持大规模数据量的查询,支持备份、数据局部性以及冗余。
- 提供了一个可视化的查询控制台,你不会对它感到厌倦的
Neo4j的缺点,即不适用于:
- 记录大量基于事件的数据(例如日志条目或传感器数据)
- 对大规模分布式数据进行处理,类似于Hadoop
- 二进制数据存储
- 适合于保存在关系型数据库中的结构化数据
Neo4j 安装
到官网下载Neo4j,我下载的是Windows版的。
下载完成之后将其解压即可使用。
打开cmd进入解压后目录下的bin文件夹
neo4j指令相关的几个参数为:
- console:打开Neo4j的控制台
- start:启动
- stop:关闭
- restart:重启
- status:查看运行状态
- install-service:安装Neo4j在Windows系统上的服务。
- uninstall-service:卸载服务
首先在cmd上输入neo4j install-service 安装Windows上的服务
再输入neo4j start 启动Neo4j
在浏览器上输入http://127.0.0.1:7474/ 即可访问(用户名,密码最初都为neo4j)
Neo4j使用
官方实例
在命令行下输入以下命令可以获得官网给的一个有关电影的事例,用户可通过翻阅执行这些代码
:play movie-graph
执行第二页的代码之后可以得到movie-graph
Neo4j Cypher查询
Cyper通过一系列不同的方法和建立于确定的实践为表达查询而激发的。许多关键字如like和order by是受SQL的启发。模式匹配的表达式来自于SPARQL。正则表达式匹配实现实用Scala programming language语言。
这个查询语言包含以下几个明显的部分:
- START:在图中的开始点,通过元素的ID或所以查找获得。
- MATCH:图形的匹配模式,束缚于开始点。相当于SQL的select
- WHERE:过滤条件。
- RETURN:返回所需要的。
- CREATE:创建节点。相当于SQL的create
[ ] 代表关系 , ( ) 代表节点,{ }代表属性
create (:pig{name:"猪爷爷",age:15}); #创建一个节点,标签是pig,名字是猪爷爷,一个节点可以有多个标签
create (:pig{name:"猪奶奶",age:15}); #创建一个节点,标签是pig,名字是猪奶奶,一个节点可以有多个标签
# 创建一个关系是猪爷爷指向猪奶奶的关系,关系名为:夫妻
# 先查询到猪爷爷,给这个查询赋值到变量a,同样另一个节点赋值到变量b,然后创建a->b的关系
Match (a:pig{name:"猪爷爷"}) match(b:pig{name:"猪奶奶"}) create(a)-[r:夫妻]->(b);
# 上述语句可以简写为如下:
create(:pig{name:"猪爸爸",age:7})-[:夫妻]->(:pig{name:"猪妈妈",age:6})
# 再多创建几个关系和节点
create(:pig{name:"佩奇",age:2})-[:姐弟]->(:pig{name:"乔治",age:1})
create(:die:pig{name:"祖父",age:20})-[:姐弟]->(:pig{name:"祖母",age:19})
match(a:pig{name:"猪爸爸"}) match(b:pig{name:"乔治"}) create(a)-[r:父子]->(b)
match(a:pig{name:"猪妈妈"}) match(b:pig{name:"乔治"}) create(a)-[r:母子]->(b)
match(a:pig{name:"猪爸爸"}) match(b:pig{name:"佩奇"}) create(a)-[r:父女]->(b)
match(a:pig{name:"猪妈妈"}) match(b:pig{name:"佩奇"}) create(a)-[r:母女]->(b)
create(:die:pig{name:"祖父",age:20})-[:姐弟]->(:pig{name:"祖母",age:19})
#使用以下语句修改猪妈妈的年龄
Match(a:pig{name:"猪妈妈"}) set a.age=10
#删除标签为die的节点
match(a:die) delete a;
通过以上语句可以得到下图: