Python 第一次调用openrdf sesame更新端点非常慢。有没有办法优化它?

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会话保持活动状态来进行更新调用(无论如何,这不

我们有一些python脚本来执行sparql查询和“更新”(插入/删除)。以下是大部分相关代码(我认为):

所有执行查询的调用都非常快,只需不到1秒即可完成。但是,任何执行更新的调用都需要很长的时间(16秒)才能第一次执行。第一次呼叫后的每个呼叫在不到1秒的时间内运行。我们正在运行芝麻版本2.7.12(我们认为从芝麻版本2.7.3升级可能会有所帮助,但效果不太好)。我们只有两千到三千个三倍。这一切都是从CGI脚本运行的,所以我们不能仅仅让python会话保持活动状态来进行更新调用(无论如何,这不是工作台的工作吗?)。你知道第一次调用update_端点花了这么长时间吗?其他人也有同样的问题吗?有什么建议吗

谢谢

编辑 我听从了罗布的建议,但我仍然有同样的问题。来自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端点时看到很大的差异。

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)