# Chap 2 知识存储

  • 基于关系数据库的存储方案
存储方法 描述 优点 缺点 代表产品
三元组表 每行记录存储一个三元组 简单清晰 自连接效率低下 3store
水平表 每行记录存储一个主语的所有谓语和宾语 简化查询操作 列数等于图谱的谓语总数,存在大量空值,无法满足一对多关系,改动成本大 DLDB
属性表 对水平表的细化,根据主语类型分表,解决列数过多问题 克服了三元组表的自连接问题,解决了水平表中列数过多和空值问题 主语类别可能很多,表数到达上限,多表连接效率低 Jena
垂直划分 以三元组谓语作为划分维度,将RDF划分为若干张仅包含主宾两列的表 解决空值多值问题,可用归并排序执行表连接操作 表数过多,改动成本大 SW-Store
六重索引 三元组6种全排列对应建立6张表,空间换时间策略 前缀查找快速 改动成本大,6倍空间开销 RDF-3X,Hexastore
DB2RDF 4张表组成,dph表的列作为谓语和宾语的存储位置,而并非将列与谓语绑定,插入数据时,使用散列函数将谓语动态映射到某列
  • 面向RDF的三元组数据库:RDF4J, RDF-3X, gStore, Virtuoso, AllegroGraph, GraphDB, BlazeGraph
  • 原生图数据库
    • Neo4j: 最流行,Java编写,通过每个节点存一份副本来实现伪分布式,具备ACID事务处理功能
    • JanusGraph:借助分布式索引库ElasticSearch,solr,Lucene实现数据检索,支持多用户并发访问和实时图遍历查询,具备基于MapReduce的图分析引擎
    • OrientDB:Java编写,支持无模式数据,支持Gremlin和Cypher查询
    • Cayley:Golang编写,提供RESTAPI,支持Gizmo,GraphQL,MQL等查询语言,支持Bolt,LevelDB,MongoDB,CouchDB,PouchDB,ElasticSearch,PostgreSQL,MySQL等存储后端,具有良好的模块化设计
    • dGraph:Golang编写,发展比Cayley好,真正的分布式,比较年轻,有望替代Neo4j
最后更新: 5/31/2022, 6:43:40 AM