ページの先頭行へ戻る
Symfoware Server V12.2.0 RDB運用ガイド(データベース定義編)
FUJITSU Software

4.1.3 RANDOM構造

RANDOM構造は、データに対して、そのキーとなる列の組の値から格納するページ(これをバケットと呼びます)を計算し、格納する構造になっています。ページにデータが収まらない場合は、Symfoware/RDBが自動的にオーバフロー部のページを切りだして、そのバケットに割り当て、データを格納します。元のバケットが属するページをオーバフロー部に対してプライム部と呼びます。

データを格納するページを決める列の組をクラスタキーと呼びます。クラスタキーは、表のDSO定義のCLUSTERオプションで指定されたキーです。CLUSTERオプションを省略した場合には、クラスタキーは対応する表定義の主キーになります。RANDOM構造の場合、等しいクラスタキーの値をもつデータは、同一のバケットに格納します。

クラスタキーの値からバケットを決める計算に使用する関数を、ハッシュ関数と呼びます。データを格納するバケットは、ハッシュ関数により、Symfoware/RDBが自動的に決定します。表のDSO定義文の格納オプションにRULEを指定している場合は、RULEに指定した値式を計算した結果により、データを格納するバケットを決定します。

在庫表を例にRANDOM構造の概略を以下に示します。

図4.2 RANDOM構造の概略

データ処理のパターンに対するRANDOM構造の特徴

データの処理の効率に一番影響のある要因は入出力回数です。RANDOM構造の場合は以下の特徴があります。

RANDOM構造のページ長の指定

RANDOM構造では、プライム部のバケットを1つのページに対応させ、これとは独立に、オーバフロー部のバケットも1つのページに対応させます。それぞれのページ長は独立に指定できます。プライム部のページ長はDSO定義のPAGESIZE1オプションで、オーバフロー部のページ長はPAGESIZE2オプションで指定します。

ページ長を指定するときは、以下の考慮が必要です。

RANDOM構造でインデックスの付加が必要な場合

対応する表の一意性制約の列で、クラスタキーに指定されていないものについては、インデックスの付加が必要になります。インデックスが付加されていない状態だと、表にアクセスすることはできません。

RANDOM構造のデータ格納位置の指定

表のDSO定義文の格納オプションにRULEを指定することにより、データを格納するバケットを決定する規則を指定することができます。RULEを指定する場合には、以下の注意が必要です。

データを格納するバケットは、RULEに指定した値式を計算した結果をバケット数で割った余りの値により決定します。以下にデータの格納方法の概略を示します。

図4.3 データの格納方法の概略

備考.値式の計算結果が負数になると、エラーとなります。


以下に、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
                  プライム部のページ長