データの更新頻度が非常に低い場合やデータ更新が行われる時間が特定できるといったケースでは、「読み込み専用(read-only)Bean」の指定を行うことにより性能向上を図ることが可能です。例えば、小売業などのアプリケーションで、価格データは週に1度のみ更新されるといったシナリオが考えられます。
AST(あるいは、RAD)を用いて、適切なEJBメソッドに「read-only」を設定します。実際には、[Beanのキャッシュ]設定の[アクティブ化]に「ONCE」を指定します(図10)。
[ロード]の指定としては、「INTERVAL」(図10)、「DAILY」(図11)、「WEEKLY」のいずれかを指定します。そして、各ロード指定に応じて、[再ロード間隔整数]に通知を設定します。
例えば、[ロード]が「INTERVAL」で[再ロード間隔整数]が 20の場合は、Beanが最後にロードされてから20分経過すると、再ロードします。[再ロード間隔整数]が 0の場合は、再ロードしません。[ロード]が「DAILY」で[再ロード間隔整数]が2300の場合は、毎晩23時に再ロードします。
WASでは、「Partial Column Update」機能を設定することにより、CMP Entity Beanに対して部分的な更新が可能になります。CMP Beanの「ejbStore()」メソッドが呼ばれた際に、「Partial Column Update」を使用することにより、変更個所のみをDBに反映します。(図12、図13)
「Partial Column Update」は、AST(あるいは、RAD)を使用して設定します(図14)。
[部分オペレーション]チェックボックスをチェックし、[UPDATE_ONLY]オプションを選択することにより設定します。
なお、部分オペレーションの使用に際して、以下の留意点があります。前回解説した「Batch Update on EJB Update」と「Partial Column Update(部分オペレーション)」を同じBeanに対して使用する場合、性能に影響を与えます。
というのも、「Partial Column Update」により異なる部分クエリーが発行されるようになるからです。似た部分クエリーをグループ化し、Batch Updateで使用するためには、「-Dcom.ibm.ws.pm.grouppartialupdate=true」をJVM引数に指定できます。
「CMP CMR(Container Managed Relation) Read-ahead」とは、親Beanに対する「FindByPrimary key」オペレーション実行時に、関連付けられたEntity Beanをプリロードする仕組みです。
「Read-ahead」(先行読み込み)は、「1つのクエリー内のトランザクションに対する関連するCMP Beanを取得することにより、DBに対するアクセス回数を最小化し、パフォーマンス向上を行う」というアイデアです。つまり、要求されたCMP Beanおよび関連するBeanを読み込みます。
例えば、ファインダー・メソッドを持つCMP Bean type AがBean Aのインスタンスを返すとします。このメソッドに対する[先行読み取りヒント]は、「RelationB.RelationC; RelationD」というように記します。これは、以下の2つの意味になります。
DBからtype AのBeanを読み込むと、直接関連付けられたBとDのBeanおよび間接的に関連付けられたCのBeanも併せて読み込まれます。
以下がAST(あるいは、RAD)による設定例です。
Copyright © ITmedia, Inc. All Rights Reserved.