我正在评估db4o for ASP .NET MVC项目的持久性。
我想知道如何在Web上下文中使用IObjectContainer来关注对象的生命周期。在我看来,我可以做以下其中一项:
在性能和并发性方面,这些选项有什么含义?
由于数据库在打开IObjectContainer时被锁定,我很确定选项2)会让我遇到一些并发问题 - 这也是选项1的情况吗?
据我了解,如果我从IObjectContainer中检索一个对象,它必须由同一个IObjectContainer实例保存 - 以便db4o将其识别为同一个对象。因此,如果我选择选项3),我将不得不检索原始对象,进行必要的更改(从修改的对象复制数据),然后使用相同的IObjectContainer存储它。这是真的 ?
答案 0 :(得分:2)
选项1)可能会让您陷入严重的麻烦,因为您将在所有请求中有效地共享交易。我不认为这是一个可行的选择。
正如您已经确定的那样,选项3)充满了自己的危险,因为您必须手动跟踪对象身份 - 这是一项繁琐且极易出错的任务。这真的破坏了对象数据库的所有美感。另外,据我所知,创建IObjectContainer
的开销不小,所以这太贵了。
这几乎让我们留下了选项2,据我所知,在客户端 - 服务器模式下打开时不会锁定数据库 - 你在哪里找到了这些信息?因此,最好的办法是在应用程序启动时打开IObjectServer
并为每个请求打开一个新的IObjectContainer
,或者使用TCP per-request连接到远程服务器。