如何在Web应用程序中使用db4o IObjectContainer? (容器寿命?)

时间:2010-03-21 17:38:53

标签: c# .net asp.net-mvc db4o

我正在评估db4o for ASP .NET MVC项目的持久性。

我想知道如何在Web上下文中使用IObjectContainer来关注对象的生命周期。在我看来,我可以做以下其中一项:

  1. 在应用程序启动时创建IObjectContainer,并在整个应用程序生命周期内保留相同的实例。
  2. 为每个请求创建一个IObjectContainer。
  3. 启动服务器,并为每个数据库交互获取客户端IObjectContainer。
  4. 在性能和并发性方面,这些选项有什么含义?

    由于数据库在打开IObjectContainer时被锁定,我很确定选项2)会让我遇到一些并发问题 - 这也是选项1的情况吗?

    据我了解,如果我从IObjectContainer中检索一个对象,它必须由同一个IObjectContainer实例保存 - 以便db4o将其识别为同一个对象。因此,如果我选择选项3),我将不得不检索原始对象,进行必要的更改(从修改的对象复制数据),然后使用相同的IObjectContainer存储它。这是真的 ?

1 个答案:

答案 0 :(得分:2)

选项1)可能会让您陷入严重的麻烦,因为您将在所有请求中有效地共享交易。我不认为这是一个可行的选择。

正如您已经确定的那样,选项3)充满了自己的危险,因为您必须手动跟踪对象身份 - 这是一项繁琐且极易出错的任务。这真的破坏了对象数据库的所有美感。另外,据我所知,创建IObjectContainer的开销不小,所以这太贵了。

这几乎让我们留下了选项2,据我所知,在客户端 - 服务器模式下打开时不会锁定数据库 - 你在哪里找到了这些信息?因此,最好的办法是在应用程序启动时打开IObjectServer并为每个请求打开一个新的IObjectContainer,或者使用TCP per-request连接到远程服务器。