1 概述
1.1 名词、术语
图形数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。图形数据库是一种非关系型数据库,它应用图形理论存储实体之间的关系信息。最常见例子就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。
直观感受图如下:
1.1.1 图数据库
图数据库即Graph DBMS,简称GDBMS。
图数据库是基于图论或图数据模型的NoSQL数据库类型。这些数据库由表示实体的节点和表示节点之间关系或连接的边组成。每个节点都有一个唯一的标识符、传出和/或传入边缘,以及属性或键值对。
图的概念中存在点、边、属性等概念。
1.1.2 Vertex/Node
Vertex:节点/顶点。用于表示现实世界中的实体对象。
Vertex Label:节点的类型,用于表示现实世界中的实体类型,比如“人”,“电话”。
1.1.3 Edge/Replationship
Edge:边,用于表示顶点间的联系。
Edge Label:边的类型,用于表示现实世界中的关系类型,比如“属于关系”、 “认识/朋友关系”等。目前大部分图数据库的边都是带方向的,分单向边和双向边。
1.1.4 Property
Property:属性,用于表示顶点的附加信息,采用KeyValue结构。Key就是 Property Key,Value就是具体的值。
1.1.5 Lable
Lable:标签,标签指一组拥有相同属性的节点,但是不强制要求相同,一个节点可以有多个标签。
1.1.6 Path
Path:路径,指图中任意两个节点都存在由关系组成的路径,路径有长短之分。
1.2 阅读对象
本说明书的预期读者包括:
(1)参与开发的项目人员;
(2)大数据技术人员;
(3)数据挖掘技术人员;
(4)上级领导;
(5)技术经理。
2 图数据库的诞生及基本特征
2.1 诞生
图数据库依托图论为理论基础,描述并存储了图中节点与其之间的关系,随着社交网络Facebook、电子商务以及资源检索等领域的发展,急需一种可以处理复杂关联的存储技术,而采用图形数据库组织存储、计算分析挖掘低结构化且互连接的数据则更为有效,因此图形数据库得W逐渐从实验室走出,同时反过来也极大地推动了图形数据库的飞速发展。
2.2 数据库存储引擎
图存储是所有图数据库最重要的功能之一。此功能允许数据库用户以图的形式存储信息。数据库引擎为快速存储、查询、索引和检索提供处理和索引功能。具有高级索引功能的图数据库允许用户从大型数据库中快速检索图信息。
2.3 查询
这是所有数据库管理系统中的一个基本功能。图数据库通常使用关联的图模型,最简单的查询技术称为无索引邻接。查询功能允许用户查找节点、扫描相邻节点、检索边缘和检索属性值。用户还可以执行更复杂的查询。
2.4 可伸缩性/分区/分片
尽管很难在多个服务器之间扩展图数据,但可以针对大型数据集、读取性能和写入性能进行扩展。此功能的可用性和扩展能力取决于您使用的产品。
2.5 ACID事务
所有数据库系统都具有事务处理功能。图数据库包括创建、读取、修改和删除信息所需的工具。它们还包括实时分析和报告等功能。图数据库还实现ACID(原子性、一致性、隔离性和持久性)功能,以确保持久、一致和完整的事务。
2.6 深度关联分析
原生并行图设计提供的最重要优势之一就是能够在超大图上实时处理遍历多步(10 步以上)的查询。原生图存储(加快每次数据访问速度)和并行处理(同时处理多个操作)相结合,可将许多用例从不可能变为可能。
2.7 高级聚合及分析
除了传统的按组划分聚合之外,原生并行图数据库还可以执行更复杂的聚合,这些聚合在关系型数据库中是不可想象或不切实际的。由于采用表模型,关系型数据库上的聚合查询受到数据分组方式的极大限制。与此相反,图的多维度性质和新型图数据库的并行处理功能可让用户高效地分割、切分、汇总、转换甚至更新数据,而无需预处理数据或使数据进入强模式。
3 图数据库 VS 关系型数据库
3.1 性能
大数据时代,人类社会的数据量呈爆发式增长。任何业务或产品所积累的数据一定是快速增长的,这没有疑义,但更重要的是,数据与数据之间的关系数目将呈现平方级增长:3个点最多有6条有向边,4个点最多有12个有向边,N个节点最多有N * (N-1)个有向边。
在传统的数据库中,随着关系的数量和深度的增加,关系查询的效率将急剧衰减,甚至崩溃。然而图形数据库的性能将几乎不变,即使数据每天都在增长。
为了有直接的效果,下图将不同的关联深度,图形数据库与关系型数据库执行时间对比如下表。
3.2 灵活性
图形数据模型的结构和模式随着解决方案和行业的变化而变化。开发团队不必提前对未来的需求进行详尽的建模(然后在某些业务/产品人员要求更改后彻底地推翻重做);相反,新的节点、关系、节点的属性还有关系的属性都可以后期添加到现有结构中,完全不会危及当前的功能。
3.3 敏捷性
使用图形技术开发完全符合当今的敏捷、测试驱动的开发实践,它允许数据层支持的应用程序随着业务需求的发展而快速迭代更新。
3.4 面向对象的思维
在图中,每个点和边都是自包含对象实例。在基于模式的图数据库中,用户定义点类型和边类型,就像对象类一 样。此外,将点关联至其他点的边有点类似于对象方法,因为边说明点可以“做”什么。要处理图中的数据,需要 “遍历”边,在概念上是指从一个点遍历到相邻点,保持数据的完整性。比较而言,在关系型数据库中,要关联两个记录, 必须将它们相连并创建新的数据记录类型。
4 图数据库应用案例
4.1 互联网应用
在移动互联网时代,面对庞大的社交关系,媒体传播网络,帮助客户快速、有效地发现海量数据中隐含的信息:
l 推荐好友、商品或资讯
通过好友关系、用户画像、行为相似性、商品相似性、资讯传播路径等,实现好友、商品或资讯的个性化精准推荐。
l 用户分群
通过对用户画像、行为相似度以及好友关系等,进行用户分群,实现用户群体精准管理。
l 舆情&****社会化聆听
通过对资讯传播、好友关系分析,识别意见领袖及热点话题,分析传播路径,增强舆情分析质量。
4.2 知识图谱应用
基于图引擎服务的知识图谱,融合各种异构异质数据,可以支持更大的规模以及更高的性能。
l 存储海量知识
融合各种异构异质数据,方便治理,规模可达千亿级
l 知识梳理
通过图上分析计算,合并相似本体,进行知识消歧
l 学习路径识别及推荐
通过知识点的先修关系,识别学习路径,针对薄弱知识点进行学习路径推荐
4.3 金融风控应用
面对层出不穷、复杂多样的个人和群体行为,帮助客户挖掘出潜在的风险,为客户保驾护航。
l 实时欺诈检测
提供实时的用户行为检测,识别敏感用户,信息不一致的用户,及时识别欺诈风险
l 群体发现
根据错综复杂的人物关系分析,进行用户分群,识别异常群体
l 失联人员追踪
可以轻松发现多人之间的关系,通过蛛丝马迹寻找失联人员
4.4 企业IT应用
网络&IT基础设备规模庞大、结构复杂,帮助客户深入了解设备状态、设备之间的关系,实现全网络设备智能监控与管理。
l 合理规划网络
快速确定故障节点对网络的影响,并在依赖的节点周围推荐备用路由,在新节点规划时精确规划网络位置
l 分析故障根因
快速轻松地识别任何网络或基础设施问题的根本原因,也让您能更好地了解构成IT基础架构的所有组件和关系。
l IT****基础设施管理
通过图形化网络设备关联关系,让您更好地了解设备、资产的状态,极大降低设备管理成本
5 常见开源图数据库
目前市场上主流的图数据库有: Neo4j、Arangob、Orientdb、Allegrograph、Ontotext Graphdb、Graph Story、Titan、Stardog、Graphbase、Dgraph、Oracle Space And Graph、Hypergraphdb、Blazegraph、Aster、Sparksee、Velocitygraph、Sqrrl Enterprise、Ibm System G Native Store、Graph Engine、Thingspan、Bitsy、Apache Giraph、Flockdb、Infogrid、Grapholytic,Weaver 等
根据https://db-engines.com/en/ranking_trend/graph+dbms调研分析,各个开源图数据库的活跃程度。见图****图数据库活跃折线图 ,下面依次简单介绍活跃指数前5的图数据库以及分布式的两个数据库JanusGraph、Dgraph(主要关注其:开源、成熟度、可扩展性、文档丰富度、性能、稳定性、运维成本、易用性)。
图 图数据库活跃折线图
5.1 Neo4j
Neo4j是一个流行的图形数据库,它是开源的。最近,Neo4j的社区版已经由遵循AGPL许可协议转向了遵循GPL许可协议。尽管如此,Neo4j的企业版依然使用AGPL许可。Neo4j基于Java实现,兼容ACID特性,也支持其他编程语言,如Ruby和Python。
Neo4J使用原生的图存储,以高度自由且规范的方式管理和存储数据。它可以明快地显示数据每个相关部分之间的链接,也可以在数据库查询中忽略不必要的细节。对比非原生图解决方案中,随着信息量的增加,使用面向对象的数据库存储数据库使数据操作变得越来越慢。Neo4J可以以每秒一百万条的惊人速度提供结果,因为数据中的链接部分或实体在物理上是已经相互连接的。(性能瓶颈)
l Cypher****图查询语言
Cypher是Neo4j的图形查询语言,允许用户存储和检索图形数据库中的数据。类似关系数据库中的SQL,Cypher设计借鉴了基于SQL、Python语言惯用做法。
举例,我们要查找Joe的所以二度好友:
查询语句如下:
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成为二级朋友之外,他还是一级朋友。
l Gremlin
Gremlin是Apache TinkerPop框架下的图遍历语言。Gremlin是一种函数式数据 流语言,用户可以使用简洁的方式实现对复杂的属性图(property graph)的遍历或查询。每个Gremlin遍历由一系列步骤(可能存在嵌套)组成,每一步都在数 据流(data stream)上执行一个原子操作。
5.2 Microsoft Azure Cosmos DB
Azure Cosmos DB 是 Microsoft 提供的全球分布式多模型数据库服务。 只需单击一个按钮,即可通过 Cosmos DB 跨任意数量的全球 Azure 区域弹性且独立地缩放吞吐量和存储。 你可以弹性缩放吞吐量和存储,并通过以下常用 API 利用个位数毫秒级的快速数据访问:SQL、MongoDB、Cassandra、表或 Gremlin。 Cosmos DB 为吞吐量、延迟、可用性和一致性保证提供综合服务级别协议 (SLA),这是其他数据库服务无法提供的。
Azure Cosmos DB通过自动缩放吞吐量、计算和存储来提供多主数据库功能。
5.3 ArangoDB
Arangodb以一种非常创造性和灵活的方式安排数据。数据可以存储为键或值对、图或文档,所有这些都可以通过一种查询语言访问。为了更安全的选择,查询中可以使用声明性模型。用户可以在一个查询中组合不同的模型及其特性的原因是,ArangoDB对所有数据模型都使用相同的核心和相同的查询语言。
Arangodb独特的特性是它能够在一个查询中组合不同的数据模型。这使得其展示方式令人印象深刻且美观。它比其他数据库具有更灵活的扩展性、增强的容错性、大容量的存储能力和更低的成本。arangodb最突出的特性是foxx,这是一个用于编写数据库中以数据为中心的javascript框架。
5.4 OrientDB
OrientDB是第二代分布式图数据库,以混合数据模型为特点,它包括可以在最复杂的场景中使用复制和分片,并以Apache2许可证提供开放源代码。ORIENTDB工作速度快,能够在最常见的硬件上每秒存储220000条记录,并且支持无模式、完整和混合模式,可以使用SQL作为查询语言之一。ORIENTDB使用身份验证、密码和静态数据加密等方式为所有机密数据提供安全保护。
l ArangoDB、OrientDB、Neo4J之间的对比。
表 ArangoDB、OrientDB、Neo4J之间的对比
5.5 Virtuoso
RDF数据库,运用于知识图谱的知识存储,国外比较火热。官方文档也不是很友好。国内做关联数据的感觉也不热,相关的资源不太好找。
5.6 JanusGraph(分布式)
JanusGraph 是一个高度可扩展的分布式图数据库,专门用于存储和查询包含数千亿个分布在多机群集中的极点和边缘的图形。 JanusGraph 是一个事务处理型数据库,可以支持数千个并发用户实时执行复杂的图遍历。
l 支持海量的图数据。 JanusGraph所支持的图的大小取决于集群中机器的数量。
l 支持大并发下图的事务和操作处理。 JanusGraph的事务处理能力与集群中的机器数量成正比,并且能够毫秒级的响应在海量图数据上的复杂的遍历查询操作。
l 通过Hadoop框架支持全量图分析和批量图处理。
l 支持对大图的顶点和边进行地理位置,数值范围和全文的检索。
l 原生支持图形遍历语言Gremlin
JanusGraph的存储系统依赖于像Cassandra、HBase、BerkelyDB等等这样的存储系统,索引系统依赖于Elasticsearch、Solr、Lucene等等。也基于这些原因,它和大数据生态结合的非常好,可以很好地和Spark结合做一些大型的图计算;但缺点就是它的维护成本会非常高,依赖于这么多的外部系统,搭建一套JanusGraph系统的同时需要搭建好几套依赖系统;另一方面就是稳定性,根据经验来看,系统越复杂,依赖系统越多,整体可控性就越差,稳定性风险就越大,学习成本高。
下图为JanusGraph架构:
5.7 Dgraph(分布式)
Dgraph是分布式,支持事务,快速的图形数据库,谷歌开发,DGraph 的目标是提供 Google 生产水平的规模和吞吐量,在超过TB的结构数据里,为用户提供足够低延迟的实时查询。DGraph 支持 GraphQL 作为查询语言,响应 JSON。
Dgraph是一个真正的分布式图数据库,而不是以master-slave模式复制数据全集的。它根据谓语分片,并在集群中备份谓语,查询可以在任何节点上执行,连接是基于分布式的数据执行的。
Dgraph架构图如下:
从开源、成熟度、可扩展性、文档丰富度、性能、稳定性、运维成本、易用性,分布式图数据库Dgraph、JanusGraph与单机版本的图数据库进行对比,详见下图。
6 技术选型分析
单机 Neo4j
开源社区老大,毋庸置疑,资源多技术成熟。学习成本低。单机首选。
分布式 JanusGraph
分布式对比:
总结一下两种图数据库特性的对比:
l 架构方面:JanusGraph构建在大数据组件之上,数据管理更方便。Dgraph是分布式的,但是独自成立一套分布式系统,数据需要通过其它手段写入集群中。
l 副本方面:JanusGraph需要依赖底层的存储DB,HDFS。Dgraph是强一致性的。
l 数据均衡方面: JanusGraph也是依赖底层的存储HDFS,Dgraph支持自动均衡。
l 语言方面:JanusGraph使用了比较常用的Gremlin,而Dgraph使用基于GraphQL改进的GraphQL。
l 可视化方面:JanusGraph依赖外部系统展示,Dgraph有自己的可视化系统。
l 维护成本方面:由于不依赖其他系统,Dgraph远低于JanusGraph。
附录 Neo4j. 常见问题
l neo4j数据库支持最大多少个节点?最大支持多少条边?
目前累积统计它有34.4亿个节点,344亿的关系,和6870亿条属性。
l 在数据库中,读/写性能跟节点/边的数量有关吗?
这个问题意味着两个不同的问题。单次读/写操作不依赖数据库的大小。不管数据库是有10个节点还是有1千万个都一样。 — 然而,有一个事实是如果数据库太大,你的内存可能无法完全缓存住它,因此,你需要频繁的读写磁盘。虽然很多用户没有这样大尺寸的数据库,但有的人却有。如果不巧你的数据库达到了这个尺寸,你可以扩展到多台机器上以减轻缓存压力。
l neo4j数据库支持的读/写并发请求最大数量是多少呢?
在并发请求上面没有任何限制。服务器的并发量更多的是依赖于操作本身的性能(高压写操作,简单读,复杂的遍历等等),以及使用的硬件性能。据粗略估计,在遍历最简单路径时每毫秒可以达到1000次请求。在讨论了指定的用户案例后,我们能得到更好的性能优化方案。
l 如何进行数据库查询?
核心 API, Traversal API, REST API, Cypher
l 官方文档链接