1

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

我想知道关于对象生命周期我应该如何在 Web 上下文中使用 IObjectContainer 。如我所见,我可以执行以下操作之一:

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

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

由于打开 IObjectContainer 时数据库被锁定,我很确定选项 2)会给我带来一些并发问题 - 选项 1 也会出现这种情况吗?

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

4

1 回答 1

2

选项 1) 可能会给您带来严重的麻烦,因为您将在所有请求之间有效地共享事务。我不认为这是一个可行的选择。

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

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

于 2010-03-21T18:17:19.587 回答