The RDF-3X engine for scalable management of RDF data----part2

本文由学者Thomas Neumann和Gerhard Weikum于2009/09/01在《The VLDB Journal 》联合发表
原文下载链接文末自取

选择性估计
查询优化器依靠成本模型查找成本最低的执行计划,由于估计的基数及选择性对计划生成影响巨大,所以提出如下两种统计方法:

  • 专用直方图,可处理任何类型的三重模式和联接,缺点是假设谓词间具有独立性,则谓词不包含在紧密耦合的三元模式。

  • 统计方法将计算数据中的频繁联接路径,并更准确预测这些路径的大型联接。在查询优化过程中可使用连接路径基数,否则假设独立性并使用直方图。

选择性直方图
对于三元组中三列的单个表查询通常涉及至少两个属性,所以不适合使用直方图而使用聚合索引:对于每个文字或文字对,通过一次索引查找获取得到三元组的确切数。将成本模型的所有辅助结构保留在主存储器中进一步汇总索引,使每个索引适合单个数据库页面并包含有关连接选择的信息。扫描三元组的数量决定索引扫描的成本。当字面值不属于索引前缀,实际则会更低。通过重新排列字面值使所有字面值都位于前缀得出结果基数。如果存储库中的三元组与数据库中的所有其他三元组连接,则下一个值是连接即结果基数。

常用路径
SPARQL查询中会出现两种相关的谓词。首先,三重模式的“星星”,用于选择特定主语。第二,三重模式的“链”,其中第一个模式的对象是下一个模式的主语,同样具有给定谓词。预先计算数据图中的常用路径并保留精确的联接统计信息,计算最频繁的路径并具体化结果基数和路径。两种方法解决RDF设置的循环:

  • 要求如果要保留频繁的路径P,则保留其所有子路径。

  • 不按结果基数而根据不同节点数对频繁路径排序。
    路径挖掘算法的伪代码如图所示:
    The RDF-3X engine for scalable management of RDF data----part2
    复合查询的估计
    为了估计整个组合查询的总体选择性,结合直方图与频繁路径统计信息,使用频繁路径统计信息估计两个连接子链的选择性及选择的直方图。为综合评估技术的准确性,有三种评估技术:

  • 在S,P和O的每个上使用标准一维直方图基线

  • 开发的RDF特定选择性直方图的概念,但没有任何频繁路径信息。

  • 特定直方图和频繁路径统计信息的组合。

管理更新
考虑RDF数据库支持数据修改和增量加载,在设计RDF-3X的更新管理时,对典型的使用模式作如下假设:

  • 查询比更新频繁,资源消耗也多。

  • 更新主要是插入新三元组和将创建新版本和注释,而不是覆盖现有三元组,

  • 分批更新,直到增加增量。

  • 同时进行批处理更新与查询,无需进行完整的ACID交易。

基于假设,为RDF-3X设计并实现差分索引方法,该方法同时支持更新单个操作和整个批次。关键思想是更新最初应用于小差分索引,将实际更新推迟到主要索引,如图说明用于管理RDF-3X中更新的总体架构:
The RDF-3X engine for scalable management of RDF data----part2

插入操作
使用RDF-3X索引,将新三元组插入数据库存在困难。为避免成本,使用具有延迟索引更新的暂存体系结构。首先,在工作空间收集所有更新;然后,分开索引所有三元组与主数据库的差异索引。在查询处理期间,查询使用小差异索引增加其他合并联接,在满足查询条件的情况下更新集成延迟。

  • 工作区管理:最典型的更新模式:程序将新RDF文件加载到数据库中,生成大量新三元组,而无需任何查询。此外,程序混合更新和查询,从而派生新三元组。对于程序插入查询和更新后,增加插入次数。当程序终止时,为所有六个三重排序建立索引,并合并为所有程序共享的相应差分索引。每个程序的工作区管理器维护新字符串的字符串字典。

  • 差异索引:所有程序共享的差异索引是程序的专用工作空间和主数据库的完整索引的中间层。实现中将差异索引保留在主内存中,简化维护。当用尽给定的内存预算时,将启动合并过程主要索引以释放内存。差异索引管理还包括维护新字符串的字符串字典。合并过程的工作原理与批处理相似,将排序后的数据插入到B+树。更新主数据库的字符串字典,无压缩和字符串id的单调性,所以合并更简单。

  • 扩展查询: 所有查询都运行在调用以下查询的主索引、差分索引和程序工作区的联合上:
    The RDF-3X engine for scalable management of RDF data----part2
    只要差异索引或工作空间中没有新三元组与给定三元组匹配,就无需额外内存和CPU消耗。RDF-3X系统尝试消除不必要连接。检测不必要扫描的差异索引一种方法是在查询编译间检查相关三元组,因为差分索引一直在主内存。

删除
删除三元组时,使用删除标记将三元组“插入”到工作区和差异索引。将差异索引合并到主索引时,标记为删除的三元组会删除主索引中对应的三元组,并在合并完成后丢弃。

支持原子性和弱隔离
增加对程序的原子支持,而并发程序执行中的隔离级别形式较弱。分期架构的第一阶段只包含更新操作的程序通过使用专用工作区自动隔离。将程序终止视为“提交点”,每个提交点提示与全局共享的差异索引合并。在与差异指标和主要指标合并时,通过锁存和区域协调股机制保证指标树一致。当程序将其工作空间合并到差分索引时,将以锁定耦合的方式锁存索引页,始终锁存两个连续叶页。合并过程中所有写程序都具有完全相同的页面访问顺序,因此锁耦合技术保证了只写程序间的序列化性。
分期架构提供了读提交的隔离级别,此属性还适用于混合查询和更新的程序:所有查询都可看到提交数据,并且更新序列化并发读写程序。延迟更新处理的主要特性如下:

  • 如果查询中没有满足任何三重模式的更新,则不影响查询执行时间,否则开销很小。

  • 对主要索引的更新汇总为有效的批量操作。

  • 支持原子批次的更新操作,查询不用等待,因为运行在读提交隔离级别。

余下部分是实验评估内容,不再赘述。

原文下载链接

上一篇:The RDF-3X engine for scalable management of RDF data----part1


下一篇:知识图:从图和数据库中获取知识