Symfoware(R) Server RDBユーザーズガイド データベース定義編 - FUJITSU - |
目次 索引 |
RANDOM構造は、データに対して、そのキーとなる列の組の値から格納するページ(これをバケットと呼びます)を計算し、格納する構造になっています。ページにデータが収まらない場合は、Symfoware/RDBが自動的にオーバフロー部のページを切りだして、そのバケットに割り当て、データを格納します。元のバケットが属するぺージをオーバフロー部に対してプライム部と呼びます。
データを格納するぺージを決める列の組をクラスタキーと呼びます。クラスタキーは、表のDSO定義のCLUSTERオプションで指定されたキーです。CLUSTERオプションを省略した場合には、クラスタキーは対応する表定義の主キーになります。RANDOM構造の場合、等しいクラスタキーの値を持つデータは、同一のバケットに格納します。
クラスタキーの値からバケットを決める計算に使用する関数を、ハッシュ関数と呼びます。データを格納するバケットは、ハッシュ関数により、Symfoware/RDBが自動的に決定します。表のDSO定義文の格納オプションにRULEを指定している場合は、RULEに指定した値式を計算した結果により、データを格納するバケットを決定します。
図:RANDOM構造の概略に在庫表を例にとってRANDOM構造の概略を示します。
データの処理の効率に一番影響のある要因は入出力回数です。RANDOM構造の場合は以下の特徴があります。
RANDOM構造では、プライム部のバケットを1つのページに対応させ、これとは独立に、オーバフロー部のバケットも1つのページに対応させます。それぞれのページ長は独立に指定できます。プライム部のページ長はDSO定義のPAGESIZE1オプションで、オーバフロー部のページ長はPAGESIZE2オプションで指定します。
ページ長の指定の際の考慮点には、以下のものがあります。
対応する表の一意性制約の列で、クラスタキーに指定されていないものについては、インデックスの付加が必要になります。インデックスが付加されていない状態だと、表にアクセスすることはできません。
表のDSO定義文の格納オプションにRULEを指定することにより、データを格納するバケットを決定する規則を指定することができます。RULEを指定する場合には、以下の注意が必要です。
データを格納するバケットは、RULEに指定した値式を計算した結果をバケット数で割った余りの値により決定します。図:データの格納方法の概略にデータの格納方法の概略を示します。
備考.値式の計算結果が負数になると、エラーとなります。
以下に、RULEを指定した場合の表のDSO定義の例を示します。
例
クラスタキーが昇順に発生する場合で、格納効率を高め、かつ、データがオーバフロー部に格納されるのを防ぎます。製品情報表のレコード長を200バイトとします。プライム部のページ長(PAGESIZE1)と、1ページに4件のデータを格納することを考慮してRULEに指定する値式を設計します。
CREATE DSO 製品情報表DSO FROM A社.製品情報表 TYPE RANDOM ( PAGESIZE1(1), PAGESIZE2(1),CLUSTER(製品番号), RULE(製品番号/4))
備考.表のデータ件数を考慮した十分なバケット数が必要です。
バケット数は、表のDSI定義の割付け対象で指定したプライム部の割付け量とプライム部のページ長から求めることができます。バケット数は、次の式で求めます。(1を引くのは、Symfoware/RDBがページを管理するために1ページ分を使用するためです。)
プライム部の割付け量 バケット数 = --------------------- − 1 プライム部のページ長 |
目次 索引 |