我有一个很大的 rdf 文件:
我通过以下方式将 rdf 定义加载到 rdflib 的 berkeley db 后端:
graph = rdflib.Graph("Sleepycat")
graph.open("store", create=True)
graph.parse("authorities-geografikum_lds.rdf")
Run Code Online (Sandbox Code Playgroud)
在我的笔记本上花了很多小时才完成。计算机的功能并不强大(Intel B980 CPU、4GB RAM、无 SSD),而且定义也很大,但完成这项任务的时间似乎相当长。也许部分是由于索引/优化数据结构?
真正令人恼火的是完成以下查询所需的时间:
SELECT (COUNT(DISTINCT ?s) as ?c)
WHERE {
?s ?p ?o
}
Run Code Online (Sandbox Code Playgroud)
(结果:667,445)
花了20多分钟
SELECT (COUNT(?s) as ?c)
WHERE {
?s ?p ?o
}
Run Code Online (Sandbox Code Playgroud)
(结果:4,197,399)
花了超过25分钟。
根据我的经验,如果有适当的索引,充满可比数据的关系型 DBMS 将在一小部分时间内完成相应的查询。
所以我的问题是:
为什么 rdflib 这么慢(尤其是对于查询)?
我可以像使用 RDBMS 中的索引一样调整/优化数据库吗?
从性能角度来看,另一个(免费且“紧凑”)三重存储是否更适合这种大小的数据?
小智 1
我也经历过 RDFLIB 类似的缓慢行为。对我来说,一个可能的解决方案是将底层图存储更改为 Oxrdflib,这极大地提高了 SPARQL 查询的速度。
请参阅: https: //pypi.org/project/oxrdflib/