图数据库Neo4j简介

什么是图数据库(Graph Database)

随着社交、电商金融、零售、物联网的快速发展,现实社会支起了一张张庞大二复杂的关系网,传统数据库很难处理关系运算,急需一种支持海量复杂数据关系运算的数据库,图数据库应运而生。

图数据库是基于图论实现的一种Nosql数据库,起数据结构和数据查询方式都是以图论为基础,主要用于存储更多的连接数据。如下图:

Neo4j

Neo4j是一个开源的NoSql图数据库,2003年开始开发,使用scala和java语言,2007年开始发布。

  • 世界上最先进的图数据库之一,提供原生的图数据存储,检索和处理
  • 采用属性图模型(Property graph mode),几个的完善和丰富图数据模型
  • 专属查询语言Cypher,直观,高效

官网:https://neo4j.com/

Neo4j的特性:

  • SQL就像简单的查询语言Neo4j CQL
  • 遵循属性图数据模型
  • 通过使用Apache Lucence 支持索引
  • 支持UNIQUE约束
  • 包含一个用于执行的CQL命令UI:Neo4j数据浏览器
  • 支持完整的ACID(原子性,一致性,隔离性和持久性)规则
  • 采用原生图形库与本地GPE(图形处理引擎)
  • 支持查询的数据导出到JSON和XLS格式
  • 提供了REST API,可以被任何编程语言(JAVA,PYTHON,GO.NET等)
  • 提供了可以通过任何UI MVC框架(NODE JS)访问java脚本
  • 支持两种java api:Cypher API和Navicat Java API来开发Java应用程序

Neo4j的优点:

  • 很容易表示连接的数量
  • 检索、遍历、导航更多的连接数量时非常容易和快捷的
  • 非常容易地表示半结构化数据
  • Neo4j CQL查询语言是人性化可读格式,非常容易学习
  • 使用简单而强大的数据模型
  • 不需要复杂的连接来检索连接相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引

Noe4j数据模型

图论基础

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

在图论中,我们可以表示一个带有圆的节点,节点之间的关系用一个箭头标记表示。最简单的图是单个节点:

我们可以使用节点表示社交网络(比如CSDN个人资料),它不包含任何属性,像CSDN个人资料添加一些属性:

在两个节点直接创建关系

此处在两个配置文件之间创建关系名称“跟随”,这意味着profile1遵循profile2

属性图模型

Neo4j图数据库遵循属性图模型来存储和管理数据。

属性图模型规则:

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

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

Neo4j图数据库将其所有数据存储在节点和关系中,我们不需要任何额外的RDBMS数据库或NoSQL数据库来存储Neo4j数据库数据,它以图形的形式存储数据。Neo4j使用本机GPE(图形处理引擎)来使用它的本地图存储格式。

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

  • 节点
  • 关系
  • 属性

简单的属性图的例子:

Neo4j的构建元素

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

  • 节点(Node):是图数据库中的一个基本元素,用来表示一个实体记录,就像mysql中的一条记录一样,一个节点(Node)可以有多个属性(properties)和多个标签(label)。
    • 节点是最主要的数据元素
    • 节点可以通过关系连接到其它节点
    • 节点可以具有多个属性(键值对)
    • 节点可以由多个标签,用于描述其在图表中的作用,比如一个人的标签可以是父亲,也可以是儿子,也可以是朋友
  • 属性(Property):是用于描述节点和关系的键值对,key是一个字符串,值可以通过任何Neo4j数据类型来表示。
    • 属性是命名值,其中名称是字符串
    • 属性可以被索引和约束
    • 可以多个属性创建复合索引
  • 关系(Relationship):同样的图数据库的基本元素,当数据库中已经存在节点后,需要将节点连接起来构成图。关系就是用来连接两个节点,关系也称为图论中的”边”,关系和节点一样可以由多个属性,但是只能有一个类型(Type)
  • 标签(Lable):是将一个公共名称与一组节点或者关系相连,我们可以为现有的节点或关系中添加标签也可以删除标签
  • 数据浏览器(后面更新部署安装的时候再说)

Neo4j的使用场景

  • 欺诈检测,比如你接到某个陌生电话或者陌生短信,就会收到官方的防欺诈提醒通知
  • 实时推荐引擎
  • 知识图谱