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 可以理解为面向对象的类

图结构:

neo4j desktop和neo4j有何区别 neo4j介绍_面向对象

表格:

neo4j desktop和neo4j有何区别 neo4j介绍_数据库_02

文本:

neo4j desktop和neo4j有何区别 neo4j介绍_面向对象_03

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);

neo4j desktop和neo4j有何区别 neo4j介绍_数据库_04

3.更新节点:

match(t:Teacher) 
where t.id=1 
set t.name="小王老师"

neo4j desktop和neo4j有何区别 neo4j介绍_SQL_05

4.删除节点:

match(s:Student{id: 1}) 
detach delete s;

neo4j desktop和neo4j有何区别 neo4j介绍_SQL_06

        删除id为1的学生

5.删除关系:

match (t:Teacher)-[r:教授]->(s:Student) 
where t.id=1 and s.id=2 
delete r

neo4j desktop和neo4j有何区别 neo4j介绍_数据库_07

        删除所有的关系“教授”

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图数据库。