我有一个关于在 Virtuoso、Stardog、4store、Allegrograph、Oracle11g 等三重存储中插入和删除语句的问题。
插入新语句时,他们是在存储中插入推断语句还是在每次查询执行中使用推理器来获取推断语句?删除语句时同样的问题,他们是否删除了推断的语句?
我有一个关于在 Virtuoso、Stardog、4store、Allegrograph、Oracle11g 等三重存储中插入和删除语句的问题。
插入新语句时,他们是在存储中插入推断语句还是在每次查询执行中使用推理器来获取推断语句?删除语句时同样的问题,他们是否删除了推断的语句?
该答案将取决于数据库,没有“正确”的方法可以做到这一点,据我所知,每个人的做法都有点不同。而且没有理由只需要具体化或只进行查询时推理;你可以同时做一些,如果有的话,那是实现它的“正确”方式。
在使用物化的情况下(所有推论都保存在数据库中),真相维护是一个特别棘手的问题。您可以避免重新构建所有推理,但这种方法有一些明显的缺点。因此,实现的系统将具有复杂的方案,其中存储推理的派生树,以便仅重新计算受更新影响的推理。但这是以减慢所有写入和批量加载为代价的。
查询时推理也回避了真相维护的问题。推论不会存储,而是在评估期间动态计算,但这是以执行更困难的查询为代价的。
据我所知,BigData、OWLIM 和 Oracle 实现了推理,Stardog 在查询时进行所有推理。我不确定 Virtuoso 和 AllegroGraph。鉴于 AllegroGraph 使用 RacerPro,或者至少曾经使用过,我猜它们会实现,但这只是一个猜测。我不知道 4Store 做了任何推理。