学习笔记——《知识图谱导论》陈华钧第三章·存储与查询

3.1基于关系数据库的知识图谱存储

  1. 分类——基于关系数据库的、基于原生图的
  2. 相关的问题
    ①存储的物理结构;
    ②存储的性能问题;
    ③图的查询问题;
  3. 存储方法
    直接存三元组:利用关系数据库,只建一张包含(Subject,Predicate,Pbject)三列的表,然后把所有的三元组存入其中,优点是方法简单,缺点是查询效率很低

    属性表(Property Tables):以实体类型为中心,把属于同一个实体类型的属性组织为一个表,即属性表进行存储,不过还是基于关系数据库的。缺点是会产生很多空值

    二元表:对三元组按属性分组,并为每个属性在关系数据库中建立一个包含(Subject,Object)两列的表,缺点是Insert性能损耗高,对subject-subject-join操作性能好,但是对subject-object-join性能就比较差了

    基于全索引结构:仅维护一张包含(subject,predicate,object)的三列表,增加了很多的优化手段,例如:三元表中不再存储真实的字符串,而是只存储对应的数字ID

综上,基于关系数据库的直接的好处是可以充分利用关系数据库本身的存储和优化功能,因而在现实的知识图谱中仍然被广泛采用,但是原生图数据库逐渐成为了知识图谱存储的主要解决方案。

3.2基于原生图数据库的知识图谱存储

  1. 关系模型的局限性——背离了用接近自然语言的方式来描述客观世界的原则,这使得概念化、高度关联的世界模型与数据的物理存储之间出现了失配
  2. 图数据库——将一张图表示为一个邻接列表,即将相邻关系表示成邻接关系,再基于这个邻接关系表建立索引,优化图的查询。好处:自然表达、易于扩展、复杂关联表达
  3. 属性图——是图数据库Neo4J实现的图结构表示模型,优点是表达方式非常灵活,例如,它允许为边增加属性,非常便于表示多元关系,同时在查询计算方面具有较高优势
  4. 查询语言

    过程式查询语言
    需要严格地根据图的机构精确定义查询语义
    描述性查询语言重在刻画查询本身的语义,通常还需要再经过一轮翻译,成为底层实际查询语言如SQL
  5. 什么时候使用原生图数据库
    基于三个原则:
         ①高性能的关系查询
         ②模型的灵活性
         ③复杂图分析需求

3.3原生图数据库实现原理浅析

  1. 免索引邻接——为每个节点维护了一组指向其相邻节点的引用,这组引用本质上可以看作是相邻节点的微索引(Micro Index)
  2. Neo4J——核心的实现是两个文件:节点存储文件、关系边存储文件
  3. 节点和关系边的存储处理
    知识图谱中的节点存储于独立的“节点存储文件”,每个节点的存储空间固定,便于直接通过ID编号计算获得访问地址,查询成本为O(1),特别指出,节点的属性数据(如姓名、年龄等)是分开存储的,节点之存储其第一个属性边的ID,关系边也类似,存储于“关系边存储文件”
  4. 属性图与RDF图存储的比较
    一般而言,如果应用场景重图结构和查询分析,属性图会更适合一些,如果应用场景重知识建模,特别是要求描述和表达复杂的关联关系且有知识推理要求,采用RDF图模型会更适合一些

总结,原生图存储在复杂关联查询和图计算方面有性能优势,非原生图存储兼容已有工具集,通常学习和协调成本会低,其次,需要区分RDF图存储和属性图存储:RDF存储一般支持推理,属性图存储通常具有更好的图分析性能优势,此外,在大规模处理情况下,需要考虑与底层大数据存储引擎和上层图计算引擎集成需求

为啥越写越觉得这样效率低呢

你可能感兴趣的:(知识图谱,人工智能)