我们有一些 python 脚本来执行 sparql 查询和“更新”(插入/删除)。这是大部分相关代码(我认为):
server = "localhost"
repo = "test"
query_endpoint = "http://%s:8080/openrdf-sesame/repositories/%s" % (server,repo)
update_endpoint = "http://%s:8080/openrdf-sesame/repositories/%s/statements" % (server,repo)
def execute_query(query):
params = { 'query': query }
headers = {
'content-type': 'application/x-www-form-urlencoded',
'accept': 'application/sparql-results+json'
}
(response, content) = httplib2.Http().request(endpoint, 'POST', urllib.urlencode(params),headers=headers)
return (response,ast.literal_eval(content))
def execute_update(query):
params = { 'update': query }
headers = {
'content-type': 'application/x-www-form-urlencoded',
'accept': 'application/sparql-results+json'
}
(response, content) = httplib2.Http().request(update_endpoint, 'POST', urllib.urlencode(params),headers=headers)
return True
我们对 execute_query 的所有调用都非常快,不到 1 秒即可完成。但是,第一次调用 execute_update 需要很长时间(16 秒)。第一个呼叫之后的每个呼叫都在不到 1 秒的时间内运行。我们正在运行 sesame 版本 2.7.12(我们认为从 sesame 版本 2.7.3 升级可能会有所帮助,但并没有太大帮助)。我们只有 2 或 3 千个三元组。这一切都是从 CGI 脚本运行的,所以我们不能真的只让 python 会话保持活动状态来进行更新调用(无论如何,这不是工作台的工作吗?)。关于第一次调用 update_endpoint 需要这么长时间的任何想法?其他人有同样的问题吗?有什么建议的解决方案吗?
谢谢!
编辑 我听从了 RobV 的建议,但我仍然遇到同样的问题。来自 tshark 的日志文件:
22.577578 10.10.2.43 -> 10.10.2.43 HTTP POST /openrdf-sesame/repositories/test HTTP/1.1
22.578261 10.10.2.43 -> 10.10.2.43 HTTP Continuation or non-HTTP traffic
22.583422 10.10.2.43 -> 10.10.2.43 HTTP HTTP/1.1 200 OK (application/sparql-results+json)
22.583857 10.10.2.43 -> 10.10.2.43 HTTP Continuation or non-HTTP traffic
22.591122 10.10.2.43 -> 10.10.2.43 HTTP POST /openrdf-sesame/repositories/test/statements HTTP/1.1
22.591388 10.10.2.43 -> 10.10.2.43 HTTP Continuation or non-HTTP traffic
35.020398 10.10.2.43 -> 10.10.2.43 HTTP HTTP/1.1 204 No Content
35.025605 10.10.2.43 -> 10.10.2.43 HTTP POST /openrdf-sesame/repositories/test/statements HTTP/1.1
35.025911 10.10.2.43 -> 10.10.2.43 HTTP Continuation or non-HTTP traffic
35.040606 10.10.2.43 -> 10.10.2.43 HTTP HTTP/1.1 204 No Content
35.045937 10.10.2.43 -> 10.10.2.43 HTTP POST /openrdf-sesame/repositories/test/statements HTTP/1.1
35.046080 10.10.2.43 -> 10.10.2.43 HTTP Continuation or non-HTTP traffic
35.049359 10.10.2.43 -> 10.10.2.43 HTTP HTTP/1.1 204 No Content
35.053776 10.10.2.43 -> 10.10.2.43 HTTP POST /openrdf-sesame/repositories/test/statements HTTP/1.1
35.053875 10.10.2.43 -> 10.10.2.43 HTTP Continuation or non-HTTP traffic
35.056937 10.10.2.43 -> 10.10.2.43 HTTP HTTP/1.1 204 No Content
您可以在第一次调用 /statements 端点时看到很大的差距。