2

Graph通过为和提供 impls,我在 MongoDB 上实现了 Jena 的合理实现DatasetGraph。SPARQL 查询在 MongoDB 中被转换为适当的查询表达式,并且材料,至少在三重匹配的基础上,以高性能的方式出售。这并不奇怪。索引做他们应该做的事情。 Graph用 RDFS 推理器包裹,Model一切都很好。

我现在有兴趣探索优化过滤下推到 MongoDB 的方法。例如,这个 SPARQL:

?s a:attested "2017-06-01T00:00:00Z"^^xsd:dateTime .

导致设置 MongoDBfind表达式:

{ "P" : "a:attested", "O" : { "$date" : 1496275200000 } }

一切都很好。但是这个 SPARQL:

?s a:attested ?theDate .
FILTER (?theDate = "2017-06-01T00:00:00Z"^^xsd:dateTime)

导致 ARQ 仅将谓词传递给Graph::find()

{ "P" : "a:attested" }

并且从数据库中提取了很多东西,并且过滤是在 ARQ 本身中完成的。FILTER对于简单的等式,显然不需要上面的表达式,但它证明了这一点。

TDB 文档说“ ...... TDB 使用OpExecutorARQ 的扩展点”。但链接指向OpExecutor To-Do

任何人都可以指出任何可以在 ARQ 调用期间挂钩或以其他方式访问的任何示例Graph::ExtendedIterator<Triple> find(Triple m)吗?正是在这一点上,我的实现开始制作查询,如果我可以询问是否存在过滤器,那么我可以“改进”对查询的限制。此时,我处理阻止过滤在 ARQ 本身中再次发生并不那么重要。

4

0 回答 0