2

基本的に同じことを行う2つのコードがあります。2 つの異なる方法でデータテーブルを埋めます。ここにそれらがあります:

<h:dataTable  binding="#{currentUser.ITEMS}"   style=" width:505px;"   id="userTable" value="#{currentUser.items}" var="user"  >
    <h:column>

    </h:column>
    <h:column>
        <f:facet name="header">Account Number</f:facet>
             #{user.name}
    </h:column>
    <h:column>
        <f:facet name="header">Currency</f:facet>
            #{user.surname}
    </h:column>                
</h:dataTable>

ここで、items はユーザーのアイテムを含む配列であり、currentUser は User 型のセッション スコープ クラス オブジェクトです。最初のコードでは、ユーザーがログインすると、データベースからすべてのアイテムを取得し、後で使用するためにセッションに追加します。この方法でテーブルに入力します。今2番目のバージョン:

<h:dataTable  binding="#{user.ITEMS}"   style=" width:505px;"   id="userTable" value="#{user.items}" var="user"  >
    <h:column>

    </h:column>
    <h:column>
        <f:facet name="header">Account Number</f:facet>
             #{user.name}
    </h:column>
    <h:column>
        <f:facet name="header">Currency</f:facet>
            #{user.surname}
    </h:column>                
</h:dataTable>

2 番目の例では、ユーザーがシステムにログインするときに項目リストを保持しませんが、テーブルが入力されるたびに、データベース クエリを実行し、ユーザーの項目でテーブルを入力します。

だから私の質問は、どちらの方法が良いですか? 最初のケースでは、多くのセッション オブジェクトを使用することは有害である可能性がありますが、2 番目のケースでは、アイテム情報が必要になるたびにデータベース検索を行うことがわかります。では、空間や時間などの点で、一方の方法が他方よりも優れていると言えますか?

4

1 に答える 1

6

セッション スコープのオブジェクトにデータをキャッシュすると、古いデータが提供されるリスクがあります。別のプロセスがデータベースの内容を変更すると、セッション スコープのオブジェクトはこれらの変更を反映しません。ただし、これは変更可能なデータではないように思えますが、その場合、これは問題ではありません。

それ以外では、データがメイン メモリに保持されるため、セッション スコープ オブジェクトにデータをキャッシュする方が時間の点で優れている可能性があります。メモリー。データベースがこのデータをキャッシュしている可能性があるため、「may」修飾子が存在します。

于 2013-07-10T23:33:36.690 に答える