2010-03-21 72 views
1

我正在评估db4o是否为ASP .NET MVC项目的持久性。如何在Web应用程序中使用db4o IObjectContainer? (容器的生命周期?)

我想知道如何在Web上下文中使用IObjectContainer关于对象生存期。在我看来,我可以做下列之一:

  1. 在应用程序启动创建IObjectContainer并保持相同的情况下为整个应用程序生命周期。
  2. 每个请求创建一个IObjectContainer。
  3. 启动一个服务器,并为每个数据库交互获取一个客户端IObjectContainer。

这些选项在性能和并发性方面有什么影响?

由于数据库在IObjectContainer打开时被锁定,所以我很肯定选项2)会给我带来一些并发问题 - 对于选项1,情况也会如此吗?

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

回答

2

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

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

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

相关问题