查询本地 SPARQL 端点非常慢

Querying local SPARQL endpoint is very slow

我已经通过此 guide 使用 Openlink Virtuoso 使用 DBPedia 数据库设置了一个本地 SPARQL 端点。然后我尝试在 RDFLib 和 SPARQLWrapper 的帮助下通过 Python 查询我的数据库。

问题是查询(通过 Python)花费的时间很长,通常需要 2 到 3 秒才能得到返回结果。但是当我使用我的浏览器直接在端点查询时(从 Chrome 转到本地主机),对于相同类型的查询我立即得到结果。

我不认为这是我的 Python 代码的问题,因为如果我保留相同的代码并仅更改为 DBPedia 端点,我可以在 0.1 到 0.2 秒内获得查询结果。我的数据库文件大约有 6GB,我已经按照说明配置了 ini 文件以使用更多内存。

谁能帮我排查问题?我在想我需要用 virtuoso 服务器调整一些参数,但我不知道从哪里开始。谢谢!

我的查询如下(DBPedia 端点或直接来自 Chrome 的本地端点:几乎即时结果;通过 Python 的本地端点:2+ 秒):

sparql = SPARQLWrapper('http://localhost:8890/sparql')
sparql.setQuery('''
    SELECT ?id
    WHERE { 
     ?linkto dbo:wikiPageID ?id.
     ?origin    dbo:wikiPageWikiLink  ?linkto.
     ?origin  dbo:wikiPageID 9186.
    }
''')
sparql.setReturnFormat(CSV)
qres = sparql.query().convert().decode('u8')

编辑:我打印了数百个查询的运行时间(在本地端点上),每个查询都需要大约 2.01 到 2.05 秒才能完成,甚至没有一个低于 2 秒。所以我想在管道的某个地方有一个固定的 2 秒延迟,而实际的查询只需要 10 到 50 毫秒就可以完成。

正如我在评论中所建议的那样,成功了 --

You might try changing localhost to 127.0.0.1. DNS is often the cause of weirdly slow things like this.