【摘要】图数据库不是存储图片的数据库,而是存储顶点与他们之间关系的数据库。与传统关系型数据库相比,图数据库的优势体现在直观性、灵活性、高性能等方面。图数据库支持多种图算法,可以应用于社交网络、金融欺诈检测、实时推荐引擎、知识图谱、网络/IT运营等多个领域。
随着近年来云计算、大数据、物联网等技术产业的快速发展,图数据库的使用率不断攀升,一些行业人士称图数据库是增长速度最快的数据库类型。如果说的是事实的话,那么我们了解它是非常有必要的。
人们广泛提及的图数据库到底是什么呢?下面请听笔者详细道来。
要了解图数据库,首先要了解什么是图。我们先从生活中常用的互联网产品入手。
拿“微信”举个例子。假设你的微信朋友圈中有若干好友:张三、李四、王五、赵六、七大姑、八大姨。而你七大姑的微信号里,又有若干好友:你、八大姨、Jack、Rose。
上述这若干个好友就组成了一个朋友关系网,而这个关系网就是数据结构当中的图(Graph)。
再拿“百度地图”举个例子。我们在用百度地图的时候,常常会使用导航功能。比如你在A地铁站附近,你想去的地点在F地铁站附近,那么导航会告诉你一个最佳的地铁线路换乘方案。
这许许多多地铁站所组成的交通网络,也可以认为是数据结构当中的图。
图,是一种比树更为复杂的数据结构。树的节点之间是一对多的关系,并且存在父与子的层级划分;而图的顶点之间是多对多的关系,并且所有顶点都是平等的,无所谓谁是父谁是子。
在图中,最基本的单元是顶点(vertex),顶点之间的关联关系,被称为边(edge)。一个顶点就是一个实体,两个实体之间的关系是就边,边分为有方向的边和无方向的边。
利用图的结构就可以对各种场景进行建模。
了解了图的概念,就不难理解什么是图数据库了。
图数据库,不是存储图片的数据库,而是存储顶点与他们之间关系的数据库。在计算机领域,图数据库(Graph Database,简称GDB)是一种使用图结构进行语义查询的数据库,用顶点、边和属性来表示和存储数据。
不同于传统的使用二维表格存储数据的关系型数据库,图数据库在传统意义上被归类为NoSQL(Not Only SQL)数据库的一种,也就是说图数据库属于非关系型数据库。
NoSQL数据库可以按照它们的数据模型分成4类:
这几类数据库的一些优劣势对比如下表所示。
分类 | 模型 | 优势 | 劣势 | 典型系统 |
---|---|---|---|---|
关系型数据库 | 表结构 | 数据高度结构化 | 面对多跳的关联关系查询低效或不支持 | MySQL Oracle |
键-值数据库 | 哈希表 | 查找速度快 | 数据无结构化,通常只被当做字符串或者二进制数据 | Redis |
列存储数据库 | 列式数据存储 | 查找速度快;支持分布横向扩展;数据压缩率高 | 数据插入效率偏低、按行的数据操作性能受限 | HBase |
文档型数据库 | 键-值对扩展 | 数据结构要求不严格;表结构可变;不需要预先定义表结构 | 无法进行关联操作,不适用于关系多的数据;占空间大,事务支持不好 | MongoDB |
图数据库 | 图结构 | 针对关联关系的建模、操作非常高效 | 高度结构化的数据处理能力不及关系型数据库 | Galaxybase Neo4j |
随着计算机硬件和软件的发展,数据库技术也在不断地发展。从数据管理的角度看,数据库技术过去经历了结构化数据阶段(Structured Data)和大数据阶段(Big Data&Fast Data),未来将朝深度关联数据阶段(Deeply Linked Data)发展。
在NoSQL四种分类中,图数据库从最近十年的表现来看已经成为关注度最高,也是发展趋势最明显的数据库类型。下图就是db-engines.com对近十年来所有数据库种类发展趋势的分析结果:
名称 | 说明 |
---|---|
顶点(vertex) | 图的基本组成元素,也称为“点(node)”,在实际应用场景中也称为“实体(entity)”。 |
边(edge) | 图的基本组成元素,作用为连接两个顶点(vertex)。边具有方向,可分为有向边和无向边。在实际应用场景中也常被称作“关系(relationship)” |
路径(path) | 多个相连的边(包括边连接的顶点)构成的一个序列成为一条路径,例如:a–b--c,单独的一条边(包括边两端的顶点)也是一个路径。 |
子图(subgraph) | 子图相对于全图(包含所有顶点和边)而言,是由全图的部分顶点和边组成,例如每一次查询结果可以作为一张子图。 |
属性(property) | 属性描述顶点和边的特征。图数据的属性主要分为点属性(vertex property)和边属性(edge property)。 |
RDF图模型 | RDF(Resource Description Framework)图模型使用顶点表示实体、资源、属性,使用边表示实体和实体之间的关系以及实体和属性的关系。RDF 形式上表示为SPO(Subject - Predicte - Object)三元组,有时候也称为一条语句(Statement)。RDF 比较多地被使用在知识图谱中,通常也称一条语句为一条知识。 |
属性图模型 | 属性图模型是一种不同于RDF三元组的图数据模型。这个模型使用顶点来表示实体,使用边来表示实体与实体之间的关系。同时,顶点和边上都可以通过键值对的形式附加上任意数量的属性。 |
原生图存储 | 原生图数据存储指的是不依赖第三方存储系统,包括关系型数据库、列式数据库、键-值数据库或其他一些通用数据库等。采用原生图存储的图数据库是专门为图的存储和管理而设计的。与非原生图存储相比,原生图数据库存储查询速度更快、规模更大、运行效率更好、对硬件的要求更低。 |
非原生图存储 | 非原生图存储指依赖第三方技术组件(如HBase和RocksDB等)实现数据存储,并在该组件上其上实现图语义。非原生图存储并未针对图数据存储进行优化。与原生图存储相比,非原生图数据库通常使用大量索引来完成读或写事务,不能实现免索引邻接,大大降低了查询速度。 |
免索引邻接 | 免索引邻接是一种图数据处理方式,是原生图存储和非原生图存储的关键区别。它是在点和边中保存相应点/边/属性的物理地址,直接寻址进行图遍历,免去了基于索引进行查找的开销,实现性能提升。免索引邻接在处理图遍历查询时,查询复杂度与数据集整体大小无关,仅与遍历所涉及的数据集有关。 |
图查询 | 图查询指使用查询语言进行图的遍历和查询。关系型数据库的查询语言是SQL,SQL适用于二维的数据结构,而图数据库处理的是高维数据,使用专门的图查询语言比SQL更加高效。目前主流的图查询语言包括Cypher和Gremlin等。 图查询通常用于局部数据分析,对查询任务时延要求很高。 |
Cypher、Gremlin | Cypher 是一种声明性的图查询语言,使用模式匹配描述需要的图数据,不需要编写图遍历代码,这使 Cypher 易读且易于理解。 Gremlin 是 Apache ThinkerPop 框架下的图遍历语言,可以是声明性的也可以是命令性的。Gremlin的查询是流式查询,使用 Gremlin 时需要指明具体的查询步骤。 |
近邻查询 | 近邻查询指的是从任一图中的顶点出发,可以查询它的直接相连的邻居(1跳邻居),或者是2跳关联的邻居,并以此类推。 |
K跳算法(K-Hop) | K跳算法(K-Hop)是典型的近邻查询,它的定义是从当前顶点出发与之最短距离为 K 跳(层)的所有顶点的集合。K代表一个较小的整数,通常在1-X之间,最小为1,最大几乎不会超过30。例如当K=1时,1-Hop 就表示查找某个顶点的全部1跳邻居。 |
广度优先搜索(BFS) | BFS指的是从某个顶点出发,由浅及深的遍历、搜寻相邻顶点的方式。它必须先把一层的邻居都遍历完毕后,才可以遍历之后一层的邻居。K邻查询就是典型的 BFS 操作。 |
深度优先搜索(DFS) | 相对于BFS的横向(广度)优先搜索而言,DFS则是纵向(深度)优先搜索,它会从当前顶点出发,先深度的搜索,在到达最大限定的搜索深度后或当前路径上无路可寻时折返回到上一层继续搜索,直到找到符合搜索终止条件的点、边结束,或遍历完全图而结束。 |
路径发现 | 用以识别最符合大型网络中两点之间某些条件下的最短路径。路径发现常见算法包括:最短路径、最小权重生成树和两两最短路径等。 |
图存储 | 图存储分为内存存储和落盘存储。 图的内存存储有两种常用的存储结构,包括邻接矩阵、邻接表。邻接矩阵存储是用两个数组来表示图,一个一维数组存储图中顶点信息,一个二维数组(即邻接矩阵)存储图中的边信息。邻接表存储是将数组与链表相结合的存储方法,用一个一维数组存储顶点,每个顶点的所有邻接点构成一个线性表,由于邻接点的个数不定,所以通常用链表存储邻接点。 图的落盘存储有两种常用的存储结构,包括邻接表、键值对(Key-Value)。邻接表存储就是邻接表内存结构的落盘形式。键值对存储即每一个键(Key)对应一个值(Value),通过一定格式拼接出点、边对象的主键,然后通过第三方键-值数据库进行存储。 |
图分析&图计算 | 图分析使用基于图的方法来分析关联的数据。我们可以查询图数据、可视化地探索图和展示图。图算法是图分析的工具之一。图算法通常在全图上运行复杂的算法,例如网页排名算法(PageRank)、单源最短路径算法(SSSP),需要遍历全图所有的顶点,经过多轮迭代后再将结果返回。我们可以使用图算法来发现隐藏的信息,验证业务假设,并对行为进行预测。 图分析和图算法具有广泛的应用潜力,从知识图谱、金融反欺诈、工业领域到预测流感的传播,都可以利用图数据库完成实时数据存储和高效查询。 |
那么图数据库为何成为关注度最高的数据库类型呢?接下来让我们了解图数据库和传统的关系型数据库对比,有哪些优势。
下表为关系型数据库与图数据库在各个维度的对比差异。
区别 | 关系型数据库 | 图数据库 |
---|---|---|
实体联系 | 一对一/一对多 | 多对多 |
表示方式 | ①一张表②连接两张表的中间表③一张表通过外键关联另一张表 | ①一类顶点②边③两张表对应图上的两个顶点和一条连接他们的边 |
查询性能 | 数据集增大,查询性能变低 | 数据集增大,查询性能趋于不变**(图数据库关联查询的时间只与满足条件的遍历图大小有关,与整体数据量无关)** |
离群数据处理 | 适合处理表格化结构**(离群数据会造成大量表连接、稀疏行和非空检查逻辑,性能降低)** | 适合处理离群数据 |
灵活性与敏捷性 | 存储数据前需要定义“模式”,当应用程序改变时,数据模式需要迁移,维护成本高 | 存储数据前不需要定义“模式”,适合新增/删除点、边数据,维护成本低,符合敏捷开发的需求 |
适用场景 | 适合浅遍历查询,反向查询成本高**(如:谁是Bob的朋友?–> Bob是谁的朋友?–> 谁是Bob的朋友的朋友们?多重连接查询使时间、空间复杂度变高,效率变低)** | 适合关联数据遍历查询**(图数据库使用免索引邻接)** |
与传统关系型数据库相比,图数据库的优势在哪里?
直观性
使用图(或者网)的方式来表达现实世界的关系更加直接、自然,在万物互联的物联网时代尤为突出。如果采用关系型数据,先将人物建表,再将关系建表,最后将数据进行映射,需要高度的抽象思维。在图数据上进行分析查询时,也可以直观地通过点边连接的拓扑,交互式找到想要的数据,不需要具备任何的专业知识。
灵活性
在日新月异的互联网应用中,业务需求会随着时间和条件的改变而发生变化。为了应对快速变化的业务需求,大多数使用关系型数据库、存储结构化数据的系统,往往需要采取推倒重来的方法重构整个应用系统,这样做的成本是巨大的。而图数据库采用非结构化的数据格式,具有很大的伸缩性和灵活性。随着需求的变化而增加的节点、关系及其属性并不会影响到原来数据的正常使用。
使用图数据库可以更接近业务需求的变化,可以更快地赶上需求发展变化的脚步。
高性能
在关联关系的处理上,用关系型数据库处理不可避免要用到表的 JOIN 操作,对性能的影响较大;而图数据库则是类指针直接跳转访问,能更高效的处理关联数据,比关系型数据库有2到4个数量级的性能提升。尤其是对大规模数据做多层(>3层)关联关系分析时,JOIN 操作往往因消耗过长时间而失败。
一般的图数据库至少包含图存储、图查询、图分析这三种功能。
图有几种内存存储结构:邻接矩阵、邻接链表、链式前向星、十字链表与邻接多重表。这里我们重点介绍两种常用的图内存存储方式。
图最直观的一种存储方法就是邻接矩阵存储法,也称为数组表示法。
邻接矩阵就是用一个一维数组存储图中顶点信息,用一个二维数组存储图中的所有边信息。这个二维数组称为邻接矩阵。
无向图
对于无向图来说,如果顶点 i i i和顶点 j j j之间有边,我们就将 a [ i ] [ j ] a[i][j] a[i][j]和 a [ j ] [ i ] a[j][i] a[j][i]标记为1。
有向图
对于有向图来说,如果顶点 i i i到顶点 j j j之间,有一条箭头从顶点 i i i指向顶点 j j j的边,那么我们就将
a [ i ] [ j ] a[i][j] a[i][j]标记为1,同理,如果有一条箭头从顶点 j j j指向顶点 i i i的边,那么我们就将 a [ j ] [ i ] a[j][i] a[j][i]标记为1。
带权无向图
对于带权图,以无向图为例,将矩阵中原本标记为1的元素替换为就对应的权重就可以。
通过上面的示例可以看出,对于无向图来说,邻接矩阵存在对称性, a [ i ] [ j ] a[i][j] a[i][j] 和 和 和 a [ j ] [ i ] a[j][i] a[j][i]只需要存储其中一个,这样就会导致存储空间浪费。
如果存储稀疏图(有很少条边或弧的图)的话,由于稀疏图里存在很多零节点,此时采用邻接矩阵存储法,那么每个零节点都需要存储,而这些零节点并没有存储价值,这样就会导致存储空间的浪费。
邻接矩阵存储法的优点:
邻接矩阵存储法的缺点:
邻接表存储是将顺序分配与链式存取相结合的存储方法。每个顶点对应一条单链表,链表中存储的是跟这个顶点连接的其他顶点。单链表的头结点为顶点顺序排列。
每个单链表中节点的链接次序并不固定,取决于建立邻接表的算法以及边的输入次序,因此邻接表的表示方式并不唯一。
无向图
对于无向图来说,头结点中的 data 元素存放顶点信息,firstarc 存放邻接点的信息。表结点中的 adjvex 元素存放邻接点的下标,nextarc 存放该顶点的下一个邻接点,负责将顶点的邻接点连起来。
有向图
对于有向图来说,如果边的方向是从顶点 i i i指向顶点 j j j,那么我们顶点 j j j就是顶点 i i i的表结点。
带权无向图
带权无向图与无向图类似,区别在于表结点加了 weight 元素,用于存放顶点与邻接点之间线的权重。
邻接表存储法的优点:
邻接表存储法的缺点:
SQL是关系型数据库的查询语言,但是图数据库的查询语言并没有复用SQL。这是因为本质上图数据库处理的是高维的图结构数据,而SQL所适用的是二维的表结构数据,SQL查询语言并不擅长对关系的查询和操作。使用专门的图查询语言比SQL更加高效。
图数据库领域的查询语言目前没有统一标准,虽然 19 年 9 月经过国际 SQL 标准委员会投票表决,决定将图查询语言(Graph Query Language)纳为一种新的数据库查询语言,但 GQL 的制定仍需要一段时间。
介于市面上没有统一的图查询语言标准,在本文中我们选取市面上主流的几款图查询语言来分析它们的用法,由于篇幅原因本文旨在简单介绍图查询语言和常规用法,更详细的内容将在进阶篇中讲述。
Gremlin 是 Apache ThinkerPop 框架下的图查询语言。Gremlin 可以是声明性的也可以是命令性的。虽然 Gremlin 是基于 Groovy 的,但具有许多语言变体,允许开发人员以 Java、JavaScript、Python、Scala、Clojure 和 Groovy 等许多现代编程语言原生编写 Gremlin 查询。
支持图数据库:Janus Graph 、Amazon Neptune、Galaxybase
Cypher 是一个描述性的图查询语言,允许不必编写图结构的遍历代码对图存储有表现力和效率的查询,和 SQL 很相似,Cypher 语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的。
支持图数据库: Neo4j、Galaxybase
nGQL 是一种类 SQL 的声明型的文本查询语言,nGQL 同样是关键词大小写不敏感的查询语言,目前支持模式匹配、聚合运算、图计算,可无嵌入组合语句。
支持图数据库:Nebula Graph
GSQL 是一种全局查询语言,支持类似 SQL 语法的点级、边级和属性级修改(插入、删除和更新)。GSQL 可以假定一个预定义模式,并将其作为元数据存储在数据库目录中。这可提高存储和访问效率,因为模式元数据可从点/边/属性表示中分解出来。
支持图数据库:TigerGraph
图分析和图计算是通过各种图算法从关联数据中挖掘图信息的技术。 图分析和图计算在业务层面并没有本质区别,只是图计算更关注于计算(算力)本身,而图分析则更多的是从业务层去看图系统中数据的分析与处理。
核心的图算法可以分成三类:路径搜索类、中心性分析类和社区发现类。
路径搜索是探索图中顶点通过边建立的直接或间接的联系。下面介绍几种常用的路径搜索类算法。
用途:广度优先搜索是一种基本的图遍历算法。从一个选定的顶点开始,依次遍历的该顶点所有的邻居,遍历完成后再遍历它邻居的邻居,遍历过的顶点不再遍历,直到不能遍历为止,以此类推。可见,广度优先搜索是一个非递归的过程,其特点是尽可能对横向的顶点先进行访问。广度优先搜索是其他图遍历算法的基础,比如最短路径,连通分量和紧密中心性等。
如何使用:广度优先搜索可用于定位像 BitTorrent 等对等网络中的邻居节点、用于社交网络中查找在特定距离内的人员等。
动图:
用途:深度优先搜索是另一种基本的图遍历算法。从一个选定的顶点出发,访问任意一个邻居顶点,再访问邻居顶点的任意一个未被访问的邻居顶点,如此下去,直到顶点的邻居顶点都已被访问过,就回溯它的前驱。如果这个访问和回溯过程返回到遍历开始的顶点,就结束遍历过程。可见,深度优先搜索是一个递归的过程,其特点是尽可能对纵向的顶点先进行访问。
如何使用:深度优先算法可用于游戏模拟,其中 每个选择或动作引发另一个操作,从而扩展成可能性的图。它将遍历选择图数据,直到找到最佳解决方案路径(即胜利)。
动图:
用途:计算给定顶点与所有其他顶点之间的路径,以及其与所有其他顶点路径上的权值总和(成本,距离,时间或容量等关系的权重)并得出总和最小的路径。简单来说就是找出连接两个给定点的最低成本路径。
如何使用:单源最短路径通常用于计算物理位置之间的路线,例如通过Google地图获取驾车路线。在逻辑路由中也很重要,例如电话呼叫路由(最低成本路由)。
中心性分析是指分析特定顶点在图中的重要程度及其影响力。下面介绍几种常用的中心性分析类算法。
用途:根据顶点之间的连接计算顶点相关性和重要性。一个顶点的排名来源于其传递链接的数量和质量。PageRank 被广泛认为是检测任何网络中有影响力的顶点的常用方式。
**如何使用:**PageRank 用于评估重要性和影响力,经常的用法是推荐推特账户以及一般的情绪分析。PageRank 也用于机器学习,以确定最有影响的提取特征。在生物学中,它被用来识别食物网中哪些物种的灭绝会导致物种死亡的最大连锁反应。
用途:用于度量每一个顶点的受欢迎程度。一个顶点的度越大就意味着这个顶点的度中心性越高,该顶点在网络中就越重要。度中心性算法可以计算有向图的出度中心性及入度中心性,也可以计算无向图的度中心性。
如何使用:Degree Centrality 着眼于用途的直接连通性,例如评估患者接近病毒或听取信息的近期风险。在社会研究中,可以用来预估人气或者其它情感。
用途:反应某个顶点到达其它顶点的难易程度。假定到所有其他节点的路径都是最短的,那么该节点就能够以最快的速度到达整个组。
如何使用:Closeness Centrality 适用于多种资源、交流和行为分析,尤其是当交互速度显着时。在新公共服务中,被用于确定最大可访问性的位置;在社交网络分析中,用于找到具有理想社交网络位置的人,以便更快地传播信息。
社区发现意在发现图中联系更紧密的群体结构,这个类别也被称为聚类算法或分群算法。下面介绍几种常用的社区发现类算法。
用途:标签传播算法的基本思路是用已标记顶点的标签信息去预测未标记顶点的标签信息,依据图结构划分社区。这种极其快速的图分割需要很少的先验信息,并且被广泛地应用于大规模的社区检测网络中。这是理解图组织的一个关键方法,通常是其他分析的主要步骤。
如何使用:Label Propagation 具有不同的应用,例如了解社会团体中的共识形成、识别在生物网络的过程(功能模块)中所涉及的蛋白质集合等等。甚至还可以用于半监督和无监督的机器学习作为初始的预处理步骤。
用途:强连通分量算法在图中找到强连通的顶点集合,其中同一集合的所有顶点构成一个强连通图,即集合中任意两顶点之间均有相互可达路径。常被应用于深度优先算法。
如何使用:Strongly Connected Components 通常用于在识别的集群上独立运行其他算法。作为有向图的预处理步骤,它有助于快速识别不连通的集群。在零售推荐中,它有助于识别具有强亲和性的组,然后将向那些尚未购买商品的群体推荐首选商品。
用途:弱连通分量算法能够在途中找到连通的顶点集合,其中同一集合中的所有顶点构成一个连通图。通常用于分析中的较早阶段,以理解图的结构。
如何使用:Weakly Connected Components 经常与其他算法结合使用,特别是对于高性能分组。作为无向图的预处理步骤,它有助于快速识别不连通的组。
用途:鲁汶模块化算法是基于模块度的社区检测算法,能够发现层次性的社区结构,其优化目标是最大化整个社区网络的模块度。模块度用于区分社区内和社区间链路密度的差异,是衡量每个顶点划分社区的好坏。通常情况下,一个优秀的分群方法将会使得社区内部的模块度高于社区与社区之间。
如何使用:Louvain 用于评估 Twitter、LinkedIn 和 YouTube 上的社交结构;用于欺诈分析,以评估一个组织是只存在一些孤立的不良行为,还是背后有一个连环欺诈。
用途:计算图中顶点所构成的三角形数量以及顶点倾向于聚集在一起的程度。平均聚类系数为1时表明有一个分组,0时没有连接。为使聚类系数有意义,它应该明显高于网络中所有关系随机的版本。
如何使用:平均聚类系数通常用于估计网络是否可能展现基于紧密集群的“小世界”行为。这也是集群稳定性和弹性的一个因素。流行病学家使用平均聚类系数来帮助预测不同社区的各种感染率。
图数据库应用于社交网络、金融欺诈检测、实时推荐引擎、知识图谱、网络/IT运营等多个领域。
图数据库可以轻松应对海量高度互连社交数据的实时存储和高效查询,帮助您快速构建复杂的社交网络系统。例如,在一个典型的社交网络中,常常会存在“谁认识谁,谁上过什么学校,谁常住什么地方,谁喜欢什么餐馆”等查询,传统关系型数据库对于超过3跳的查询往往会很低效甚至无法支持,但图数据库从基础层面提供了解决方案,轻松应对社交网络的各种复杂存储和查询。
在金融领域,图数据库经常用于欺诈检测。例如,通过贷款、分期消费者的联系人(或者联系人的联系人)信用信息,对用户进行信用评分,如果评分较低,则拒绝贷款或者提升利率;通过申请人的个人信息(包括电话号码、家庭住址),判断申请人信息是否属实。通常,欺诈者是通过“黑市”购买的用户信息然后拼凑出“个人信息”,并且这些信息会被反复使用,使用图数据库,可以快速发现申请人提供的个人信息与现有用户信息的关系。
图数据库非常适合实时推荐场景。您可以将用户的购买行为、位置、好友关系、收藏等数据实时存储在图数据库中,然后利用图数据库能对高度互连数据提供高效查询的特点,通过各种维度的快速查询实时进行多维度个性化推荐。例如,在某APP中,通过用户位置及以前的购买行为信息,当某用户A到达某商场B,APP可以向用户实时推荐附近的门店及商品等信息。
图数据库可以帮助您快速构建知识图谱。您可以将图谱数据存储在图数据库中,既可以通过外部输入实时更新,也可以对图数据库内部图谱信息进行分析,不断发现并完善图谱数据。例如,基于图数据库,您可以快速实现针对足球明星的知识图谱应用,帮助用户发现感兴趣的信息。
图数据库非常适合网络/IT运营相关场景。例如,您可以将路由器、交换机、防火墙、服务器等各种网络设备、终端及其拓扑信息存储在图数据库中,当某服务器或终端遭受恶意攻击或者受到感染时,您可以通过图数据库快速分析并找到传播路径,然后进行相关追踪及处理。
现在图数据库产品已经出现百家争鸣的局面,Neo4j作为老牌图数据的代表,尽管依然拥趸众多,但是由于其自身的缺陷,挑战者正在增多,而Galaxybase作为国产图数据库之光,正在成为其中的佼佼者。
Neo4j是一个流行的图数据库,它是开源的。Neo4j基于Java实现,兼容ACID特性,其主要优势是生态相对完善。
Neo4j使用链表作为图数据的存储结构。链表的物理存储单元可以连续,也可以非连续。链表由一系列元素组成,元素间的逻辑顺序通过链表中的指针链接次序实现,元素可以在运行时动态生成。
Neo4j 将图按不同的图名称存储在不同的路径下,每个图路径下按数据的分类存储在不同的文件中,顶点、边、标签和属性都是独立的存储文件。存储文件的划分,尤其是图结构和属性的文件分离会显著提高图遍历的性能。
JanusGraph是著名开源图数据库Titan的延续,Titan被DataStax收购后就不再开源。JanusGraph是在原Titan的基础上继续开源发布。JanusGraph拥有良好的扩展性,JanusGraph集群支持存储和查询数百亿级别的顶点和边。JanusGraph是一个事务数据库,支持高并发执行复杂的实时图遍历。
JanusGraph需要使用第三方数据库如HBase、Cassandra来作为底层存储。
Galaxybase是国内首个成熟、通用的商业化分布式并行图平台,解决了大规模关联数据高效存储、查询、计算的难题,高效实现海量数据的实时深链查询、分析。
Galaxybase以原生的方式直接存储图的点边数据,不依赖任何第三方存储系统,支持万亿边、数十万亿个属性,实现海量数据存储。以并行分布式集群存储系统为基础,Galaxybase采用了业界领先的数据分片技术存储图数据,独有的动态数据压缩算法能够以高压缩比对图的点、边数据进行压缩,数据落盘文件格式紧凑。
想了解更多图数据库相关知识请在微信搜索【创邻科技】关注该公众号。