为什么rdflib这么慢?

时间:2019-06-12 15:06:33

标签: sparql rdf rdflib

我有一个很大的rdf文件:

  • 大小:470MB
  • 行数:将近600万
  • 独特的三门课:约650,000
  • 三倍的金额:约4,200,000

我通过以下方式将rdf定义加载到rdflib的berkeley db后端中:

graph = rdflib.Graph("Sleepycat")
graph.open("store", create=True)
graph.parse("authorities-geografikum_lds.rdf")

在我的笔记本上花了很多时间才能完成。该计算机并不是真正强大的处理器(Intel B980 CPU,4GB RAM,没有SSD),而且分辨率很高-但是,完成此任务的时间仍然很长。也许部分是由于索引/优化了数据结构?

真正令人恼火的是完成以下查询所花费的时间:

SELECT (COUNT(DISTINCT ?s) as ?c)
WHERE {
    ?s ?p ?o
}

(结果:667,445)

花费20分钟以上

SELECT (COUNT(?s) as ?c)
WHERE {
    ?s ?p ?o
}

(结果:4,197,399)

花了25分钟以上。

根据我的经验,填充有可比较数据的关系型DBMS将在适当的索引的情况下在一小部分时间内完成相应的查询。

所以我的问题是:

为什么rdflib这么慢(尤其是对于查询)?

我是否可以像在RDBMS中使用索引那样调整/优化数据库?

从性能角度来看,另一个(免费和“紧凑”)三元组存储更适合这种大小的数据吗?

0 个答案:

没有答案