ProSortの紹介

本章では、ProSortの基本概念と特長、および主要機能について説明します。

1. 概要

ProSortは大容量データのソート(sort)、マージ(merge)、変換(transformation)、演算(operation)をサポートするツールです。操作を実行するとき、システム・リソースと操作の負荷を減少させ、アプリケーションの性能を向上させます。下図は、ProSortの動作構造です。

figure prosort structure
ProSortの動作構造

ProSortはメインフレームで使用するDFSORT Scriptを実行でき、またProSortが提供するAPIをCプログラムで使用できます。また、TmaxSoftのリホスト・ソリューションであるTmax OpenFrame®(以下、OpenFrame)と最適に統合および連携され、システムの高効率と管理の利便性を提供します。

さらに、非同期(Asynchronous) I/Oを使用できるほか、CPUキャッシュを最大限活用するソート方法を使用できるため、システムの高性能が保証されます。処理ファイルの容量に合わせてリソースの使用を最適化し、ディスクを利用して自動でマルチウェイ/マルチパス(Multi-Way、Multi-Pass)ソートを実行します。メモリの使用が制限された状況でも安定的にソート作業を実行します。

マルチウェイ(Multi-Way)は、並列でRunをソートおよびマージする方法です。マルチパス(Multi-Pass)は、ソートおよびマージ演算を実行した結果を再度ソートおよびマージして最終結果を得る方法です。

2. 特長

ProSortの特長は以下のとおりです。

  • カーネル・スレッド(Kernel Thread)を使用したI/O性能の向上

  • 限られたメモリ状況下の安定したソート処理

  • メインフレームのソート・ツールとの互換性のサポート

  • リソース使用の最適化

  • ソートの最適化手法の適用

カーネル・スレッドを利用したI/O性能の向上

一般的なソート・ツールは、ファイルの入出力処理を完了した後、ソートを処理します。この方法を利用すると、入出力処理を行う際にボトルネック現象が発生し、システム全体の性能を悪化させてしまいます。

下図では、一般的なソート・ツールの整列処理を示します。

figure prosort io others
一般的なソート・ツールの整列処理

ProSortは、初期設計の段階から、ファイルの入出力処理とソートを同時処理できるマルチスレッド構造に非同期I/Oを結合したパイプラインの形で開発されました。つまり、カーネル・スレッド(Kernel Thread)に非同期I/Oを使用することで、ファイルの入出力処理の速度を向上させました。また、システム環境に合わせて直接入出力(Direct I/O)もサポートしています。下図では、ProSortのソート処理を示します。

figure prosort io
ProSortのソート処理
限られたメモリ状況下の安定したソート処理

ProSortは、メモリ使用量が制限されている状況でもディスクを利用して自動でマルチウェイ/マルチパス(Multi-Way、Multi-Pass)ソートを実行してソート処理を行います。32MB以上のメモリを確保できれば、どんなサイズのファイルもソート処理できます。下図では、最適化されたマルチウェイ/マルチパスのソート・アルゴリズムを示します。

figure prosort disk
最適化されたマルチウェイ/マルチパスのソート・アルゴリズム

上記アルゴリズムをみると、メモリ状況に合わせてディスク使用量を最小化してシステムの性能を最大化し、適合したDisk run file merge方法を探します。つまり、最適化されたソート手法を実装し、安定したソートを処理します。

メインフレームのソート・ツールとの互換性のサポート

ProSortはDFSORTツールの構文と互換できるように設計したため、既存のメインフレーム・ユーザーもProSortを簡単に使用できます。

figure prosort dfsort
DFSORTツールとの互換性
リソース使用の最適化

一般的なソート・ツールは単純なアルゴリズムにより80MBのDisk Run Fileを作成するためファイルのI/O時間を浪費してしまいます。

下図では、一般的なソート・ツールがメモリを使用する方法を示します。

figure prosort memory others
一般的なソート・ツールのメモリ使用

ProSortは入力ファイルのサイズを考慮してメモリで処理できるサイズを最大化するアルゴリズムを使用します。ユーザーが設定しなくても自動で最適のアルゴリズムを見つけて使用するため、システムの性能が高まります。アルゴリズムを使用するとサイズか大きいRunをメモリに残すため、ファイルのI/O時間を軽減できます。

入力ファイルの容量が大きい場合は、システムの性能を向上させるために、入力ファイルを2つ以上に分割してメモリに保存するか別のファイルに保存する必要があります。分割された各データをRunといいます。

下図では、ProSortがメモリを使用する方法を示します。

figure prosort memory
ProSortのメモリ使用
ソート最適化手法の適用

一般的なソート・ツールは、ソート・スレッド数だけを考慮してデータ・パーティショニングをするため、最適の速度でソートを実行することができません。

下図では、一般的なソート・ツールのソート方法を示します。

figure prosort cache others
一般的なソート・ツールのソート方法

ProSortは、最近研究および発表されたソートの最適化手法を適用して設計されました。中でも、CPUキャッシュを最大限活用できるソート・アルゴリズムを適用しています。ProSortはソート・スレッドを考慮してCPUキャッシュを最大限活用できるデータ・パーティショニングを行います。

下図では、ProSortのソート方法を示します。

figure prosort cache
ProSortのソート方法

3. 主要機能

ProSortの主要機能は以下のとおりです。

  • SORT、MERGE、COPY

    以下は、SORT、MERGE、COPY演算についての説明です。

    演算 説明

    SORT

    入力ファイルを指定したフィールドを基準にソートします。

    MERGE

    ソートされた複数ファイルをマージします。

    COPY

    ソートせずにコピーします。

    入力されたレコードのフィールドの変換機能と一緒に使用します。

  • INCLUDE、OMIT

    特定条件や表現式を指定してレコードを出力に含めるか削除します。

  • レコードの再フォーマット処理(Record Reformatting)

    INREC、OUTFIL、OUTREC構文を利用して、入力されたレコードを処理前のフィールドとレコード形式に変換したり、処理結果の出力レコードのフィールドとレコード形式に変換するために使用します。

  • レコード・アグリゲーション(Record Aggregation)

    数値型の特定フィールドの合計を求めるSUM構文を提供します。

  • ユーザー出口関数(User Exit Function)

    ProSortはユーザー出口関数を利用してレコードを挿入、変換、削除できるようにサポートします。ユーザー出口関数はProSortが提供するINCLUDE、OMIT、INREC、OUTFIL、OUTREC、SUM構文を利用して実装できます。ただし、複雑な演算が必要な場合にのみ使用することを推奨します。

    ユーザー出口関数はProSort APIによってのみ使用できます。ProSort APIの詳細については、ProSort API関数を参照してください。

  • MEMORY

    使用するメモリを指定します。

  • WORKSPACE

    使用するディスク領域(一時領域)と位置を指定します。

  • OPTION

    OUTFIL構文ではFNAMES、SAVE、STARTREC、ENDRECオプションをサポートします。また、処理する入力レコードの数を減らすために、次のオプションを提供します。

    オプション 説明

    SKIPREC

    SORTやCOPY演算を実行する前にスキップするレコード数を指定します。

    STOPAFT

    SORTやCOPY演算で処理されるレコードの最大数を指定します。