Web アプリケーションで db4o IObjectContainer を使用するにはどうすればよいですか?(コンテナの寿命?)

StackOverflow https://stackoverflow.com/questions/2488010

  •  21-09-2019
  •  | 
  •  

質問

ASP .NET MVC プロジェクトの永続性について db4o を評価しています。

オブジェクトの有効期間に関して、Web コンテキストで IObjectContainer をどのように使用すればよいのか疑問に思っています。私が見たところ、次のいずれかを行うことができます。

  1. アプリケーションの起動時に IObjectContainer を作成し、アプリケーションの存続期間全体にわたって同じインスタンスを保持します。
  2. リクエストごとに 1 つの IObjectContainer を作成します。
  3. サーバーを起動し、データベース対話ごとにクライアント IObjectContainer を取得します。

これらのオプションは、パフォーマンスと同時実行性の点でどのような影響を及ぼしますか?

IObjectContainer が開かれるとデータベースがロックされるため、オプション 2) では同時実行性に問題が発生すると確信しています。これはオプション 1 の場合にも当てはまりますか?

私の理解では、IObjectContainer からオブジェクトを取得する場合、db4o がそれを同じオブジェクトとして識別するために、そのオブジェクトは同じ IObjectContainer インスタンスによって保存される必要があります。したがって、オプション 3) を選択した場合は、元のオブジェクトを取得し、必要な変更を加え (変更されたオブジェクトからデータをコピー)、同じ IObjectContainer を使用してそれを保存する必要があります。これは本当ですか ?

役に立ちましたか?

解決

オプション1)あなたが効果的にすべての要求の間でトランザクションを共有しますので、あなたが深刻なトラブルに取得することができます。私は、これは実現可能な選択肢であるとは思わない。

退屈で非常にエラーを起こしやすいタスク - 手動でオブジェクトのアイデンティティを追跡する必要がありますので、あなたが既に特定されたよう

、オプション3)は、独自の危険をはらんでいます。これは本当にオブジェクトデータベースのすべての美しさを破壊します。また、から私は、これはあまりにも高価になるようIObjectContainerを作成するオーバーヘッドが小さいではありません知ってます。

私の知る限りでは、クライアント・サーバモードで開いたときにデータベースをロックしないオプション2、と

このかなりの葉たちを - あなたはそのinformaitonを見つけましたか?だから最高のアイデアは、アプリケーションの起動と要求ごとのオープンの新しいAのIObjectServerIObjectContainerを開く、または要求ごとのTCPを使用してリモートサーバーに接続することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top