Python 第一次调用openrdf sesame更新端点非常慢。有没有办法优化它?
我们有一些python脚本来执行sparql查询和“更新”(插入/删除)。以下是大部分相关代码(我认为): 所有执行查询的调用都非常快,只需不到1秒即可完成。但是,任何执行更新的调用都需要很长的时间(16秒)才能第一次执行。第一次呼叫后的每个呼叫在不到1秒的时间内运行。我们正在运行芝麻版本2.7.12(我们认为从芝麻版本2.7.3升级可能会有所帮助,但效果不太好)。我们只有两千到三千个三倍。这一切都是从CGI脚本运行的,所以我们不能仅仅让python会话保持活动状态来进行更新调用(无论如何,这不是工作台的工作吗?)。你知道第一次调用update_端点花了这么长时间吗?其他人也有同样的问题吗?有什么建议吗 谢谢 编辑 我听从了罗布的建议,但我仍然有同样的问题。来自tshark的日志文件:Python 第一次调用openrdf sesame更新端点非常慢。有没有办法优化它?,python,sparql,semantic-web,sesame,openrdf,Python,Sparql,Semantic Web,Sesame,Openrdf,我们有一些python脚本来执行sparql查询和“更新”(插入/删除)。以下是大部分相关代码(我认为): 所有执行查询的调用都非常快,只需不到1秒即可完成。但是,任何执行更新的调用都需要很长的时间(16秒)才能第一次执行。第一次呼叫后的每个呼叫在不到1秒的时间内运行。我们正在运行芝麻版本2.7.12(我们认为从芝麻版本2.7.3升级可能会有所帮助,但效果不太好)。我们只有两千到三千个三倍。这一切都是从CGI脚本运行的,所以我们不能仅仅让python会话保持活动状态来进行更新调用(无论如何,这不
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端点时看到很大的差异。Sesame workbench和服务器是两个不同的应用程序,在web应用程序容器中的不同应用程序上下文中运行 CGI代码直接将查询定向到Sesame服务器,但将更新定向到Sesame工作台 Sesame workbench实际上只是Sesame服务器的一个UI,本质上是将您的请求代理到底层的Sesame服务器上。第一次进行更新时,工作台必须与服务器建立连接,我认为这涉及到向Sesame服务器发出各种额外的元数据请求。在此之后,连接被工作台缓存,这就是为什么后续更新运行得非常快的原因 可以直接针对芝麻服务器进行更新,方法是将更新端点更改为使用芝麻服务器
/statements
端点,如中所述
通过直接使用芝麻服务器,您应该消除第一次更新时的长时间延迟。芝麻工作台和服务器是两个不同的应用程序,在web应用程序容器中的不同应用程序上下文中运行 CGI代码直接将查询定向到Sesame服务器,但将更新定向到Sesame工作台 Sesame workbench实际上只是Sesame服务器的一个UI,本质上是将您的请求代理到底层的Sesame服务器上。第一次进行更新时,工作台必须与服务器建立连接,我认为这涉及到向Sesame服务器发出各种额外的元数据请求。在此之后,连接被工作台缓存,这就是为什么后续更新运行得非常快的原因 可以直接针对芝麻服务器进行更新,方法是将更新端点更改为使用芝麻服务器
/statements
端点,如中所述
通过直接使用Sesame服务器,您应该消除第一次更新时的长时间延迟。当我们创建存储库时,我们将其创建为“内存存储”存储库。我创建了一个“原生Java存储”类型的新存储库,现在我的第一个调用是fast(所有后续调用都是fast)。创建存储库时,我们将其创建为“内存存储”存储库。我创建了一个“Native Java Store”类型的新存储库,现在我的第一个调用很快(所有后续调用都很快)。我刚刚尝试了这个。将它改为使用openrdf sesame应用程序和/statements端点,但第一次调用它花了13秒。其他调用都少于1秒。@MichaelRichey我已编辑了您的问题,以显示正确的更新端点URL,而不是工作台URL。我这样做的原因是,我想避免其他用户找到此代码并使用错误的URL重新使用它。我只是尝试了这个。将它改为使用openrdf sesame应用程序和/statements端点,但第一次调用它花了13秒。其他调用都少于1秒。@MichaelRichey我已编辑了您的问题,以显示正确的更新端点URL,而不是工作台URL。我这样做的原因是我想避免其他用户发现此代码并使用错误的URL重新使用它。这可能解释了这一点-第一次调用缓慢是由于内存存储正在初始化(从磁盘读取数据)。本机存储没有这种惩罚(虽然它也有类似的惩罚,因为它需要预热一些缓存-但惩罚应该远没有这么重)。有什么想法,为什么我们在对内存存储运行查询时没有得到这种启动惩罚?我们只在插入/删除时看到它。不确定。这将是服务器重启后的第一个操作,通常会受到此惩罚。无论这是查询还是更新都不重要。这可能解释了这一点-第一次调用缓慢是由内存存储初始化(从磁盘读取数据)引起的。本机存储没有这种惩罚(虽然它也有类似的惩罚,因为它需要预热一些缓存-但惩罚应该远没有这么重)。有什么想法,为什么我们在对内存存储运行查询时没有得到这种启动惩罚?我们只在插入/删除时看到它。不确定。这将是服务器重启后的第一个操作,通常会受到此惩罚。无论这是查询还是更新都不重要。
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
update_endpoint = "http://%s:8080/openrdf-sesame/repositories/%s/statements" % (server,repo)