代码之家  ›  专栏  ›  技术社区  ›  driis

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

  •  1
  • driis  · 技术社区  · 15 年前

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

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

    由于在打开IObjectContainer时数据库被锁定,我非常确定选项2)会给我带来一些并发性问题—选项1也是这样吗?

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   mnemosyn    15 年前

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

    正如您已经指出的,选项3)本身充满了危险,因为您必须手动跟踪对象标识—这是一项乏味且极易出错的任务。这真的破坏了对象数据库的所有美。另外,据我所知 IObjectContainer

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