(57)【要約】【課題】  データ容量が大きい入力ファイルをソートするソート処理方法において、メモリ内に取り込むデータを最小限に抑えるとともに、中間ファイルを作成することなくソートを実現することでファイルＩ／Ｏ時間の大幅な削減を図る。【解決手段】  入力ファイル１０２からキー項目と位置情報を取得し、ソート用構造体１０４に格納する。全キー項目と位置情報をメモリ内に格納した後、ソート関数１０５を用いてソート用構造体１０４の配列をキー値で昇順または降順にソートする。次にソートしたソート用構造体１０６の位置情報を元に入力ファイル１０２からソートした順にブロック単位で出力ファイル１０８に出力する。メモリ内に取り込むデータを全キー項目と位置情報のみに抑えるとともに、中間ファイルを作成することなくソートを実現することで、ファイルＩ／Ｏ時間の大幅な削減を図る。【選択図】  図１
2006209171.tif 000002
【特許請求の範囲】
【請求項１】
キー項目と可変長のデータ部とから構成されるブロックを複数持つ入力ファイルをソートするソート処理方法であって、
コンピュータが備えるデータ入力処理手段が、前記入力ファイル中のすべてのキー項目及びその位置情報を取得し、メモリ上のソート用領域に格納するステップと、
コンピュータが備えるデータソート手段が、前記ソート用領域に格納されたキー項目及びその位置情報を、該キー項目の値でソートするステップと、
コンピュータが備えるデータ出力処理手段が、前記ソート用領域のソート結果に基づいて、そのソートされた並びの順に、前記位置情報を元に前記入力ファイルからブロック単位でデータを読み出し出力ファイルに出力するステップと
を備えることを特徴とするソート処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大容量のデータをソートする方法に関する。
【背景技術】
【０００２】
従来、キー項目と複数行のレコードから構成されるブロックを複数持つ入力ファイルの内容を、そのキー項目でソートする場合、キー項目とレコードをメモリ内に読み込み、キー項目のソート結果を元にレコードを引き当てて、出力ファイルに出力する方式をとっていた。ただし、入力ファイルのデータ容量が大きく、全てのデータをメモリ内に読み込めない場合、メモリ内に読み込めるだけのデータを読み込んで上記の方式でソートし、ソートしたデータを中間ファイルに出力し、次にソートしたデータを順次マージしていき、入力ファイルの全てのデータの処理が完了したと同時に中間ファイルから出力ファイルに出力する方式をとっていた（特許文献１参照）。
【特許文献１】特開２０００−１０７６０公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上記方式では、入力ファイルのデータ容量が大きい場合、メモリ内に読み込めるだけのデータを上記の方式でソートし、ソートしたデータを中間ファイルに出力し、次にソートしたデータを順次マージしていく処理を、入力ファイルの全てのデータの処理が完了するまで繰り返し実行する必要がある。そのため、中間ファイルへのファイルＩ／Ｏ時間が、入力ファイルのファイルサイズに依存して増大する欠点があった。
【０００４】
本発明は、入力ファイルのデータ容量が大きい場合でも、ファイルＩ／Ｏ時間が入力ファイルのファイルサイズに依存して増大することの無いソート方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記目的を達成するため、本発明は、キー項目と可変長のデータブロック（例えば複数行のレコードから構成されるブロック）を複数持つ入力ファイルを、前記キー項目に関してソートするシステムにおいて、まず入力ファイルのキー項目と位置情報をソート用構造体に格納し、ソート関数を用いてソート用構造体の配列をキー値でソートし、ソートしたソート用構造体の位置情報を元にして入力ファイルからソートした順にブロック単位でデータを出力ファイルに出力することを特徴とする。
【発明の効果】
【０００６】
本発明によれば、入力ファイルのデータ容量が大きい場合でも、中間ファイルが不要なため、ファイルＩ／Ｏ時間が入力ファイルのファイルサイズに依存して増大することなくソート処理を実装することが可能である。
【発明を実施するための最良の形態】
【０００７】
以下、本発明の一実施形態について図面に従って説明する。
【０００８】
図１は、本発明に係るソート方法の入力から出力までの処理の流れを示した図である。図２は、入力から出力までの処理の流れを、より詳細にフローチャートで示したものである。図３は、図１や図２の処理でソートする対象である入力ファイルの１つのブロックのデータ構造を示す。
【０００９】
まず、図３を参照して、入力ファイルの１つのブロックのデータ構造を説明する。１つのブロックのデータは、１つのヘッダ３０１と、１つまたは複数のレコード３０３から成る。ヘッダ３０１は、ソート処理に必要な固定長のキー項目３０２と固定長のデータ３０４から構成される。ヘッダ３０１に引き続く複数のレコード３０３は、幾つかの可変長のデータ（３０５など）から構成される。
【００１０】
図１と図２を参照して、図３のようなブロックが幾つか並べられた入力ファイルのソート処理の流れを説明する。データ入力処理１０１は、図２のステップ２０１，２０２に相当する。ここでは、入力ファイル１０２と出力ファイル１０８を開き（ステップ２０１）、入力ファイル１０２からキー項目と位置情報を取得し、ソート用構造体に格納する（ステップ２０２）。１０３は入力ファイルのデータを示す。入力ファイルは、図３で説明したようなブロックが並べられたものである。１０４はソート用構造体にキー項目と位置情報が格納された状態を示す。入力ファイル中の全キー項目と位置情報がメモリ内のソート用構造体に格納される。
【００１１】
次に、ソート用構造体のデータ件数が０件であるかチェックする（ステップ２０３）。０件ならソートの必要はないので、ファイルを閉じて（ステップ２０６）、終了する。ソート用構造体のデータ件数が０件でなければ、ソート関数１０５を用いてソート用構造体１０４の配列をキー値で昇順または降順にソートする（ステップ２０４）。１０６はキー項目の値で昇順にソートした状態のソート用構造体を示す。
【００１２】
次に、データ出力処理１０７で、ソートしたソート用構造体１０６の位置情報を元に入力ファイル１０２からソートした順にブロック単位でデータを読み出し、出力ファイル１０８に出力する（ステップ２０５）。図１の例で言えば、キーが１のブロックを入力ファイル１０２から読み出して出力ファイル１０８に出力し、キーが２のブロックを入力ファイル１０２から読み出して出力ファイル１０８に出力し、キーが３のブロックを入力ファイル１０２から読み出して出力ファイル１０８に出力し、…という具合である。全てのデータを出力したら、入力ファイル１０２と出力ファイル１０８を閉じる。１０９はソートされた状態を示している。
【００１３】
図４は、本実施形態で用いたソート用構造体とソート関数の例を示す。入力ファイル４０１に対し、ソート用構造体４０２は、各ブロックの位置情報４０３とキー項目４０４を要素として持つ。４０６は、ソート用構造体４０２のプログラム上での表現例である。ソート関数４０５としては、標準ライブラリ関数qsort()を用いる。qsort()は、ソートする配列の先頭アドレス、配列の要素数、配列要素のサイズ(バイト数)、比較関数検索キー項目へのポインタ、及びキー項目と比較する配列要素へのポインタを引数として持ち、比較関数の定義に従って昇順または降順に配列をソートする関数である。
【００１４】
図５は、出力ファイルのデータ構造を示す。基本的に、図３で説明した入力ファイルと同様である。すなわち、１つのブロックのデータは、１つのヘッダ５０１と、１つまたは複数のレコード５０３から成る。ヘッダ５０１は、キー項目５０２と固定長のデータ５０４から構成される。ヘッダ５０１に引き続く複数のレコード５０３は、幾つかの可変長のデータ（５０５など）から構成される。これらの各ブロックは、キー項目５０２でソートされている。
【００１５】
図６は、実際のデータレイアウトとデータファイルのサンプルである。図６（ｂ）のデータファイル６０２は、決算システムにおける帳票のエラーデータを示している。これは、決算システムにおいて各種の帳票を処理する際に発生したエラーを並べたデータであり、帳票No.に関してばらばらに並べられる。図６（ａ）の６０１は、図６（ｂ）に示したエラーデータファイルの画面表示例を示している。画面６０１からキー項目である帳票番号をクリックするとエラーの発生した帳票に遷移することができる。この場合、エラーデータファイルが帳票番号順に並んでいないと使いづらいため、図６（ｂ）のようなエラーデータファイルを対象として上述のソートを行い、帳票No.でソートする方式を採っている。
【００１６】
なお、図６のデータファイルと図３の入力ファイルとの対応関係は、図６の「ヘッダ明細行区分」がＨの部分が図３のＨのキーの部分３０２とデータ部分３０４に、図６の「ヘッダ明細行区分」がＨの部分の帳票Ｎｏが図３のＨのキーの部分３０２に、図６の「ヘッダ明細行区分」がＨの部分の帳票Ｎｏ以外の部分が図３のＨのデータの部分３０４に、図６の「ヘッダ明細行区分」がＪの部分が図３のＲのデータ部分３０３（３０５）に、図６の「ヘッダ明細行区分」がＭの部分が図３のＲのデータ部分３０３（３０５）に、それぞれ対応するものである。
【図面の簡単な説明】
【００１７】
【図１】全体の処理の流れを示す図
【図２】全体の処理のフローチャートを示す図
【図３】入力ファイルの１ブロックのデータ構造を示す図
【図４】入力ファイルのデータ構造、メモリ内のソート用構造体、及びソート関数を示す図
【図５】出力ファイルのデータ構造を示す図
【図６】データファイルのサンプルと画面レイアウトを示す図
【符号の説明】
【００１８】
１０１…データ入力処理、１０２…入力ファイル、１０４，１０６…ソート用構造体、１０５…ソート関数、１０７…データ出力処理、１０８…出力ファイル。
【図１】
2006209171.tif 000003
【図２】
2006209171.tif 000004
【図３】
2006209171.tif 000005
【図４】
2006209171.tif 000006
【図５】
2006209171.tif 000007
【図６】
2006209171.tif 000008