スケーラブルデータベースサーバ HiRDB Version 8 システム導入・設計ガイド(Windows(R)用)
表を横分割する方法には,次に示す2種類があります。
キーレンジ分割とは,表を構成する列のうち,特定の列が持つ値の範囲を条件として表を横分割することです。なお,表を横分割するときの条件にした特定の列を分割キーといいます。表のデータがどのRDエリアに格納されているかどうかを意識したい場合に使用します。横分割の指定方法には,次に示す2種類があります。
比較演算子を使用して,それぞれのRDエリアへの格納条件を指定します。一つのRDエリアに対して,格納条件で指定された一つの範囲だけを指定できます。
定数を使用して,それぞれのRDエリアに格納するデータの,境界となる値を指定します。一つのRDエリアに対して,境界値で区切られた複数の範囲を指定できます。なお,境界値指定の場合,マトリクス分割もできます。マトリクス分割については,「12.4 表のマトリクス分割」を参照してください。
ハッシュ分割とは,表を構成する列が持つ値をハッシュ関数を使用して,均等にRDエリアに格納し,表を横分割することです。表を横分割するときに指定した特定の列を分割キーといいます。キーの範囲を意識しないで,表のデータをRDエリアに均等に格納したい場合に使用します。ハッシュ分割は,境界値指定のキーレンジ分割と組み合わせてマトリクス分割ができます。マトリクス分割については,「12.4 表のマトリクス分割」を参照してください。
ハッシュ分割にはフレキシブルハッシュ分割とFIXハッシュ分割があります。
フレキシブルハッシュ分割では,表を分割してRDエリアに格納する場合,どのRDエリアに分割されるか定まりません。このため,検索処理では,該当する表があるすべてのバックエンドサーバが対象になります。
FIXハッシュ分割では,表がどのRDエリアに分割されたかをHiRDBが認識します。このため,検索処理では,該当するデータがあると予測されるバックエンドサーバだけが対象になります。
分割キーには次に示すようなキーを指定してください。
また,ハッシュ分割では,分割キーに単一列と複数列が選択できます。単一列を指定した場合,分割列のキー値の種類が少なかったり,キー値に偏りがあるとデータを均等に分割できないことがあります。この場合,分割する列名を複数指定して,データをRDエリアに均等に分割させるようにします。
ハッシュ分割で使用するハッシュ関数の内容を次の表に示します。
表12-2 ハッシュ関数の内容
ハッシュ関数 | 説明 |
---|---|
HASH0 | このハッシュ関数は,分割に指定した列のデータ型がDATE,TIMESTAMP,CHAR(8)※1,又はCHAR(6)※1で,年月の値を使用してハッシングし,データを格納するRDエリアを月単位で循環させて割り当てる場合に使用します。分割キーは単一列を指定する必要があります。 |
HASH1 | このハッシュ関数は,分割に指定した列のすべてのデータ型に使用できます。分割に指定したすべての列のデータの全バイト※2を使用してハッシュします。データ長が0バイト以上の列に指定できます。 |
HASH2 | このハッシュ関数は,分割に指定した列のすべてのデータ型に使用できます。分割に指定したすべての列のデータの全バイト※2を使用してハッシュします。データ長が0バイト以上の列に指定できます。 HASH1を指定してデータを均等にRDエリアに格納できなかった場合に指定します。 |
HASH3 | このハッシュ関数は,分割に指定した列のデータ型がINTEGER,又はSMALLINTの場合に使用します。分割したすべての列の末尾2バイト※2を使用してハッシュします。データ長が2バイト以上の列に指定できます。 |
HASH4 | このハッシュ関数は,分割に指定した列のデータ型がDATEの場合に使用します。分割に指定したすべての列の先頭4バイト※2を使用してハッシュします。データ長が4バイト以上の列に指定できます。 |
HASH5 | このハッシュ関数は,分割に指定した列のデータ型がTIMEの場合に使用します。分割に指定したすべての列の先頭3バイト※2を使用してハッシュします。データ長が3バイト以上の列に指定できます。 |
HASH6 | このハッシュ関数は,分割に指定した列のすべてのデータ型に使用できます。DECIMALの場合に最も適しています。分割に指定したすべての列の,データの全バイト※2を使用してハッシュします。データ長が0バイト以上の列に指定できます。 |
HASHA | このハッシュ関数は,分割に指定した列のすべてのデータ型に使用できます。分割に指定したすべての列のデータの全バイト※2を使用してハッシュします。データ長が0バイト以上の列に指定できます。 |
HASHB | このハッシュ関数は,分割に指定した列のすべてのデータ型に使用できます。分割に指定したすべての列のデータの全バイト※2を使用してハッシュします。データ長が0バイト以上の列に指定できます。 HASHAを指定してデータを均等にRDエリアに格納できなかった場合に指定します。 |
HASHC | このハッシュ関数は,分割に指定した列のデータ型がINTEGER,又はSMALLINTの場合に使用します。分割したすべての列の末尾2バイト※2を使用してハッシュします。データ長が2バイト以上の列に指定できます。 |
HASHD | このハッシュ関数は,分割に指定した列のデータ型がDATEの場合に使用します。分割に指定したすべての列の先頭4バイト※2を使用してハッシュします。データ長が4バイト以上の列に指定できます。 |
HASHE | このハッシュ関数は,分割に指定した列のデータ型がTIMEの場合に使用します。分割に指定したすべての列の先頭3バイト※2を使用してハッシュします。データ長が3バイト以上の列に指定できます。 |
HASHF | このハッシュ関数は,分割に指定した列のすべてのデータ型に使用できます。DECIMALの場合に最も適しています。分割に指定したすべての列の,データの全バイト※2を使用してハッシュします。データ長が0バイト以上の列に指定できます。 |
図12-4 ハッシュ分割で表格納用RDエリアを重複指定する例
表分割ハッシュ関数を使用したUAPの作成方法については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
ハッシュ関数は次に示すときに使用されます。
キーレンジ分割,フレキシブルハッシュ分割及びFIXハッシュ分割の相違点を次の表に示します。
表12-3 キーレンジ分割,フレキシブルハッシュ分割及びFIXハッシュ分割の相違点
相違点 | キーレンジ分割 | フレキシブル ハッシュ分割 |
FIXハッシュ分割 |
---|---|---|---|
データベース設計 | キーレンジを考慮して,データベースを設計する必要があります。 | キーレンジを考慮しないでデータベースを設計できます。 | キーレンジを考慮しないでデータベースを設計できます。 |
検索 | 検索条件によって,該当データが存在する可能性のあるバックエンドサーバだけ検索します。※1 | 対象表のある全バックエンドサーバで検索します。 | 探索条件に分割列に対する=,IN述語を指定した場合に,該当データが存在する可能性のあるRDエリアだけ検索します。ただし,ハッシュ関数にHASH0を使用した場合は,=述語,IN述語,(<,>,<=,>=による)範囲条件,BETWEEN述語,(前方一致比較の)LIKE述語,(前方一致比較の)SIMILAR述語を指定したときに検索します。※1 |
データ増加時の 対応 |
キーが増加するデータの場合,データの格納が特定のRDエリアに偏ります。 | データが増加しても,常に均等にRDエリアに格納されます。 | データが増加しても,常に均等にRDエリアに格納されます。 |
RDエリア閉塞時の運用 | 閉塞しているRDエリアをアクセスしない検索条件であればSQLを実行できます。※2 | 検索する表が格納されているRDエリアを一つでも閉塞すると,検索条件にかかわらずSQLを実行できません。 | 閉塞しているRDエリアをアクセスしない検索条件であればSQLを実行できます。※2 |
表の分割数の変更 | 表の再作成及び表の再編成が必要です。 | ALTER TABLEでRDエリアを追加でき,表の再編成は必須ではありません。 | 表の再作成及び表の再編成が必要です。ただし,表にデータが入っていないときだけALTER TABLEでRDエリアを追加できます。 |
RDエリア単位のデータロード・リロード | 該当するRDエリアに格納するデータかどうかをチェックします。 | 該当するRDエリアに格納するデータかどうかをチェックしません。 | 該当するRDエリアに格納するデータかどうかをチェックします。 |
データロード時のRDエリア単位による入力データファイルの作成方法 | キーレンジを考慮して,入力データをRDエリアごとに分類します。 | RDエリアごとのデータ件数が均等になるように,任意の方法で分類します。 | 表分割ハッシュ関数※3を使用したアプリケーションを作成し,入力データをRDエリアごとに分類します。 |
分割キーの更新 | 同値更新だけできます。 | 更新できます。 | 同値更新だけできます。 |
クラスタキーのUNIQUE定義及びUNIQUE指定のインデクス定義 | UNIQUEを指定できます。 | UNIQUEを指定できません。 | UNIQUEを指定できます。 |
ALTER TABLEによる分割格納条件の変更 | 次の分割方法の場合に変更できます。
|
変更できません。ただし,ALTER TABLEでRDエリアの追加はできます。 | 変更できません。ただし,ALTER TABLEでRDエリアの追加はできます。 |
表の横分割定義時の指定規則を次に示します。
キーレンジ分割(格納条件指定)の例を次の図に示します。
図12-5 キーレンジ分割(格納条件指定)の例
キーレンジ分割(境界値指定)の例を次の図に示します。
図12-6 キーレンジ分割(境界値指定)の例
フレキシブルハッシュ分割,FIXハッシュ分割の例を次の図に示します。
図12-7 フレキシブルハッシュ分割,FIXハッシュ分割の例
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.