▕ 作者:杨明皓,英国谢菲尔德大学硕士毕业。原海航集团大数据相关技术负责人,海南大数据产业联盟专家,现任普适智能COO;擅长大数据领域以及关系网络领域技术,有着丰富的银行金融业项目实施经验,并成功落地了多个基于知识图谱技术的项目。
导读
上期提到关系网络技术发展,本文将详细讲述图数据库的技术发展。
关系网络的数据需要完成基本的图结构数据存储,同时也要支持上层应用对关系网络中的数据进行实时查询,知识推理,离线大规模图计算甚至是实时大规模图计算等,所以专门针对关系网络数据存储做了优化的图数据库成了关键的组件。目前工业界的图数据库基本都是基于带标签的属性图结构来设计的。
▐ 图数据库技术发展
1、图数据库与关系型数据库的区别
为什么要使用专门的图数据库来对关系网络数据进行存储?这里必须提到图数据库和关系型数据库的区别。
关系型数据库存储的是一件客观事实的描述,比如用户购买了某件具体的商品,客户申请了一笔贷款,它根据关系型数据库的四范式设计原则构建在关系模型之上。
关系型数据库和图数据库的主要差异是数据存储的方式,关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据,尤其在查找某个区间内的数据组很有优势,但是却无法清晰直观地体现出数据之间包含的潜在关系。
关系型数据库是以实体建模这一基础理念设计的。实体之间的关系需要创建一个关联表来维护,当需要描述大量关系时,传统的关系型数据库已经不堪重负;联系确实存在于关系型数据库自身的术语中,但只出现在建模阶段,作为连接表的手段,对于关联关系却什么都做不了。所以图数据库经过特别设计的数据存储结构,能加快实体之间的关系查询,这就是图数据库的主要优势之一。
2、图数据库的发展
图数据库的发展主要有两个阶段。
第一个阶段主要是解决关系网络数据的存储,查询和分析问题,能支持上层应用对关系网络数据的OLTP业务需求以及离线大规模图数据的OLAP业务需求。
第二阶段的图数据库不光满足OLTP业务和离线OLAP业务,采用内置的MPP计算引擎,实现实时大规模图数据的OLAP业务。
DB-Engines网站2020年图数据库使用率排名
为了满足关系网络数据的存储,查询和大规模图分析的性能,图数据库在其底层数据结构的设计上也尽量贴合关系数据的搜索习惯,减少磁盘的I/O时间。传统关系型数据库的B+树数据结构适合范围数据的检索以及随机数据读取上有优秀的性能,而对于关系数据的遍历则显得相形见绌了。
图数据库针对关系网络的数据特点,采用了免索引领接,邻接表,点边数据以KCV的形式组织等等方式存储关系网络数据,其根本目的在于对邻边和邻节点的快速查询遍历,减少随机读写的磁盘寻道时间,提升关系网络数据的I/O性能。
原生图数据库不仅在数据存储文件的组织形式上做了优化,在计算机物理存储层面也充分利用内存缓存来减少数据的读取延迟甚至是提升写入效率。
3、几种典型图数据库的分析
NEO4J是最早在工业界大规模使用的图数据库,也是由NEO4J最早提出原生图数据库的概念,NEO4J认为原生图数据库应该具备原生图存储和免索引领接两个特性。
原生图存储是指在存储层面针对关系网络数据的存储和管理而设计优化的;而免索引领接就是上面提到的,在搜索邻边和邻节点时减少磁盘寻道时间提升I/O性能,NEO4J主要通过固定存储单元大小以及双向链表的技术来实现。
同时NEO4J也是非分布式的数据存储和处理的图数据库,因为NEO4J认为单机下没有分布式的网络I/O和聚合操作所带来的时间损耗,再加上对磁盘,内存和CPU的优化,查询性能可以达到最优。
即使是NEO4J的集群模式,也是数据副本拷贝的形式,如果理解NEO4J存储结构的话也不难明白为什么其单机性能最优。Neo4J同时提供了社区版和商业版。
Neo4J存储端数据结构
ArangoDB是基于C++的多数据模型数据库,支持Document, K-V, Graph等多种数据模型的存储。
ArangoDB和Wikipedia社区都反对了NEO4J提出的原生图数据的定义,他们认为原生图数据库应该是使用具有点,边和属性表示的图数据结构进行存储和语义查询的数据库,而与内部的数据文件存储形式无关,更重要的应该在于数据模型和算法的使用。
ArangoDB采用基于HASH和链表的混合索引形式组织图数据,Arango将所有的边数据都存储在一张大的哈希表中,同时将每个节点关联的所有邻边都存储在一个双向链表中。该数据结构在保证图遍历性能的同时,对图数据的修改和删除也提供了很好的性能。同时ArangoDB是支持横向拓展的分布式数据库,并提供了社区版和商业版。
ArangoDB存储端数据结构
Titan是一个开源的分布式图数据存储引擎,向下支持多种基于Google Bigtable 的KCV数据模型的数据库,包括 Apache Cassandra, Apache HBase, Google Cloud Bigtable, Oracle BerkeleyDB;向上支持Gremlin 图查询语言对业务系统提供关系网络数据查询,同时兼容Spark 分布式计算框架,提供对大规模关系网络数据进行离线OLAP 分析。2015年Titan被DataStax公司收购,进行商业化改造,开源社区开发者新fork出一个分支,封装成JanusGraph项目并持续维护。
JanusGraph基于Google Bigtable 的KCV数据模型设计,采用边切割的方式存储关系网络数据,将点的属性,边的属性,邻节点key信息存在一起封装成KCV的数据结构,通过key进行索引,减少邻边和邻节点的遍历时间。其关系网络数据处理的时间复杂度还是需要根据其具体的存储层组件来进行分析,如果是采用HBase做为存储端,那显而易见在关系网络数据写入方面会有一定的优势。
JanusGraph也是许多国内一线大厂封装自己图数据库的基本开源框架,基于商业敏感性这里也就不一一列举了。国内厂商对于JanusGraph的二次封装优化策略主要在于ID的分配机制,边的索引优化等。
JanusGraph存储端数据结构
TigerGraph是商业图数据库,其采用C++语言开发,在关系网络数据的存储和查询方面做了物理层的优化,充分使用了计算机的缓存资源,同时也提供了高压缩比的数据存储策略。
通过内置图存储引擎和图计算引擎并存的技术,采用MPP计算模型,实现实时的OLAP分析。相比JanusGraph采用Spark框架实现MPP计算,TigerGraph的图中每个顶点和边同时作为存储和计算的并行单元,能提供更高的计算效率和性能。
微软的Azure云计算服务的Cosmos DB,亚马逊云计算服务的Neptune以及阿里云的GDB图数据库,都是各个云厂商推出的云上图数据库服务。目前,图数据库的技术发展还没形成一套完整的工业标准,但是随着关系网络技术的发展和普及,多元化的图数据库共存在市场上的局面还暂时不会改变, 实时大规模关系网络OLAP技术也将是未来发展的趋势。
参考书籍:
[1] 图数据库lan Robinson, Jim Webber, Emil Eiferm 著 刘璐,梁越译
[2] 知识图谱概念与技术 肖仰华 等编著
参考网络材料:
[1]https://www.arangodb.com/2016/04/index-free-adjacency-hybrid-indexes-graph-databases
[2] https://www.cnblogs.com/zhangzl419/p/9100498.html
[3] https://zhuanlan.zhihu.com/p/36183004
关于我们
▼
普适智能科技有限公司(简称:普适智能PUSHI AI)是一家专注于数据处理和知识图谱技术的人工智能高科技公司,致力于为企业提供一站式认知智能服务。
普适智能专注于技术创新型人才提供技术分享和学习内容,使创新成为持续的核心竞争力。
如果您感兴趣,欢迎加入PUSHI AI社群,共同探索AI。关注普适智能并评论即可加入我们~