我有一个大的rdf文件:
- 大小:470MB
- 行数:近600万
- 唯一三元组主体:约65万个
- 三元组数量:约420万个
我通过以下方式将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分钟的时间。
依据我的经验,如果使用关系型数据库管理系统存储可比较的数据,通过适当的索引,在相应的查询中只需要很短的时间就能完成操作。
因此我有以下问题:
为什么rdflib如此缓慢(特别是在查询时)?
我是否可以像关系型数据库管理系统中的索引一样调整/优化数据库?
是否有另一个(免费且“紧凑的”)三元组存储适合这种大小的数据,从性能方面考虑?
rdflib
,而不是使用“合适的”三元组存储库?有一些开源软件可用,例如Apache Jena Fuseki、Virtuoso等。 - UninformedUser