1.2.3 知识图谱存储与管理
随着知识图谱规模的日渐增长,其存储管理与查询处理也变得更加重要。知识图谱存储是指以计算机可读的数据格式对知识图谱的模式层和数据层进行物理保存,包括基本的资源、事件、关系、属性等知识。知识图谱的底层存储方案直接关乎数据查询的效率,通常需结合知识应用场景设计。
知识图谱数据集包括两个部分:显性的三元组(Explicit Triples)及隐性的三元组(Implicit Triples)。其中,显性的三元组通常以数据的形式直接给出,而隐性的三元组蕴含于各元素所附带的语义中,需要根据知识图谱的本体及规则集从显性的三元组中推理得到。按照存储结构划分,知识图谱存储有关系表和图两种形式:基于关系表存储的主要有三元组表、水平表、属性表、垂直划分和六重索引等,与知识图谱的图模型存在巨大差异,查询、维护、删改等操作成本高,难适应大规模图谱数据的建设与管理;以图形结构对数据进行存储的图存储是目前主流的知识图谱存储方式,相较于关系表存储,它在关联查询的效率上有着显著的提升,尤其在深度关联查询时表现更为优异。根据图谱数据格式,常见的图存储方案分为面向RDF的三元组数据库及面向属性图的图数据库两种。
1.面向RDF的三元组数据库
面向RDF的三元组数据库是专门为存储大规模RDF数据而开发的知识图谱管理系统,被称为Triple store或RDF store,支持声明式查询语言—SPARQL。三元组数据库是一种通用的、用于描述事物的图模型,通过统一资源标识符URI标识资源,用户可以对网络中的资源基于特定的协议进行交互操作。目前,主要的RDF三元组数据库包括Virtuoso、GraphDB、MarkLogic和BlazeGraph及源自学术界的RDF-3X(仅支持Linux的科研原型系统)和gStore。图1-7给出了DB-Engines上排名靠前的三元组数据库,其中,MarkLogic、Virtuoso、GraphDB常年稳居前列,下面将分别进行详细介绍[21]。
图1-7 DB-Engines上排名靠前的三元组数据库
1)多模型数据库MarkLogic
MarkLogic是美国同名软件公司推出的多模型数据库,具备NoSQL和可信的企业数据管理功能,至今已有20年的发展历程,是集文档、语义图、地理空间和关系型模型优点于一体设计的可扩展、高性能数据库,内置的搜索引擎可为JSON、XML、文本、RDF三元组、地理空间和二进制文件(如PDF、图像、视频)提供统一的搜索和查询界面,减少标准查询构建、配置索引的时间。MarkLogic在文档、图形数据和关系型数据的存储和查询方面具备极高的灵活性且可以通过三元组在文档间建立关联。图1-8展示了MarkLogic多模型描述示例,包含三种有关Jen的事实和关系三元组的描述方式,用户可在保证数据一致性的前提下根据实际需求选择恰当的数据模型组合。
MarkLogic的最大特点在于其数据集成功能敏捷且简单,无须预先定义模式(数据可以按照原本的格式存储)或依赖复杂的ETL过程。它可以在商用硬件的集群中水平扩展到数百个节点、PB级数据、数十亿个文档,每秒可处理数万笔事务,集群随着数据或访问需求的增长或收缩而水平扩展,并提供自动故障转移、复制和备份服务。MarkLogic非商用版采用注册制,MarkLogic Console界面如图1-9所示。MarkLogic支持JavaScript脚本、SPARQL Query、SPARQL Update、SQL、XQuery查询方式及文本、XML、HTML结果形式。
图1-8 MarkLogic多模型描述示例
图1-9 MarkLogic Console界面
2)混合数据库管理系统Virtuoso
Virtuoso是语义网项目常用的一种多模型混合关系数据库管理系统(Relational Database Management System, RDBMS),支持对关系表和属性图的数据管理,是一个高性能、可扩展、安全和基于开放标准的平台。其基础源自开发了多年的传统关系数据库管理系统,因此具备较为完善的事务管理、并发控制和完整性机制。Virtuoso作为较成熟的语义数据库,在其数据库基础上可支持关联数据的发布和应用,并支持查询语言SPARQL。作为知识存储系统,Virtuoso支持客户端和服务器后台两种数据加载方式,客户端数据加载(见图1-10)适用于单个较小文件的上传加载,服务器后台批量加载则适用于多个大文件加载。
图1-10 客户端数据加载
以Virtuoso服务器后台数据加载实验为例,代码如下:
基于136个文献类RDF数据文件(共计2.97亿个RDF三元组、容量40.8GB)进行数据加载测试,总耗时2小时,平均38485个三元组/秒。同时,加载DBpedia开源数据共147个文件(共计30亿个RDF三元组、容量700GB),耗时16小时,平均51574个三元组/秒。Virtuoso中SPARQL查询示例如图1-11所示,包含查询特定论文的查询界面和结果界面,从近40亿个RDF三元组中查询单个实体对象耗时18.45毫秒。
此外,Virtuoso支持HTTP URI实体解析,提供面向计算机的互操作接口,可返回多类型查询数据结果片段。
图1-11 Virtuoso中SPARQL查询示例
3)图形数据存储引擎GraphDB
GraphDB是基于OWL标准开发的具有高效推理、聚类和外部索引同步支持的企业RDF三元组库,同时支持属性图管理,可以链接到大型知识图谱中的文本和数据,具备支持任何类型数据(CSV、XLS、JSON、XML等)的解析与RDF转换格式和存储、SPARQL编辑器、FTS连接器、可视化等功能。还可以基于RDF数据进行语义推理,通过使用内置的基于规则的“前向链”(Forward Chaining)推理机,由显式知识推理得到导出知识并优化存储。导出的知识会在知识库更新后相应地同步更新,支持数据调和、本体可视化和高性能可扩展的聚类,可与MongoDB集成,用于大规模元数据管理、基于图嵌入的语义相似性搜索及快速灵活的全文搜索。
GraphDB分为企业版、标准版和社区免费版,其中,企业版支持分布式部署,允许查询吞吐量与集群节点的数量成比例地扩展,可与Solr、Elasticsearch集成进行全文搜索;免费版支持多个图数据库的创建管理,GraphDB的数据文件管理如图1-12所示。从版本8开始,GraphDB与RDF4j框架完全兼容。GraphDB实现了RDF4j的存储与推理层(SAIL),可以使用RDF4j的RDF模型、解析器和查询引擎直接访问GraphDB。
图1-12 GraphDB的数据文件管理
GraphDB支持网页客户端单个较小文件的上传加载功能,也支持网络端本地或服务器目录的批量大文件上传,并提供丰富的解析参数设置功能。加载同样的136个文献类RDF数据文件总用时约6小时,查询特定论文结果返回时长0.1秒,与Virtuoso相比,效率较低。从官方的介绍中可以看出,Virtuoso、GraphDB均是多模型混合存储数据库,同时支持RDF图和属性图数据管理,由于其SPARQL的图形遍历性较差,实际应用中多作为RDF三元组数据库使用。
2.面向属性图的图数据库
原生图数据库主要是以属性图的方式存储、处理、查询和展示数据,在关系遍历和路径发现等应用中性能优越,主要代表有Graph1.0时期最为流行和成熟的Neo4j。随着业界在图数据库扩展性方面的挑战逐渐凸显,JanusGraph、OrientDB等开源分布式大规模图数据库应运而生,其中OrientDB功能相对全面,支持文件、图(包括原生图)、键值对等多模型数据管理和SQL、Gremlin多种查询语言,JanusGraph则在底层数据库之上封装一层,实现图的语义,可基于第三方分布式索引库Elasticsearch、Solr和Lucene实现数据快速检索,作为图计算引擎使用。现对DB-Engines上排名靠前的图数据库(见图1-13)进行说明。
图1-13 DB-Engines上排名靠前的图数据库
1)Neo4j
Neo4j是由Java实现的开源NoSQL图数据库,常年处于DB-Engines图数据库排名首位,是基于数学中的图论所实现的一种数据库,数据对象/实体被保存为节点,关系则被保存为链接地址的形式。Neo4j存储管理层为属性图结构中的节点、节点属性、边、边属性等均设计了存储方案,因此与其他数据库相比,它可以更加高效地存储、查询、分析和管理高度关联的图谱数据。例如,在遍历关系时,只要在Neo4j中找到起始节点、读取节点的邻接边就可以访问该节点的邻居,具有“无索引邻接”特性(Index-Free Adjacency),每个节点都可被当成邻接节点的“局部索引”,这种查询方式与“全局索引”相比更能节省时间开销。
Neo4j图作为属性图,其数据模型形式化定义为六元组PG=,其中是有标签的有向多重图,V和E分别表示节点和边的集合,src:E→V、tgt:E→V、lbl:E→V分别表示每条边都有起始节点、终止节点和标签,φ:V∪E→2P表示属性键值对的集合[22]。相较于面向RDF的三元组数据库,图数据库在数据关系检索方面具有更大的优势,通常以简单的Cypher语句便可实现查询功能,且执行效率更加高。Neo4j V4.1.11启动后浏览器界面如图1-14所示,具体使用将在后续章节中详细介绍。
图1-14 Neo4j V4.1.11启动后浏览器界面
2)JanusGraph
JanusGraph是一种面向分布式集群的开源图形数据库管理系统,可以存储千亿级节点和边的大规模图,支持高并发复杂实时图遍历和分析查询,大型图上的复杂遍历查询效率达毫秒级。JanusGraph集成第三方分布式索引库Elasticsearch、Apache Solr、Apache Lucene作为索引后端,可作为图形数据库引擎使用,支持全文检索。
3)TigerGraph
TigerGraph是一款“实时原生并行图数据库”,可在云端、本地等多终端部署,支持水平和垂直扩展,可以对集群中的图数据自动分区,具有非常强大的查询语言和算法库。相较其他图数据库,TigerGraph在多跳路径查询、批量数据加载和实时更新方面优势尽显,2跳路径查询可比其他图数据库快40~337倍,数据加载速度是其他图数据库的1.8~58倍,存储相同原始数据所需的磁盘空间更小。TigerGraph支持查询语言GSQL,该语言结合SQL风格的查询语法和Cypher风格的图导航语法,并加入过程编程和用户自定义函数。
选择合适的知识图谱存储方案是支撑知识应用的基础,实际应用场景中也不乏继续沿用基于表结构的关系型数据库的情况,对于高度结构化的数据存储差异不大,但在2跳、3跳路径查询方面较为低效。结合DB-Engines数据库排名,从存储方法、系统特征等角度对常用的图谱数据库进行比较测评,综合分析得出结果:数据规模上,稍高配置的单机系统和主流RDF三元组数据库可以支持百万级三元组的存储管理,更大规模则需要部署具备分布式存储与查询能力的数据库系统。随着三元组库和图数据库的融合发展,基于图数据库的RDF三元组管理也是很常用的方式,前提是需要根据图谱映射规则对RDF三元组进行格式转换,生成属性图的格式再进行管理。