格納構造はDSO定義で指定します。格納構造には、SEQUENTIAL構造およびBTREE構造があります。SEQUENTIAL構造は、表の格納構造です。BTREE構造は、インデックスの格納構造です。
表のデータの格納方式は、SEQUENTIAL構造にインデックスを付ける形態となります。
ここでは、表の格納構造について、その特徴とその構造に適したデータ処理を示します。
SEQUENTIAL構造は、データをその挿入順に格納する構造です。
在庫表を例にSEQUENTIAL構造の概略を以下に示します。
図3.21 SEQUENTIAL構造の概略
データの処理の効率に一番影響のある要因は入出力回数です。SEQUENTIAL構造の場合は、以下の特徴があります。
データ処理はインデックスがない場合、全データを参照するため、入出力回数はデータ量に大きく依存します。したがって、列を指定するデータ操作がある場合には、その列に対応するインデックスの付加が必要になります。
なお、インデックスを付加する場合に考慮すべき事項は、“3.5.2.1 BTREE構造”を参照してください。
DSO定義のPRECEDENCE(1)を指定することで、表のデータに対して更新と参照が同時に発生した場合に、更新の完了を待たずに即時に最新のコミット済みデータを参照することができます。
PRECEDENCE(1)を指定した場合の特徴と考慮すべき事項は、“3.5.1.2 PRECEDENCE(1)を指定したSEQUENTIAL構造の特徴と注意点”を参照してください。
PRECEDENCE(1)を指定したSEQUENTIAL構造の場合、“3.5.1.1 SEQUENTIAL構造”に加えて、以下の点に注意してください。
本格納構造ではトランザクションが更新途中にある一時的な期間、表の1行に対応する更新前のデータと更新中のデータを2重に保持します。そのため、SEQUENTIAL構造の表のDSOをPRECEDENCE(1)を指定して定義した場合、参照しようとする行が他のトランザクションによって更新途中の場合でも、その完了を待つことなく、更新が行われる前のコミット済みのデータを参照することができます。
本格納構造は、データを2重に保持するために他の格納構造と比較してデータ量が大きくなるという特徴があります。
このため、インデックスを利用したアクセスとなるよう設計してください。
なお、インデックスを付加する場合に考慮すべき事項は、“3.5.2.1 BTREE構造”を参照してください。
本格納構造では、データ処理の効率化を図るため、同じページに更新前と更新後のデータを保持します。
本格納構造は、検索レスポンスを重視したオンラインアプリケーションを実行する際に効果を発揮します。そのため、大量更新をともなうバッチ業務が主となるような場合には他の格納構造の適用も検討してください。
参照
本格納構造をアプリケーションから利用する場合に考慮すべき点については、“Symfoware Server アプリケーション開発ガイド(共通編)”を参照してください。