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