我有一个很大的rdf文件:
我通过以下方式将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中使用索引那样调整/优化数据库?
从性能角度来看,另一个(免费和“紧凑”)三元组存储更适合这种大小的数据吗?