6.1.8 自動採番機能を使用したデータロード
順序数生成子を使用すると,自動的に採番ができます。これを自動採番機能といいます。データロード時に,順序数生成子が生成した順序番号を,表の列に格納できます。ここでは,順序番号の取得方式と格納方式の選択基準について説明します。
なお,自動採番機能についてはマニュアル「HiRDB Version 9 UAP開発ガイド」を,自動採番機能を使用したデータロードの詳細についてはマニュアル「HiRDB Version 9 コマンドリファレンス」を参照してください。
- 〈この項の構成〉
(1) 順序番号の取得方式の選択基準
順序番号の取得方式には,次の3種類があります。
- 全数一括取得方式:
-
データロード完了後に一括して順序数生成子の値を使用した順序番号にします。
- 指定単位取得方式:
-
指定した単位ごとに順序番号を取得しながらデータロードします。
- バッファ単位取得方式:
-
入力バッファに読み込める行数分の順序番号を取得しながらデータロードします。
順序番号の取得方式は,次の表に示す特徴を考慮して選択してください。
検討項目 |
特徴 |
||
---|---|---|---|
全数一括取得方式 |
指定単位取得方式 |
バッファ単位取得方式 |
|
正常時の欠番発生 |
発生しません。 |
データロードした行数が指定した単位の倍数でなければ,欠番が発生します。 |
発生しません。※2 |
ロールバック時の大量の欠番発生 |
発生しません。 |
現在値はロールバックが発生しても回復されないため,大量の欠番が発生します。 |
現在値はロールバックが発生しても回復されないため,大量の欠番が発生します。 |
順序数生成子への採番要求時の通信オーバヘッド※1 |
データロードのコミットの回数分しか採番要求をしないため,採番処理による性能への影響は小さくなります。 |
取得する単位を大きくすることで,採番要求の回数を抑え,性能への影響を小さくできます。 |
入力バッファ長を大きくすることで,採番要求の回数を抑え,性能への影響を小さくできます。ただし,1回に取得する単位は入力バッファ長と列の定義長から算出した行長で決まるため,行長が大きいと入力バッファに多くのメモリを必要とします。 |
同じ順序数生成子を使用するUAPとの同時実行 |
同時実行はできません。データロード中は順序数生成子に排他が掛かかります。 |
同時実行できます。 |
同時実行できます。 |
RDエリア単位のデータロードの並列実行 |
同時実行はできません。データロード中は順序数生成子に排他が掛かかります。 |
並列実行できます。 |
並列実行できます。 |
- 注※1
-
HiRDB/パラレルサーバの場合,データベース作成ユティリティが入力データを読み込むサーバと順序数生成子が定義されたサーバが異なるとき,順序番号の取得時に通信が発生します。そのため,採番要求が頻繁に行われると,通信回数が多くなり,データロードの性能に影響します。
- 注※2
-
順序番号の格納方式が列データ全置換以外の場合は,欠番が発生する可能性があります。
(2) 順序番号の格納方式の選択基準
順序番号の格納方式には,次の3種類があります。それぞれの選択基準について説明します。
- 列データ全置換:
-
順序番号を格納する列に対して,入力データファイル中の該当する列データをすべて順序番号に置き換えます。該当する列の値に,すべて新しく番号を振り直す場合に選択します。
- 列データ一部置換:
-
順序番号を格納する列に対して,入力データファイル中の該当する列データのうち,指定した置換条件に一致するデータだけ順序番号に置き換えます。例えば,入力データファイルがDAT形式,又は拡張DAT形式で,NULL値の部分だけ順序番号に置き換える場合などに選択します。
- 列データ追加:
-
順序番号を格納する列に対応するデータが入力データファイル中にない場合,順序番号を入力データとして追加します。番号を格納する列を新しく追加する場合に選択します。なお,入力データファイルがバイナリ形式の場合,この方式は指定できません。