每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

图数据库 — neo4j (一)

图数据库 — neo4j (一)

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

世界上很多著名的公司都在使用图数据库。比如:

  • 社交领域:Facebook, Twitter用它来管理社交关系,实现好友推荐。

  • 零售领域:eBay,沃尔玛使用它实现商品实时推荐,给买家更好的购物体验。

  • 金融领域:摩根大通,花旗和瑞银等银行在用图数据库做风控处理。

  • 汽车制造领域:沃尔沃,戴姆勒和丰田等顶级汽车制造商依靠图数据库推动创新制造解决方案。

  • 电信领域:Verizon, Orange等电信公司依靠图数据库来管理网络,控制访问并支持客户360。

  • 酒店领域:万豪和雅高酒店等顶级酒店公司依使用图数据库来管理复杂且快速变化的库存。

1、什么是图数据库?

图数据库(Graph database)并非指存储图片的数据库,而是以这种数据结构存储和查询数据。

图数据库是一种在线数据库管理系统,具有处理图形数据模型的创建,读取,更新和删除(CRUD)操作。

与其他数据库不同,关系在图数据库中占首要地位。这意味着应用程序不必使用外键或带外处理(如MapReduce)来推断数据连接。

与关系数据库或其他NoSQL数据库相比,图数据库的数据模型也更加简单,更具表现力。

图形数据库是为与事务(OLTP)系统一起使用而构建的,并且在设计时考虑了事务完整性和操作可用性。

2、基于图结构的存储

  • 将实体看做节点,关系看做带有标签的边,那么知识图谱的数据很自然地满足图模型结构。

  • 图数据库基于有向图,其理论基础是图论。节点、边和属性是图数据库的核心概念。

    • 节点:节点用于表示实体、事件等对象,可以类比于关系数据库中的记录或数据表中的行数据。例如人物、地点、电影等都可以作为图中的节点。

    • 边(关系):边是指图中连接节点的有向线条,用于表示不同节点之间的关系。例如人物节点之间的夫妻关系、同事关系等都可以作为图中的边。

    • 属性:属性用于描述节点或者边的特性。例如人物的姓名、夫妻关系的起止时间等都是属性。

3、常见的图数据存储系统

  • Neo4j: Neo4j是一个开源的图数据库系统,它将结构化的数据存储在图上而不是表中。Neo4j基于Java实现,是一个具备完全事务特性的高性能数据库,具有成熟数据库的所有特性。Neo4j是一个本地数据库,不需要启动数据库服务器,应用程序不用通过网络访问数据库服务,访问速度快。https://neo4j.com/

  • OrientDB:是一个开源的文档-图混合数据库,兼具图数据库对数据强大的表示及组织能力和文档数据库的灵活性及很好的可扩展性。该数据库同样是本地的,支持许多数据库的高级特性,如事务、快速索引、SQL查询等。http://orientdb.com/

  • HyperGraphDB:同样是开源的存储系统,并依托于BerkeleyDB数据库,最大的特点是超图,从数学角度讲,有向图的一条边只能指向一个节点,而超图则可以指向多个节点,HyperGraphDB还允许一条边指向其它边,因此有更强大的表示能力。http://www.hypergraphdb.org/

  • InfiniteGraph:一个基于Java语言开发的分布式图数据库系统。http://www.objectivity.com/ products/infinitegraph/

4、对比

4.1 与NoSQL数据库对比

NoSQL数据库大致可以分为四类:

  • 键值(key/value)数据库
  • 列存储数据库
  • 文档型数据库
  • 图数据库
分类数据模型优势劣势举例
键值数据库 哈希表 查找速度快 数据无结构化,通常只被当作字符串或者二进制数据 Redis
列存储数据库 列式数据存储 查找速度快;支持分布横向扩展;数据压缩率高 功能相对受限 HBase
文档型数据库 键值对扩展 数据结构要求不严格;表结构可变;不需要预先定义表结构 查询性能不高,缺乏统一的查询语法 MongoDB
图数据库 节点和关系组成的图 利用图结构相关算法(最短路径、节点度关系查找等) 可能需要对整个图做计算,不利于图数据分布存储 Neo4j、JanusGraph

4.2 与关系型数据库对比

关系型数据库实际上是不擅长处理关系的。很多场景下,业务需求完全超出了当前的数据库架构。

举个栗子:假设某关系型数据库中有这么几张用户、订单、商品表:

当我们要查询:“用户购买了那些商品?” 或者 “该商品有哪些客户购买过?” 需要开发人员JOIN几张表,效率非常低下。

而“购买该产品的客户还购买了哪些商品?”类似的查询几乎不可能实现。

4.2.1 关系查询性能对比
在数据关系中心,图形数据库在查询速度方面非常高效,即使对于深度和复杂的查询也是如此。在《Neo4j in Action》这本书中,作者在关系型数据库和图数据库(Neo4j)之间进行了实验。

他们的实验试图在一个社交网络里找到最大深度为5的朋友的朋友。他们的数据集包括100万人,每人约有50个朋友。实验结果如下:

深度MySQL执行时间(s)Neo4J执行时间(s)返回记录数
2 0.016 0.01 ~2500
3 30.267 0.168 ~110 000
4 1543.505 1.359 ~600 000
5 未完成 2.132 ~800 000

在深度为2时(即朋友的朋友),两种数据库性能相差不是很明显;深度为3时(即朋友的朋友的朋友),很明显,关系型数据库的响应时间30s,已经变得不可接受了;深度到4时,关系数据库需要近半个小时才能返回结果,使其无法应用于在线系统;深度到5时,关系型数据库已经无法完成查询。而对于图数据库Neo4J,深度从3到5,其响应时间均在3秒以内。

可以看出,对于图数据库来说,数据量越大,越复杂的关联查询,约有利于体现其优势。从深度为4/5的查询结果我们可以看出,图数据库返回了整个社交网络一半以上的人数。

5、Neo4J

Neo4J

根据DB-Engines(https://db-engines.com/en/ranking/graph+dbms)最新发布的图数据库排名,Neo4J仍然大幅领先排在第一位:

Neo4j是:

  • 一个开源

  • 无Schema

  • 没有SQL

  • 图形数据库

图形数据库也称为图形数据库管理系统或GDBMS。

Neo4j的官方网站:http://www.neo4j.org

Neo4J是由Java实现的开源图数据库。自2003年开始开发,直到2007年正式发布第一版,并托管于GitHub上。

Neo4J支持ACID,集群、备份和故障转移。目前Neo4J最新版本为4.1,分为社区版和企业版,社区版只支持单机部署,功能受限。企业版支持主从复制和读写分离,包含可视化管理工具。

5.1 标记属性图模型

(1)节点

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

(2)关系

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

(3)属性

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

(4)标签

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

6、Cypher图查询语言

Cypher是Neo4j的图形查询语言,允许用户存储和检索图形数据库中的数据。

举例,我们要查找Joe的所以二度好友:

image

查询语句如下:

MATCH 
  (person:Person)-[:KNOWS]-(friend:Person)-[:KNOWS]-
  (foaf:Person)
WHERE 
  person.name = "Joe"
  AND NOT (person)-[:KNOWS]-(foaf)
RETURN
  foaf  

Joe认识Sally,Sally认识Anna。 Bob被排除在结果之外,因为除了通过Sally成为二级朋友之外,他还是一级朋友。

7、小结

图数据库应对的是当今一个宏观的商业世界的大趋势:凭借高度关联、复杂的动态数据,获得洞察力和竞争优势。国内越来越多的公司开始进入图数据库领域,研发自己的图数据库系统。对于任何达到一定规模或价值的数据,图数据库都是呈现和查询这些关系数据的最好方式。而理解和分析这些图的能力将成为企业未来最核心的竞争力。

 

posted @ 2020-09-02 16:11  helloliyh  阅读(975)  评论(0编辑  收藏  举报