知识图谱之图数据库如何选型:知识图谱存储与图数据库总结、主流图数据库对比(JanusGraph、HugeGraph、Neo4j、Dgraph、NebulaGraph、Tugrapg)
知识图谱之图数据库如何选型:知识图谱存储与图数据库总结、主流图数据库对比(JanusGraph、HugeGraph、Neo4j、Dgraph、NebulaGraph、Tugrapg)
1.知识图谱
1.1 KG 简单知识点
数据模型
知识图谱的两种主流数据模型(数据的结构、操作和约束):
数据库管理系统
知识图谱数据模型的主流数据库管理系统:
RDF三元组库和原生图数据库
查询语言
知识图谱查询语言:
SPARQL、Cypher、Gremlin、PGQL 和 G-CORE
注: 1. Gremlin 不显式支持可选 (optional) 操作, 但可以通过其他语法特性等价模拟. 2. 可通过 DISTINCT 关键字支持集合语义. 3. PGQL 默认的图模式匹配查询语义是子图同构, 可使用 ALL 关键字改为子图同态. 4. SPARQL 中只有当使用 * 运算使得属性路径查询无法等价写为 CGP 时才使用集合语义. 5. Cypher 可通过 shortestPath 函数支持最短路径语义. 6. Gremlin 中其他语义可以被模拟出来. 7. PGQL 路径查询可通过用户定义函数实现其他语义. 8. PGQL 路径查询返回单条最短路径, 集合和包语义相同. 9. G-CORE 路径查询可通过 ALL 关键字改为任意路径语义. 10. CRUD 分别代表 CREATE 创建、READ 读取、UPDATE 更新和 DELETE 删除
1.2.知识图谱存储方式
关系型存储
存储大规模知识图谱,且便于对知识进行更新,但当知识图谱查询的选择性较大时,查询性能明显下降
原生图存储
无邻接索引的特性能够高效处理复杂的知识图谱查询,但有限的存储容量和不灵活的更新机制使得原生图存储不能很好地应用于大规模知识图谱中
2.基于关系的知识图谱存储管理
关系数据库目前仍是使用最多的数据库管理系统。基于关系的知识图谱存储方案, 包括: 三元组表、水平表、属性表、垂直划分、六重索引和 DB2RDF。
2.1 三元组表
三元组表 (triple table) 是将知识图谱存储到关系数据库的最简单、最直接的办法, 就是在关系数据库中建立 一张具有 3 列的表, 该表的模式为 triple_table(subject,predicate,object),subject、predicate 和 object 这 3 列分别表示主语、谓语和宾语。
三元组表存储方案虽然简单明了,但三元组表的行数与知识图谱的边数相等,其最大问题在于将知识图谱查询翻译为 SQL 查询后会产生三元组表的大量自连接操作
RDF 数据库系统 3store
2.2 水平表
水平表 (horizontal table) 存储方案同样非常简单。水平表的每行记录存储知识图谱中一个主语的所有谓语 和宾语。实际上, 水平表相当于知识图谱的邻接表。水平表的列数是知识图谱中不同谓语的数量, 行数是知识图 谱中不同主语的数量。
RDF 数据库系统 DLDB
水平表的缺点在于:
(1) 所需列的数目等于知识图谱中不同谓语数量,在真实知识图谱数据集中,不同 谓语数量可能为几千个到上万个,很可能超出关系数据库所允许的表中列数目上限
(2) 对于一行来说,仅在极 少数列上具有值, 表中存在大量空值, 空值过多会影响表的存储、索引和查询性能
(3) 在知识图谱中,同一主语 和谓语可能具有多个不同宾语,即一对多联系或多值属性,而水平表的一行一列上只能存储一个值,无法应对这种情况 (可以将多个值用分隔符连接存储为一个值,但这违反了关系数据库设计的第一范式);
(4) 知识图谱的更新往往会引起谓语的增加、修改或删除,即水平表中列的增加、修改或删除,这是对于表结构的改变,成本很高。
2.3 属性表
属性表 (property table) 存储方案是对水平表的细分,将同类主语存到一个表中,解决了表中列数目过多的问题。
RDF 三元组库 Jena
属性表既克服了三元组表的自连接问题,又解决了水平表中列数目过多的问题。实际上,水平表就是属性表的一种极端情况,即水平表是将所有主语划归为一类,因此属性表中的空值问题得到很大的缓解。
属性表仍存 在如下一些缺点:
(1) 对于规模稍大的真实知识图谱数据,主语的类别可能有几千到上万个,需要建立几千到上万个表,这往往超过了关系数据库的限制
(2) 即使在同一类型中,不同主语具有的谓语集合也可能差异较大,会造成与水平表中类似的空值问题
(3) 水平表中存在的一对多联系或多值属性存储问题在属性表中仍然存在
2.4 垂直划分
垂直划分 (vertical partitioning) 存储方案,为每种谓语建立一张两列的表(subject,object), 表中存放知识图谱中由该谓语连接的主语和宾 语, 表的总数量即知识图谱中不同谓语的数量.
SW-Store
优点:
(1) 谓语表仅存储出现在 知识图谱中的三元组, 解决了空值问题;
(2) 一个主语的一对多联系或多值属性存储在谓语表的多行中, 解决了 多值问题;
(3) 每个谓语表都按主语列的值进行排序, 能够使用归并排序连接 (merge-sort join) 快速执行不同谓 语表的连接查询操作.
缺点:
(1) 需要创建的表的数目与知识图谱中不同谓语数目相等,而大规模的真实知识图谱 (如 DBpedia、YAGO、WikiData 等) 中谓语数目可能超过几千个,在关系数据库中维护如此规模的表需要花费很大开销
(2) 越是复杂的知识图谱查询操作,需要执行的表连接操作数量越多,而对于未指定谓语的三元组查询,将发生需要连接全部谓语表进行查询的极端情况
(3) 谓语表的数量越多,数据更新维护代价越大,对于一个主语的更新将涉及多张表,产生很高的更新时 I/O 开销。
2.5 六重索引
六重索引 (sextuple indexing) 存储方案是对三元组表的扩展,是一种典型的 “空间换时间” 策略,其将三元组全部 6 种排列对应地建立为 6 张表,即 spo(主语,谓语,宾语)、pos(谓语,宾语,主语)、osp(宾语,主语,谓语)、sop(主语,宾语,谓语)、pso(谓语,主语,宾语)和 ops(宾语,谓语,主语)。不难看出,其中 spo 表就是原来的三元组表。六重索引通过 6 张表的连接操作不仅缓解了三元组表的单表自连接问题,而且提高了某些典型知识图谱查询的效率。
RDF-3X , Hexastore
优点:
(1) 知识图谱查询中的每种三元组模式查询都可以直接使用相应的索引进行快速 前缀范围查找;
(2) 可以通过不同索引表之间的连接操作 直接加速知识图谱上的连接查询.
缺点:
(1) 虽然部分缓解了三元组表的单表自连接问题, 但需要花费 6 倍的存 储空间开销、索引维护代价和数据更新时的一致性维护代价, 随着知识图谱规模的增大, 该问题会愈加突出;
(2) 当知识图谱查询变得复杂时, 会产生大量的连接索引表查询操作, 依然不可避免索引表的自连接.
DB2RDF 是一种面向实体的 RDF 知识图谱存储方案
IBM DB2
4.原生知识图谱存储管理
4.1.老牌图数据库
原生知识图谱存储是指专门为知识图谱而设计的底层存储管理方案
目前主要的原生图数据库有 Neo4j、gStore、JanusGraph、OrientDB 和 Cayley。
4.1.1Neo4j
Neo4j 是目前最流行的属性图数据库,其原生图存储层的最大特点是具有 “无索引邻接(index-free adjacency)” 特性。所谓 “无索引邻接” 是指,每个顶点维护着指向其邻接顶点的直接引用,相当于每个顶点都可看作是其邻接顶点的一个 “局部索引”,用其查找邻接顶点比使用“全局索引” 节省大量时间。这就意味着图导航操作代价与图大小无关,仅与图的遍历范围成正比
4.1.2 gStore
gStore 将 RDF 数据图中每个资源的所有属性和属性值映射到一个二进制位串上。具体而言,对于每个属性 或属性值,gStore 都定义一个固定长度的位串并将位串中所有位置为 0。然后利用若干个预先定义的字符串哈希函数将属性或属性值按照标识符映射到若干个小于位串长度的整数值,进而将位串上这些值所对应的位置置为 1。
4.1.3 分布式图数据库:JanusGraph
JanusGraph 是在原有 Titan 系统基础上继续开发的开源分布式图数据库。JanusGraph 的存储后端与查询引擎是分离的, 可使用分布式 Bigtable 存储库 Cassandra 或 HBase 作为存储后端。JanusGraph 借助第三方分布式索引库 ElasticSearch、Solr 和 Lucene 实现各类型数据的快速检索功能,包括地理信息数据、数值数据和全文搜索。JanusGraph 还具备基于 MapReduce 的图分析引擎,,可将 Gremlin 导航查询转化为 MapReduce 任务。
4.1.4 OrientDB
OrientDB 最初是由 OrientDB 公司开发的多模型数据库管理系统。OrientDB 虽然支持图、文档、键值、对象、关系等多种数据模型, 但其底层实现主要面向图和文档数据存储管理的需求设计。其存储层中数据记录之间的联系并不是像关系数据库那样通过主外键的引用,而是通过记录之前直接的物理指针。OrientDB 对于数据模式的支持相对灵活,可以管理无模式数据 (schema-less),也可以像关系数据库那样定义完整的模式(schema-full),还可以适应介于两者之间的混合模式(schema-mixed) 数据。在查询语言方面,OrientDB 支持扩展的 SQL 和 Gremlin 用于图上的导航式查询;OrientDB 的 MATCH 语句实现了声明式的模式匹配,这类似于 Cypher 语言查询模式。
4.1.5 Cayley
Cayley 是由 Google 公司工程师开发的一款轻量级开源图数据库。Cayley 的开发受到了 Freebase 知识图谱和 Google 知识图谱背后的图数据存储的影响。Cayley 使用 Go 语言开发,可以作为 Go 类库使用;对外提供 REST API,具有内置的查询编辑器和可视化界面;支持多种查询语言,包括:基于 Gremlin 的 Gizmo、GraphQL 和 MQL;支持多种存储后端, 包括:键值数据库 Bolt、LevelDB, NoSQL 数据库 MongoDB、CouchDB、PouchDB、ElasticSearch,关系数据库 PostgreSQL、MySQL 等。
4.2 其他原生图数据库
Amazon 云平台的 Amazon Neptune
多模型图数据库 Arango DB
微软的 Azure CosmosDB
DataStax 的 Enterprise Graph
Sparsity 的 Sparksee
4.2.1 图数据库选型准则
在图数据库的选型上我们主要考虑了以下 5 点:
(A) 项目开源,暂不考虑需付费的图数据库
(B) 分布式架构设计,具备良好的可扩展性
© 毫秒级的多跳查询延迟
(D) 支持千亿量级点边存储
(E) 具备批量从数仓导入数据的能力
针对主流图数据库,进行选型分析
DB-Engines Ranking of Graph DBMS 剔除不开源的项目,可分为:
Neo4j、ArangoDB、Virtuoso、TigerGraph、RedisGraph。 此类图数据库只有单机版本开源可用,性能优秀,但不能应对分布式场景中数据的规模增长,即不满足选型要求(B)、(D)。
JanusGraph、HugeGraph。 此类图数据库在现有存储系统之上新增了通用的图语义解释层,图语义层提供了图遍历的能力,但是受到存储层或者架构限制,不支持完整的计算下推,多跳遍历的性能较差,很难满足 OLTP(on-line transaction processing)场景下对低延时的要求,即不满足选型要求(C)。
DGraph、NebulaGraph。 此类图数据库根据图数据的特点对数据存储模型、点边分布、执行引擎进行了全新设计,对图的多跳遍历进行了深度优化,基本满足我们的选型要求。
4.2.2 图数据库对比
(1) NebulaGraph vs. Dgraph vs. HugeGraph
NebulaGraph vs. Dgraph vs. HugeGraph 的对比分析
部署方案
实时数据写入
数据查询
(2) Neo4j vs NebulaGraph vs JanusGraph
Neo4j vs NebulaGraph vs JanusGraph 的对比分析
<table><thead><tr><th>图形数据大小</th><th>平台</th><th>数据导入</th><th>一跳查询</th><th>两查询</th><th>共享好友查询</th></tr></thead><tbody><tr><td>1000 万条边</td><td>Neo4j</td><td>26 秒</td><td>6.618 秒</td><td>6.644 秒</td><td>6.661 秒</td></tr><tr><td></td><td>HugeGraph</td><td>89 秒</td><td>16 毫秒</td><td>22 毫秒</td><td>72 毫秒</td></tr><tr><td></td><td>NebulaGraph</td><td>32.63 秒</td><td>1.482 毫秒</td><td>3.095 毫秒</td><td>0.994 毫秒</td></tr><tr><td>1 亿条边</td><td>Neo4j</td><td>1 分 21 秒</td><td>42.921 秒</td><td>43.332 秒</td><td>44.072 秒</td></tr><tr><td></td><td>HugeGraph</td><td>10 分</td><td>19 毫秒</td><td>20 毫秒</td><td>5 秒</td></tr><tr><td></td><td>NebulaGraph</td><td>3 分 52 秒</td><td>1.971 毫秒</td><td>4.34 毫秒</td><td>4.147 毫秒</td></tr><tr><td>10 亿条边</td><td>Neo4j</td><td>8 分 34 秒</td><td>165.397 秒</td><td>176.272 秒</td><td>168.256 秒</td></tr><tr><td></td><td>HugeGraph</td><td>65 分</td><td>19 毫秒</td><td>651 毫秒</td><td>3.8 秒</td></tr><tr><td></td><td>NebulaGraph</td><td>29 分 35 秒</td><td>2.035 秒</td><td>22.48 毫秒</td><td>1.761 毫秒</td></tr><tr><td>80 亿条边缘</td><td>Neo4j</td><td>1 小时 23 分钟</td><td>314.34 秒</td><td>393.18 秒</td><td>608.27 秒</td></tr><tr><td></td><td>HugeGraph</td><td>16 小时</td><td>68 毫秒</td><td>24 秒</td><td>541 毫秒</td></tr><tr><td></td><td>NebulaGraph</td><td>~30 分钟</td><td>小于 1s</td><td>小于 5 秒</td><td>小于 1s</td></tr></tbody></table>
(3) Dgraph vs. HugeGraph vs. JanusGraph vs. NebulaGraph vs. Neo4j
Dgraph vs. HugeGraph vs. JanusGraph vs. NebulaGraph vs. Neo4j 的对比分析
4.2.3 主要知识图谱数据库对比
常见知识图谱数据库管理系统的比较
<table><thead><tr><th>类型</th><th>名称</th><th>许可证</th><th>数据模型 / 存储方案</th><th>查询语言</th><th>是否活跃</th></tr></thead><tbody><tr><td>基于关系</td><td>3store</td><td>开源</td><td>RDF 图 / 三元组表</td><td>SPARQL</td><td>否</td></tr><tr><td>DLDB</td><td>研究原型</td><td>RDF 图 / 水平表</td><td>SPARQL</td><td>早期系统, 水平表存储方案的代表性系统</td><td></td></tr><tr><td>Jena</td><td>开源</td><td>RDF 图 / 属性表</td><td>SPARQL</td><td>主流的语义 Web 工具库、RDF 数据库和 OWL 推理工具</td><td></td></tr><tr><td>SW-Store</td><td>研究原型</td><td>RDF 图 / 垂直划分</td><td>SPARQL</td><td>科研原型系统, 垂直划分存储方案的代表性系统</td><td></td></tr><tr><td>IBM DB2</td><td>商业</td><td>RDF 图 / DB2RDF</td><td>SPARQL/ SQL</td><td>支持 RDF 的主流商业数据库</td><td></td></tr><tr><td>Oracle 18<em>c</em></td><td>商业</td><td>RDF 图 / 关系存储</td><td>SPARQL/ PGQL</td><td>支持 RDF 的主流商业数据库</td><td></td></tr><tr><td>RDF 三元组库</td><td>RDF4J</td><td>开源</td><td>RDF 图 / SAIL API</td><td>SPARQL</td><td>是</td></tr><tr><td>RDF-3X</td><td>开源</td><td>RDF 图 / 六重索引</td><td>SPARQL</td><td>科研原型系统, 六重索引存储方案的代表性系统</td><td></td></tr><tr><td>gStore</td><td>开源研究原型</td><td>RDF 图 / VS * 树</td><td>SPARQL</td><td>科研原型系统, 原生图存储, 使用了基于位串图存储技术</td><td></td></tr><tr><td>Virtuoso</td><td>商业 / 开源</td><td>RDF 图 / 多模型混合</td><td>SPARQL/ SQL</td><td>语义 Web 项目常用的 RDF 数据库, 基于成熟的 SQL 引擎</td><td></td></tr><tr><td>AllegroGraph</td><td>商业</td><td>RDF 图 / 三元组索引</td><td>SPARQL</td><td>对语义推理功能具有较为完善的支持</td><td></td></tr><tr><td>GraphDB</td><td>商业</td><td>RDF 图 / 三元组索引</td><td>SPARQL</td><td>支持语义 Web 标准的主流产品, 支持 SAIL 层推理功能</td><td></td></tr><tr><td>BlazeGraph</td><td>商业</td><td>RDF 图 / 三元组索引</td><td>SPARQL/ Gremlin</td><td>基于 RDF 三元组库的图数据库, 实现了 SPARQL 和 Gremlin</td><td></td></tr><tr><td>StarDog</td><td>商业</td><td>RDF 图 / 三元组索引</td><td>SPARQL</td><td>对 OWL2 推理机制具有良好的支持</td><td></td></tr><tr><td>原生图数据库</td><td>Neo4j</td><td>商业 / 开源</td><td>属性图 / 原生图存储</td><td>Cypher</td><td>是</td></tr><tr><td>JanusGraph</td><td>开源</td><td>属性图分布式存储</td><td>Gremlin</td><td>分布式图数据库, 存储后端与查询引擎分离, 实现了 Gremlin</td><td></td></tr><tr><td>OrientDB</td><td>商业</td><td>属性图 / 原生图存储</td><td>SQL/ Gremlin</td><td>支持多模型的原生图数据管理系统, 对数据模式的灵活支持</td><td></td></tr><tr><td>Cayley</td><td>开源</td><td>RDF 图 / 外部存储</td><td>Gremlin/ GraphQL</td><td>轻量级开源图数据库, 易于扩展对新语言和存储后端的支持</td><td></td></tr><tr><td>分布式系统与框架</td><td>Sempala</td><td>开源研究原型</td><td>RDF 图 / 分布式存储</td><td>SPARQL</td><td>否</td></tr><tr><td>TriAD</td><td>开源研究原型</td><td>RDF 图 / 分布式存储六重索引</td><td>SPARQL</td><td>基于 MPI 框架的异步通信协议</td><td></td></tr><tr><td>H2RDF+</td><td>开源研究原型</td><td>RDF 图 / 分布式存储六重索引</td><td>SPARQL</td><td>基于 HBase 构建六重索引</td><td></td></tr><tr><td>S2RDF</td><td>开源研究原型</td><td>RDF 图 / 分布式存储垂直划分</td><td>SPARQL</td><td>基于 Spark 框架建立大量索引</td><td></td></tr><tr><td>Stylus</td><td>开源研究原型</td><td>RDF 图 / 分布式存储属性表优化</td><td>SPARQL</td><td>基于分布式内存键值库的 RDF 三元组库</td><td></td></tr><tr><td>Apache Rya</td><td>开源</td><td>RDF 图 / 分布式存储三元组索引</td><td>SPARQL</td><td>基于列存储 Accumulo 的 RDF 三元组库</td><td></td></tr><tr><td>Cypher for Apache Spark</td><td>开源</td><td>属性图 / 分布式存储 DataFrame</td><td>Cypher</td><td>基于 Spark 框架的 Cypher 引擎</td><td></td></tr></tbody></table>
JanusGraph(尚可)、Neo4j(老牌先入为主不一定最佳)、Dgraph(尚可)、NebulaGraph(推荐) 四款图数据库比较。
<table cellspacing="0"><caption>主流和推荐使用图数据库对比</caption><tbody><tr><td>特性</td><td>JanusGraph</td><td>Neo4j</td><td>Dgraph</td><td>NebulaGraph</td></tr><tr><td>首次发布</td><td>2017 年</td><td>2007 年</td><td>2016 年</td><td>2019 年</td></tr><tr><td>开发语言</td><td>Java</td><td>Java</td><td>Go</td><td>C++</td></tr><tr><td>开源</td><td>是</td><td>是</td><td>是</td><td>是</td></tr><tr><td>属性图模型</td><td>完整的属性图模型</td><td>完整的属性图模型</td><td>类 RDF 存储</td><td>完整的属性图模型</td></tr><tr><td>架构</td><td>分布式</td><td>单机</td><td>分布式</td><td>分布式</td></tr><tr><td>存储后端</td><td>Hbase、Cassandra、<br>BerkeleyDB</td><td>自定义文件格式</td><td>键值数据库 BadgerDB</td><td>键值数据库<br>RocksDB</td></tr><tr><td>高可用性</td><td>支 持</td><td>不支持</td><td>支持</td><td>支持</td></tr><tr><td>高可靠性</td><td>支 持</td><td>不支持</td><td>支持</td><td>支持</td></tr><tr><td>一致性协议</td><td>Paxos 等</td><td>无</td><td>RAFT</td><td>RAFT</td></tr><tr><td>跨数据中心复制</td><td>支 持</td><td>不支持</td><td>支持</td><td>不支持</td></tr><tr><td>事务</td><td>ACID 或 BASE</td><td>完全的 ACID</td><td>0mid 修改版</td><td>不支持</td></tr><tr><td>分区策略</td><td>随机分区,支持显式指定分区策略</td><td>不支持分区</td><td>自动分区</td><td>静态分区</td></tr><tr><td>大数据平台集成</td><td>Spark、Hadoop、Giraph</td><td>Spark</td><td>不支持</td><td>Spark、Flink</td></tr><tr><td>查询语言</td><td>Gremlin</td><td>Cypher</td><td>GraphQL</td><td>nGQL</td></tr><tr><td>全文检索</td><td>ElasticSearch、Solr、Lucene</td><td>内置</td><td>内置</td><td>ElasticSearch</td></tr><tr><td>多个图</td><td>支持创建任意多图</td><td>一个实例只能有一个图</td><td>一个集群只能有一个图</td><td>支持创建任意多图</td></tr><tr><td>属性图模式</td><td>多种约束方法</td><td>可选模式约束</td><td>无模式</td><td>强制模式约束</td></tr><tr><td>客户端协议</td><td>HTTP、WebSockets</td><td>HTTP、BOLT</td><td>HTTP、gRPC 等</td><td>HTTP</td></tr><tr><td>客户端语言</td><td>Java、Python、C#、Go、Ruby<br>等</td><td>Java、Python、Go 等</td><td>Java、Go、Python、等</td><td>Python、Java 等</td></tr></tbody></table>
4.2.4、单个性能强图数据库
(1) TuGraph
TuGraph 由蚂蚁集团与清华大学联合研发,构建了一套包含图存储、图计算、图学习、图研发平台的完善的图技术体系,拥有业界领先规模的图集群,解决了图数据分析面临的大数据量、高吞吐率和低延迟等重大挑战,是蚂蚁集团金融风控能力的重要基础设施,显著提升了欺诈洗钱等金融风险的实时识别能力和审理分析效率,并面向金融、工业、政务服务等行业客户。
性能较强,大容量,但初步开源,问题较多,功能尚不完善。
<table><thead><tr><th>功能特诊</th><th>性能和可扩展性</th></tr></thead><tbody><tr><td>标签属性图模型</td><td>TB 级大容量</td></tr><tr><td>支持多图</td><td>千万顶点 / 秒的高吞吐率</td></tr><tr><td>完善的 ACID 事务处理</td><td>高可用性支持(企业版)</td></tr><tr><td>内置 25+ 图分析算法</td><td>高性能批量导入</td></tr><tr><td>基于 web 客户端的图可视化工具</td><td>在线 / 离线备份</td></tr><tr><td>支持 RESTful API 和 RPC</td><td></td></tr><tr><td>OpenCypher 图查询语言</td><td></td></tr><tr><td>基于 C++/Python/Java 的存储过程</td><td></td></tr><tr><td>适用于高效图算法开发的 Traversal API</td><td></td></tr></tbody></table>
(2) NebulaGraph
NebulaGraph 是一个分布式,可扩展且闪电般的图形数据库。它是世界上能够托管具有数百亿个顶点(节点)和数万亿条边(关系)的图形的最佳解决方案,具有毫秒级延迟。
整体上来说,社区版比企业版少一些可视化以及图算法
测试硬件环境
性能对比
我们使用不同量级的图从入库时间,一度好友查询,二度好友查询,共同好友查询几个方面进行了对比,结果如下:
可以看到在导入性能上,数据量小的时候 Nebula Graph 的导入效率稍慢于 Neo4j,但在大数据量的时候 Nebula Graph 的导入明显优于其他两款图数据库;在 3 种查询场景下, Nebula Graph 的效率都明显高于 Neo4j,与 HugeGraph 相比也有一定的优势。
查询语言对比
从查询语句的角度出发,Gremlin 比较复杂,nGQL 和 Cypher 比较简练,从可读性角度出发,nGQL 比较类 SQL 化,比较符合大家的使用习惯。
可视化对比
在可视化方面,所有的平台都还只处于可用状态,Nebula Graph 的选择性扩展在团伙挖掘中是一个加分项,但是在二度结果展示流畅度,展示结果自定义展示方面还有优化空间。
在比较了多款业内主要使用的开源数据库后,我们从性能,学习成本和与业务的贴合程度多个角度考虑,最终选择了性能出众,上手简单,能大幅提高业务效率的 Nebula Graph 图数据库。
总结
随着知识图谱规模的日益增长,数据管理愈加重要。随着三元组库和图数据库的相互融合发展,知识图谱的存储和数据管理手段将愈加丰富和强大。本文主要讲述的是知识图谱存储技术、数据库的对比,进而能在进行知识存储中进行选择适合自己研发场景的数据库。
更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
参考链接
https://blog.csdn.net/wnm23/article/details/130093888
如何高效存储大规模知识图谱数据?基于机器学习的知识图谱存储结构—论文
知识图谱入门:知识图谱存储、融合、可视化、图表示计算与搜索常用工具总结
美团图数据库平台建设及业务实践 - 美团技术团队 (meituan.com)
(8 条消息) Neo4j 和 Nebula Graph 和 HugeGraph 对比选型_会发 paper 的学渣的博客 - CSDN 博客_nebula neo4j
版权声明: 本文为 InfoQ 作者【汀丶人工智能】的原创文章。
原文链接:【http://xie.infoq.cn/article/66a9c069879127f4fd370ff27】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论