ravendb长期会议

时间:2012-04-02 07:38:08

标签: session structuremap ravendb

我们在网站上使用RavenDB。该站点将所有数据加载到内存中(不是很多),以便能够处理大量负载。我们在后台线程中加载数据,后台线程定期检查数据库(RavenDB + sqlserver)是否存在任何新数据,如果是,则将数据加载到内存中。

我们已经尝试了很多东西来绕过每个会话的RavenDB中30个查询的烦人请求限制。由于Raven没有任何机制在我们完成一次检查/加载循环迭代后“重置”会话,并且因为无法告诉Structuremap我们真的想要一个新的会话即使我们仍然像以前一样陷入困境。

最后我重新构建了目录,以便我们的存储库现在使用一个结构图为我们加载的RavenSessionProxy,它可以通过加载/获取循环重置(当我们重置它时会手动实例化一个新的文档会话。)

这真的是唯一的方法吗?在Raven里面没有任何机制可以说“嘿,先生,我现在已经和你一起完成了,在我下次打电话给你的时候自己动手做好准备”或者告诉Structuremap“嘿,SM!Next我问你一个IDocumentSession,带给我一个新的,我厌倦了这个旧的“

2 个答案:

答案 0 :(得分:4)

正如艾恩德指出的那样,会议应该是短暂的。不是你的后台工作依赖于一个会话,而是依赖于IDocumentStore,然后为每次运行创建/处理会话。 IDocumentStore可以是在启动时插入容器的单例。

答案 1 :(得分:1)

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

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