複数行スキーマへの切り替え
複数行スキーマ構成では、保管できるデータ量に制限はなく、 アプリケーションのデータベース容量によってのみ制約されます。 アプリケーションは、レコード全体ではなく、個々のフィールドを読み取ることができるので、不要な Java™ オブジェクト・シリアライゼーションを回避することでパフォーマンスを向上させる上で役立ちます。 セッション管理機能を構成して、セッション・オブジェクトの各属性をデータベースのそれぞれの専用の行に保管するには、複数行スキーマ構成を使用します。
このタスクについて
残された唯一の実質的な制限は、セッション属性オブジェクトのサイズです。 複数行スキーマは、潜在的に、特定の使用法シナリオでパフォーマンスが向上します。 例えば、大量のデータがセッションに保管されているにもかかわらず、 指定のサーブレットの HTTP 要求の処理中には特定の少量のデータにしかアクセスがない というようなシナリオの場合です。 このようなシナリオでは、不要な Java オブジェクト・シリアライゼーションを回避することは、パフォーマンスの向上に有効です。
複数行スキーマを使用すると、 より大きなセッション・レコードを取得でき、さらにパフォーマンスも向上させることができます。 ただし、次の表にあるように、 単一行スキーマから複数行スキーマに切り替えるには、 少し手間がかかります。
デフォルトでは、単一セッションは、 セッションの保持に使用されるデータベース表内の単一行にマップされます。 こうしたセットアップにすると、WebSphere® Application Server がアクセス可能な、ユーザー定義かつアプリケーション固有のデータの量に厳しい制限が課せられます。
ご使用のアプリケーションのニーズに適したオプションを調べると共に、 あるデータベースに対しては単一行の直接使用を、また、 別のデータベースに対しては複数行の使用を設定することを検討してください。 使用するデータ・ソースを切り替えて、コード内でこれを実行してください。 続いて、パフォーマンスをモニターします。
プログラミングの問題 | アプリケーション・シナリオ |
---|---|
単一行を使用する理由 |
|
単一行を使用しない理由 | セッション当たり 2 メガバイトの保管データの制限があるためです。 |
複数行を使用する理由 |
|
複数行を使用しない理由 | データのサイズが小さい場合、全データを 1 行に保管できれば、 複数行読み取りによる余分なオーバーヘッドがなくなります。 |
複数行使用の場合、アプリケーション・データ・オブジェクト が相互参照を持たないよう、また、循環参照が発生しないように設計してください。 例えば、HttpSession.put(..) メソッドを使用するセッションに A と B という 2 つのオブジェクトを保管しており、A に B への参照が含まれているとします。 複数行の場合、オブジェクトはデータベースの複数の行に保管されているため、後にオブジェクト A および B を取り出したときに、A と B の間のオブジェクト・グラフが、保管されているものと違ってきます。 A と B は、独立したオブジェクトとして振る舞います。