2010-03-21 71 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每請求連接到遠程服務器。

相關問題