本文共 4135 字,大约阅读时间需要 13 分钟。
随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,急需一种支持海量复杂数据关系运算的数据库,图数据库应运而生。
世界上很多著名的公司都在使用图数据库,比如:
图数据库并非指存储图片的数据库,而是以图数据结构存储和查询数据。
图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是以图论为基础的,图数据库主要用于存储更多的连接数据。
图论〔Graph Theory〕是数学的一个分支。它以图为研究对象图论中的图是由若干给定的点及连 接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物, 用连接两点的线表示相应两个事物间具有这种关系。

使用 Google+(GooglePlus)应用程序来了解现实世界中 Graph 数据库的需求。 观察下面的图表。
在这里,我们用圆圈表示了 Google+应用个人资料。

在上图中,轮廓“A”具有圆圈以连接到其他轮廓:家庭圈(B,C,D)和朋友圈(B,C)。再次,如果我们打开配置文件“B”,我们可以观察以下连接的数据

像这样,这些应用程序包含大量的结构化,半结构化和非结构化的连接数据。在 RDBMS 数据库中表示这种非结构化连接数据并不容易。如果我们在 RDBMS 数据库中存储这种更多连接的数据,那么检索或遍历是非常困难和缓慢的。所以要表示或存储这种更连接的数据,我们应该选择一个流行的图数据库。
图数据库非常容易地存储这种更多连接的数据。它将每个配置文件数据作为节点存储在内部,它与相邻节点连接的节点,它们通过关系相互连接。他们存储这种连接的数据与上面的图表中的相同,这样检索或遍历是非常容易和更快的。
关系查询性能对比在数据关系中心,图形数据库在查询速度方面非常高效,即使对于深度和复杂的查询也是如此。在关系型数据库和图数据库(Neo4j)之间进行了实验:在一个社交网络里找到最大深度为5的朋友的朋友,他们的数据集包括100万人,每人约有50个朋友。
实验结果如下:
| 深度 | MySQL执行时间(s) | Neo4J执行时间(s) | 返回记录数 |
| 2 | 0.016 | 0.01 | ~2500 |
| 3 | 30.267 | 0.168 | ~110000 |
| 4 | 1543.505 | 1.359 | ~600000 |
| 5 | 未完成 | 2.132 | ~800000 |
对比关系型数据库
| 关系型数据库(RDBMS) | 图数据库 |
| 表 | 图 |
| 行 | 节点 |
| 列和数据 | 属性和数据 |
| 约束 | 关系 |
在关系型数据库中,Person和Department表之间用外键表示关系:

在图数据库中,节点和关系取代表,外键和join:

在图数据库中,无论何时运行类似JOIN的操作,数据库都会使用此列表并直接访问连接的节点,而无需进行昂贵的搜索和匹配计算。
对比其他NoSQL数据库
NoSQL数据库大致可以分为四类:

| 分类 | 数据模型 | 优势 | 劣势 | 举例 |
| 键值数据库 | 哈希表 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 | Redis |
| 列存储数据库 | 列式数据存储 | 查找速度快;支持分布横向扩展;数据压缩率高 功能相对受限 | 功能相对受限 | HBase |
| 文件数据库 | 键值对扩展 | 数据结构要求不严格;表结构可变;不需要预先定义表结构查询性能不高,缺乏统一的查询语法 | 查询性能不高,缺乏统一的查询语法 | MongoDB |
| 图数据库 | 节点和关系组成的图 | 利用图结构相关算法(最短路径、节点度关系查找等) | 可能需要对整个图做计算,不利于图数据分布存储 | Neo4j、JanusGraph |
Neo4j是一个开源的NoSQL图形数据库,2003 年开始开发,使用 scala和java 语言,2007年开始发布。
官网: https://neo4j.com/
Neo4j的特性:
Neo4j的优点:
图论基础
图是一组节点和连接这些节点的关系,图形以属性的形式将数据存储在节点和关系中,属性是用于表示数据的键值对。
在图论中,我们可以表示一个带有圆的节点,节点之间的关系用一个箭头标记表示。
最简单的可能图是单个节点:

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

在两个节点之间创建关系:
此处在两个配置文件之间创建关系名称“跟随”。这意味着 Profile-I 遵循 Profile-II。
属性图模型
Neo4j图数据库遵循属性图模型来存储和管理其数据。
属性图模型规则
在属性图数据模型中,关系应该是定向的。如果我们尝试创建没有方向的关系,那么它将抛出一个错误消息。在Neo4j中,关系也应该是有方向性的。如果我们尝试创建没有方向的关系,那么Neo4j会抛出一个错误消息,“关系应该是方向性的”。
Neo4j图数据库将其所有数据存储在节点和关系中,我们不需要任何额外的RDBMS数据库或NoSQL数据库来存储Neo4j数据库数据,它以图的形式存储数据。Neo4j使用本机GPE(图形处理引擎)来使用它的本机图存储格式。
图数据库数据模型的主要构建块是:
简单的属性图的例子:

这里我们使用圆圈表示节点。使用箭头表示关系,关系是有方向性的。我们可以用Properties(键值对)来表示Node的数据。在这个例子中,我们在Node的Circle中表示了每个Node的Id属性。
Neo4j图数据库主要有以下构建元素:

节点
节点(Node)是图数据库中的一个基本元素,用来表示一个实体记录,就像关系数据库中的一条记录一样。在Neo4j中节点可以包含多个属性(Property)和多个标签(Label)。
属性
属性(Property)是用于描述图节点和关系的键值对。其中Key是一个字符串,值可以通过使用任何Neo4j数据类型来表示
关系
关系(Relationship)同样是图数据库的基本元素。当数据库中已经存在节点后,需要将节点连接起来构成图。关系就是用来连接两个节点,关系也称为图论的边(Edge) ,其始端和末端都必须是节点,关系不能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type) 。
基于方向性,Neo4j关系被分为两种主要类型:
标签
标签(Label)将一个公共名称与一组节点或关系相关联, 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签, 我们可以从现有节点或关系中删除标签。
Neo4j Browser
一旦我们安装Neo4j,我们就可以访问Neo4j数据浏览器
http://192.168.65.200:7474/browser/








转载地址:http://vfcfk.baihongyu.com/