一、图数据库

1、什么是图数据库

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

  • 社交领域:Facebook, Twitter,Linkedin 用它来管理社交关系,实现好友推荐
  • 零售领域:eBay,沃尔玛使用它实现商品实时推荐,给买家更好的购物体验
  • 金融领域:摩根大通,花旗和瑞银等银行在用图数据库做风控处理
  • 汽车制造领域:沃尔沃,戴姆勒和丰田等顶级汽车制造商依靠图数据库推动创新制造解决方案
  • 电信领域:Verizon, Orange 和 AT&T 等电信公司依靠图数据库来管理网络,控制访问并支持客户 360
  • 酒店领域:万豪和雅高酒店等顶级酒店公司依使用图数据库来管理复杂且快速变化的库存图数据库并非指存储图片的数据库,而是以图数据结构存储和查询数据。

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

图论〔Graph Theory〕是数学的一个分支。它以图为研究对象图论中的图是由若干给定的点及连
接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,
用连接两点的线表示相应两个事物间具有这种关系。

2、和关系型数据库的对比

关系型数据库(RDBMS) 图数据库(GDB)
节点
列和数据 属性和数据
约束 关系

3、Neo4j 数据库

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

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

官网: https://neo4j.com/

3.1、Neo4j 的特性

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

3.2、Neo4j 的优点

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

二、Neo4j 数据模型

1、属性图模型

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

属性图模型规则

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

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

2、Neo4j 的构建元素

  • 节点

  • 属性

  • 关系

  • 标签

  • 数据浏览器

2.1、节点

节点(Node)是图数据库中的一个基本元素,用来表示一个实体记录,就像关系数据库中的一条记录一
样。在 Neo4j 中节点可以包含多个属性(Property)和多个标签(Label)。

  • 节点是主要的数据元素
  • 节点通过关系连接到其他节点
  • 节点可以具有一个或多个属性(即,存储为键/值对的属性)
  • 节点有一个或多个标签,用于描述其在图表中的作用

2.2、属性

属性(Property)是用于描述图节点和关系的键值对。其中 Key 是一个字符串,值可以通过使用任何
Neo4j 数据类型来表示。

  • 属性是命名值,其中名称(或键)是字符串
  • 属性可以被索引和约束
  • 可以从多个属性创建复合索引

2.3、关系

关系(Relationship)同样是图数据库的基本元素。当数据库中已经存在节点后,需要将节点连接起来
构成图。关系就是用来连接两个节点,关系也称为图论的边(Edge) ,其始端和末端都必须是节点,关系不
能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type) 。

  • 关系连接两个节点
  • 关系是方向性的
  • 节点可以有多个甚至递归的关系
  • 关系可以有一个或多个属性(即存储为键/值对的属性)

2.4、标签

标签(Label)将一个公共名称与一组节点或关系相关联, 节点或关系可以包含一个或多个标签。 我们
可以为现有节点或关系创建新标签, 我们可以从现有节点或关系中删除标签。

  • 标签用于将节点分组
  • 一个节点可以具有多个标签
  • 对标签进行索引以加速在图中查找节点
  • 本机标签索引针对速度进行了优化

3、Neo4j - CQL 简介

Neo4j 的 Cypher 语言是为处理图形数据而构建的,CQL 代表 Cypher 查询语言。像 Oracle 数据库具有查询
语言 SQL,Neo4j 具有 CQL 作为查询语言。

  • 它是 Neo4j 图形数据库的查询语言。
  • 它是一种声明性模式匹配语言
  • 它遵循 SQL 语法。
  • 它的语法是非常简单且人性化、可读的格式。