sparql クエリと「更新」(挿入/削除) の両方を実行するための Python スクリプトがいくつかあります。関連するコードのほとんどは次のとおりです(私は思います):
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 秒未満で実行されます。私たちはセサミのバージョン 2.7.12 を実行しています (セサミのバージョン 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 エンドポイントへの最初の呼び出しで大きなギャップが見られます。