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