2012-04-02 42 views
3

我们为我们的网站使用RavenDB。该网站将所有数据加载到内存(不是很多),以便能够处理大量负载。我们将数据加载到后台线程中,后台线程会定期检查数据库(RavenDB + sqlserver)是否存在任何新数据,以及是否将数据加载到内存中。ravendb长时间运行会话

我们已经尝试了很多东西来解决每个会话30次查询到RavenDB的烦人请求限制。由于Raven没有任何机制在完成检查/加载循环的一次迭代后“重置”会话,并且由于无法告诉Structuremap,所以我们确实想要新的会话,即使我们是仍然像以前一样,我们有点卡住了。

最后,我重新设计了一个架构,使得我们的仓库现在使用RavenSessionProxy,该架构映射为我们加载,可以通过加载/获取循环重置(当我们重置它时手动创建新的documentsession)。

这真的是唯一的方法吗? Raven中没有任何机制可以说:“嘿,先生,Session,我现在和你在一起,自己刷新,准备下一次给你打电话,并且准备好新鲜”)或者告诉Structuremap“Hey,SM!Next当我问你一个IDocumentSession,给我一个新的,我厌倦了这个旧的“

回答

1

AndreasKnudsen, RavenDB会话被设计为相对短暂的。如果你需要让他们保持一段时间,你可能做错了什么。 请注意,RavenDB已经做了很多工作以确保它很快速,因此不需要将内容加载到内存中。

您可以设置session.Advanced.MaxNumberOfRequests,这会增加您可以执行的请求数量,但这也意味着您将在内存中保留更多内容。

+0

MaxNumberOfRequests只会推迟问题,重点是我希望会话永远持续下去,只是定期重置自己。不是所有*用例都是针对单个请求执行多达30个查询然后死亡的。我的背景加载是*假设*永远生活 – AndreasKnudsen 2012-04-02 11:28:39

4

正如Ayende指出的,会议应该是短暂的。取代依赖于会话的后台作业,让它依赖于IDocumentStore,然后为每次运行创建/处理会话。在启动时,IDocumentStore可以是插入到容器中的单例。