如何从Python RDFLib加速SPARQL查询?

时间:2017-01-24 05:04:15

标签: postgresql sqlalchemy sparql flask-sqlalchemy rdflib

我使用rdflib_sqlalchemy.SQLAlchemy在PostgreSQL表中加载了一个大型RDF数据集(Geonames数据集:18GB)。

我使用RDFLib支持从Python脚本运行以下简单查询。花了两个多小时才给我结果。 如果不将RDF数据注入三元组(例如Virtuoso),有没有办法让它更快?

mystore = store.SQLAlchemy(configuration="postgresql://localhost:5873/postgres")
g = Graph(mystore, identifier="test")
results = g.query("""SELECT ?s ?p ?o WHERE {?s ?p ?o .} LIMIT 1""")
for row in results:
  print row

我正在研究集群的计算节点。我试图用内存数据执行我的查询,如下所示。但是,它仍然很慢。

g = Graph()
g.parse('geonames.nt', format='nt')
results = g.query("""SELECT ?s ?p ?o WHERE {?s ?p ?o .} LIMIT 1""")
for row in results:
  print row  

请让我知道你的意见。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

对代码进行概要分析,很可能是加载所有这些数据的速度很慢,因为查询非常简单并且有LIMIT 1.

通常,该大小的数据集通过一些适当的三重存储进行管理,其中数据可以保留并且通常也可以编入索引,从而加快查询速度。

此外,像Virtuoso这样的系统支持并行加载。以某种方式拆分初始数据文件(取决于它们代表什么)然后将两个或多个子集存储到多个三元组存储中可能是另一种方法(即使您决定保留内存中的加载也可以这样做。)

同一个三重商店中的多个图表也可能有所帮助。