Neo4j的基本介绍
Neo4j最早在2010年发布,背后的Neo4j公司在2016年完成了3600万美金的D轮融资,产品很有发展的势头。作为图数据库,Neo4j最大的特点是关系数据的存储。
Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下,而不是严格、静态的表中。但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。Neo4j目前因其嵌入式、高性能、轻量级等优势,越来越受到关注。
Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以由一个或多个属性。Neo4j创建的图是用顶点和边构建一个有向图,其查询语言cypher已经成为事实上的标准。其他的图形数据库还包括Oracle NoSQL数据库,OrientDB,HypherGraphDB,GraphBase,InfiniteGraph,AllegroGraph。
【特别注意】Neo4j不同与MySQL或SQL Server,neo4j的一个数据库服务器实例就是一个数据库,没有类似Oracle中的Schema或SQL Server中的Database的概念。
Neo4j的独特优势
可能有人会说,对于Neo4j数据库存储的这种关系数据结构,SQL也可以通过多表join等方法实现,那要Neo4j还有什么用?但毕竟术业有专攻,对于大量、复杂的关系数据处理,Neo4j在性能和使用方便程度上都是要远胜于SQL的。
下面简单总结Neo4j的优势:
- 数据底层存储专门针对图数据的特点进行优化,在关系数据的处理上具备远高于其他数据库的性能
- 专门为关系数据设计的查询语言,对于关系数据的操作更加的方便。
- 没有表结构这个概念,相较SQL在使用上更加灵活。
- 自动为数据建立合适的索引(根据数据的标签),免去管理索引的麻烦。
- 支持高可用性主从集群部署。
- 具备图形化平台等配套工具,帮助开发者快速构建出完整的关系数据平台。
Neo4j的应用场景
- 社交网络:根据用户与其他用户的关系为用户推荐新的朋友。例如,在QQ中给你推荐朋友的朋友 。
- 智能推荐引擎:通过分析用户有哪些朋友、用户朋友喜好的产品、用户的浏览记录等关系信息推测用户的喜好进而为用户推荐商品。
- 知识图谱:根据知识点之间的关系建立知识图,帮助用户搜索到关联的知识。例如,在百度上搜索Neo4j,会同时出现MySQL等类似的内容。
- 恶意软件检测:通过记录软件行为的各种关系数据,例如其访问了哪些IP、访问了哪些系统资源,进而分析软件行为是否具有恶意。
- 网络、数据中心管理:网络、数据中心这些基础设施自身就是一个包含复杂关系的网络,利用Neo4j可以方便的建立设备之间的关系,以便于对整个系统的管理。
Neo4j的安装
关于neo4j的配置安装可参考文章:知识图谱:win10下安装neo4j数据库
Windows下Neo4j的使用入门
neo4j环境配置好之后,在命令行控制台开启本地服务:
neo4j console
然后,127.0.0.1:7474进行可视化。
【1】重要概念
- 1、节点
- 2、关系
- 3、属性
【2】常用数据库操作的Cypher 语句:
- 清空数据库:
match (n) detach delete n
- 增删改查
1.节点添加
create(student:Student{id:1, name: "yunxiao"});
create(student:Student{id:2, name: "小明"});
create(teacher:Teacher{id:1, name: "李老师"});
create(school:School{id: 1, title: "sxu"});
小写student 可以理解为面向对象的实体,大写Student 可以理解为面向对象的类
图结构:
表格:
文本:
2.添加关系:
match(s:Student{id:1}),(t:Teacher{id:1}) create (t)-[r:教授]->(s);
match(s:Student{id:2}),(t:Teacher{id:1}) create (t)-[r:教授]->(s);
match(s:School{id:1}),(t:Teacher{id:1}) create (t)-[r:就职于]->(s);
3.更新节点:
match(t:Teacher)
where t.id=1
set t.name="小王老师"
4.删除节点:
match(s:Student{id: 1})
detach delete s;
删除id为1的学生
5.删除关系:
match (t:Teacher)-[r:教授]->(s:Student)
where t.id=1 and s.id=2
delete r
删除所有的关系“教授”
6.索引操作
查看所有索引
:schema
创建索引
create index on:Student(name)
删除索引
drop index on:Student(name)
创建唯一索引
create constraint on (s:Teacher) assert s.name is unique
删除唯一索引
drop constraint on (s:Teacher) assert s.name is unique
7.关系修改
........
经过以上内容,可以简单了解到neo4j的基础操作。关于neo4j的详细条件查询,请看:neo4j 的cql 语句,增、删、改、查。
Python API连接操作Neo4j数据库
python连接neo4j,请看:知识图谱:利用python neo4j驱动连接neo4j图数据库。