ADON 高速ソート・プログラム V3.3 機能概要

高速ソート・プログラム
ADON高速ソート・プログラムは、標準 sor tコマンドにはない豊富な機能を備えています。
標準 sor tコマンドと比較して同一環境でもバッファー・サイズ、ワーク・ディレクトリーを柔
軟に指定できるため、チューニングによりパフォーマンスを大きく向上させます。
■主な機能
大規模ファイルの高速ソート
中間ファイルを異なる物理ディスクに配置することでI/Oを分散して処理効率をアップします。
また、使用するバッファー・サイズを指定することで、他のプロセスへの影響を考慮してシステ
ム全体のパフォーマンス管理が可能です。
容易な使用方法
パラメーターの指定方法には、コマンド・ラインから直接指定する方法と制御ファイルに記述す
る方法があります。指定するパラメーターの数や文字数が多い場合には、制御ファイルに記述す
ることにより指定が容易になります。
柔軟なキー指定
ソートのタイプと順序を、各キーに対して指定できます。
・最大128個のソート・キー指定
・各ソート・キーは最大256バイトまで指定可能
・各ソート・キーに対して、キー・タイプと昇順/降順の指定が可能
多種多様なキー・タイプ
キーのタイプは次のものが指定できます。
・キャラクター
・EBCDIC順キャラクター
・2進整数(2バイト/4バイト)
・パック10進数
・数値フィールド
EBCDIC順のソートでは、ASCII-EBCDICの変換テーブルを指定できます。
この変換テーブルでは、全256文字について変換するコードを指定できるので単なるASCII-EBCDIC
の変換以外に、独自の重み付けをした並び替えルールとして利用することも可能です。
例えば、辞書順(AaBbCc...YyZz)や電話番号順(ABC...YZabc...yz)というルールでソートするこ
とができます。
複数ファイルのソート
ソート対象となる入力ファイルを最大512個まで指定することができます。
バイナリー・ファイルのサポート
テキスト・ファイル以外に固定長レコードのバイナリー・ファイルがソートできます。
可変長フィールドのサポート
フィールド区切り文字を指定することで、特定の文字で区切られた可変長フィールドが扱えます。
例えば、各フィールドがカンマ「,」で区切られたCSVファイルを入力ファイルとして、ソート処
理を行うことができます。
入力ファイル
aaa,12374,z,19,bbbbbb.......
bbbb,23,yyyy,2,zzzzzzz.......
cc,592,xxxxxxx,702,cccccc.......
dddddddd,32095,uu,5233,yyyyyyyy
eeee,952,ttttt,38,eeeee
ff,7029,ssss,7500,vvvvvv
4 番目のフィールド(青字)を第 2 キーとして降順でソート
separator="," ← カンマ(,)を区切り文字とする
field=(2.0,5,n(5.0),a,4.0,4,n(4.0),d)
2 番目のフィールド(赤字)を第 1 キーとして昇順でソート
出力ファイル
数値フィールドのサポート
数値フィールドとは、ASCII文字で表現された数字を「文字」ではなく「数値」として大小関係
を判断するフィールド・タイプで、符号や小数点を含んだ数字に対してサマリー・ソートやデー
タ抽出などの機能が使えます。
数値フィールドは n(x,y) の形式で定義され、全体でx桁、小点以下y桁を意味します。
数値フィールドは、符号と小数点を含めて最大20桁で、そのうち数字部分は最大18桁となります。
入力ファイル
aaaaaa12374zzzzzzz19bbbbbbb.....
bbbbbb23945yyyyyyy23zzzzzzz.....
cccccc59204xxxxxxx 7ccccccc.....
dddddd32095uuuuuuu52yyyyyyy.....
eeeeee95203ttttttt38eeeeeee.....
ffffff70295sssssss75vvvvvvv.....
数値フィールド
フィールドの合計 : sum=19,2,n(2.0)
ソート・キーが同じレコードについて
このフィールドの合計値を計算する
ここの値が 30000 以上のレコードを
抜き出してソート
条件抽出 : select=7,5,n(5.0),GT,N'30000'
数値フィールド
数値定数
出力ファイル
サマリー・ソート
キーが同じレコードについて、指定したフィールドの値の総合計を計算します。
計算された合計値は、キーが同じ範囲の最初あるいは最後のフィールドと置き換えて出力します。
合計値を計算する対象のフィールド・タイプは符号付き2進整数(2バイト/4バイト)、符号無し
2進整数(2バイト/4バイト)、または数値フィールドです。
合計値の計算中にオーバーフローが発生した場合は、オーバーフローが発生する直前のレコード
の合計対象フィールドを中間値と置き換えて出力し、後続レコードの合計値を改めて計算して処
理を継続します。
入力レコードの抽出
条件式を与えて、入力レコードのうち条件に一致するものを抽出、または除外してソートするこ
とができます。
条件式は
<フィールド定 義 >,<比 較 演 算 子 >,<フィールド定 義 または定 数 >
の形式で指定でき、複数の条件式を「AND(論理積)」「OR(論理和)」で結合することも可能です。
また、括弧による条件式の優先順位も指定できます。括弧のネスト・レベルにプログラム上の制
限はありません。
フィールド定義でサポートされるフィールド・タイプ、定数、比較演算子は次のものです。
●フィールド・タイプ
・文字
・符号付き2進整数(2バイト/4バイト)
・符号無し2進整数(2バイト/4バイト)
・パック10進数
・EBCDIC順の文字
・バイト・ストリーム
・数値フィールド
●定数
・文字列
・16進数
・10進数
・数値
●比較演算子
・EQ (等しい)
・NE (等しくない)
・GT (...より大きい)
・GE (...以上)
・LT (...より小さい)
・LE (...以下)
出力形式の指定
ソートの出力時に各フィールドの順番の入れ換え/削除、定数の挿入などを定義して、レコード
形式を変更して出力ファイルに書き出すことができます。
複数ファイルへの出力
条件に一致するソート済みレコードを指定のファイルに出力することができます。
出力ファイルは最大512個まで指定できます。
重複レコードの出力制御
キーが同じレコードについて、その範囲の最初あるいは最後のレコードだけを出力させることが
できます。
統計情報出力
指定されたファイルに次の情報を書き出します。
・各キー・フィールドの開始位置、長さ、種類、昇順/降順
・同じキー毎のレコード件数とキーの値
・同じキーの最大/最小レコード件数と、それぞれのキーの値
・キーの数
・キーあたりの平均レコード数
■高速ソート・プログラムの処理
高速ソート・プログラムの処理は、ソート処理とマージ処理から構成されます。
制御ファイル
メモリー
入力ファイル
出力ファイル
キー用バッファー
レコード用バッファー
ワークディレクトリー
sort 処理
中間ファイル
merge 処理
1. コマンド実行の後に、ソートのオプションをコマンド・ラインまたは制御ファイルから
取り出します。
2. 入力ファイルからレコードをメモリーのバッファーに読み込みます。
3. バッファーが一杯になった時点でソートを行います。
入力ファイルの全レコードをバッファーに読み込めた場合には、ソートの結果を出力ファイ
ルに書き出して処理を終了します。
入力ファイルの一部をソートが読み込んだ場合には、ソートの結果を中間ファイルに書き出
し、入力ファイルの続きをソートします。
4. 入力ファイルのソート終了後、中間ファイルをマージして最終的に出力ファイルに書き
出します。
※ソート内部のロジックには、クイック・ソートとインサート・ソートの組み合わせを使用し、
ハイパフォーマンスなソートのアルゴリズムを採用しています。また、メモリー上でのソート
処理は、レコード全体をソートするのではなく、キーだけを抜き出した制御ブロックを作成し
てイン・コアでのデータ移動も最小になるようにしています。
■パフォーマンス・データ
・高速ソート・プログラムは sortコマンドと比較して、バッファー・サイズ、ワーク・ディレ
クトリーを柔軟に指定可能であるため、同一環境でもチューニングでパフォーマンスが大きく
向上します。
・ソートに指定するバッファー・サイズを入力ファイル以上のサイズを指定すれば中間ファイル
を使用しないオンメモリ処理となり最小処理時間となります。
・バッファー・サイズが大きくない場合は、ワーク・ディレクトリー数が多い方がマージ処理の
効率が良くなるので全体の処理時間が短くなります。
●測 定 環 境
プロセッサー・タイプ
プロセッサー実装モード
プロセッサー・バージョン
プロセッサーの数
プロセッサーのクロック速度
PowerPC_POWER7
POWER 7
PV_7_Compat
1
3000 MHz
CPU タイプ
64-bit
カーネル・タイプ
64-bit
メモリー・サイズ
4096 MB
OS
入力ファイル・データ形式
キー・タイプ
キー長
AIX 7.1
固定長テキストデータ
文字型
16 B
・入力ファイル、出力ファイル、および中間ファイルは、全て同一論理ボリュームの同一
ファイルシステム上に作成。
・16 バイトの文字列型キーを昇順でソート。
・処理時間の測定は、time コマンドを使用。
●測 定 結 果 1
入力ファイル
レコード長
レコード数
128B
16,777,216
512B
4,194,304
2GB
(*1)
(*2)
(*3)
(*4)
(*5)
Buffer
WK
hssort
sort
cp
:
:
:
:
:
Buffer
hssort
1GB
4
2分39秒
2176MB
4
1分12秒
1GB
4
2分4秒
2176MB
4
44秒
sort
cp
20分7秒
1分31秒
6分17秒
高速ソートコマンドで指定したバッファー・サイズ
高速ソートコマンドで指定したワーク・ディレクトリー数
高速ソートコマンド
標準 sort コマンド
標準 cp コマンド
hssortA
レコード長(bytes)
処理時間
WK
hssortB
sort
cp
512
128
0
200
400
600
800
1000
1200
処理時間(秒)
hssortA: バッファー・サイズ=1GB、ワーク・ディレクトリー数=4
hssortB: バッファー・サイズ=2176MB、ワーク・ディレクトリー数=4
※測定結果は当社での試験結果であり、測定値を保証するものではありません。
1400
●測 定 結 果 2
入力ファイル レコード長
128B
レコード数
41,943,040
5GB
512B
(*1)
(*2)
(*3)
(*4)
(*5)
Buffer
WK
hssort
sort
cp
:
:
:
:
:
10,485,760
hssort
1GB
4
10分17秒
1GB
10
6分11秒
2GB
6
7分1秒
205MB
50
4分50秒
1GB
4
8分26秒
1GB
10
4分57秒
2GB
6
5分40秒
205MB
50
4分5秒
sort
cp
52分59秒
3分53秒
16分46秒
高速ソートコマンドで指定したバッファー・サイズ
高速ソートコマンドで指定したワーク・ディレクトリー数
高速ソートコマンド
標準 sort コマンド
標準 cp コマンド
hssortC
レコード長(bytes)
処理時間
WK
Buffer
hssortD
hssortE
hssortF
sort
cp
512
128
0
500
1000
1500
2000
2500
3000
処理時間(秒)
hssortC:
hssortD:
hssortE:
hssortF:
バッファー・サイズ=1GB、ワーク・ディレクトリー数=4
バッファー・サイズ=1GB、ワーク・ディレクトリー数=10
バッファー・サイズ=2GB、ワーク・ディレクトリー数=6
バッファー・サイズ=205MB、ワーク・ディレクトリー数=50
※測定結果は当社での試験結果であり、測定値を保証するものではありません。
3500