説明

ソート処理方法及びプログラム

【課題】データのソート処理における処理時間を短縮できる技術を提供する。
【解決手段】ソート対象のデータ列(11)のデータ値を、グループ定義(10)に従ってグループ化により分割し、グループ単位のデータ列(21〜23)を作成する。グループは、対象データ値全範囲を適度な個数(サイズ)で任意に区切ったものであり、構成値により順序付けられている。グループ単位のデータ列(21〜23)に対して、個別にソート処理を行った後、すべての列(24〜26)をグループ順に結合する。これにより、ソート結果のデータ列(12)を得る。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータ(電子計算機)システムにおけるデータ/情報のソート(整列、並べ替え)処理の技術に関する。
【背景技術】
【0002】
近年、記憶装置の大容量化、処理装置の高性能化により、端末装置における業務処理等でデータベースが検索される機会が増えている。加えて、インターネットの普及等により、膨大な顧客データベースの管理や、インターネット経由でのデータへのアクセス記録を保存管理する必要が高まり、そのデータ容量も増大していることから、検索処理に要する時間を短縮することが課題となっている。
【0003】
検索処理は、検索対象となるデータが降順または昇順にソートされていれば処理時間を短縮することができるが、データベースにデータが追加された時点や、さらに任意の時点でのデータのソート処理が、処理装置の負荷を増大させ、業務に大きな影響を与えるケースも少なく無い。
【0004】
コンピュータ上で管理されるデータベースや、表計算用ソフトウェアで使用する表形式データは、データの検索処理時間の短縮や、業務で必要な集計処理の効率を上げるために、昇順または降順にソートしておくことが必要となる。
【0005】
一般的に、データベースや、表計算ソフトウェアの表形式データに、新たにデータが追加されたりした場合には、データを降順または昇順に並べ替えるために、データのソート処理が実施される。
【0006】
そのソート処理の方法として、対象となるデータ列の各データを分解した後、順番に比較・並べ替えを行いつつマージ(併合)していくマージソート法(ソートマージ法などともいう)や、クイックソート法が、広く採用されている。
【0007】
しかし、上記いずれの方法も、データ量が多くなるにつれ処理時間が長くなる傾向にあり、近年データベースが大容量化していることからも、このソート処理時間の短縮が課題となっている。
【0008】
特に、データ量が大きく、頻繁にデータベースにデータが追加されるシステムでは、システム利用者の待ち時間短縮やレスポンスを低下させないために、ソート処理時間を短縮し、システムの負荷を軽減することも必要となっている。
【0009】
従来のソート処理の技術として、特開平8−221254号公報(特許文献1)には、マージソート方法について記載されている。
【特許文献1】特開平8−221254号公報
【発明の開示】
【発明が解決しようとする課題】
【0010】
前述した大量のデータのソート処理時間を短縮し、処理装置の負荷を軽減することは、現在の様々なシステムにおいて、その処理性能を保持または向上するために必要不可欠の課題となっている。特に、ソート処理性能の向上によって、大容量データベースのデータ検索などの処理性能も向上させることが望まれている。
【0011】
前記従来の技術であるマージソート方法は、マージソート対象データ列のレコード数(データ値個数)をNとした場合、ソートに要する処理時間は、N×log(N)に比例することが一般的に知られている。Nが多くなる程、データ列中の値の比較演算処理数(又はマージ処理数)が増加して総処理時間が長くなる。さらに、短時間に複数回連続処理が実行される等の要因により、システムに大きな負荷を与えてしまう場合も多い。
【0012】
本発明は、以上のような問題に鑑みてなされたものであり、その目的は、データ/情報のソート処理における処理時間を短縮できる技術を提供すること、換言すれば、コンピュータシステムにおけるデータ列のソート処理方法及びプログラムに係わり、特に従来のマージソート法の改良/工夫に基づき効率的なソート処理の技術を提供することである。
【課題を解決するための手段】
【0013】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。前記目的を達成するために、本発明の技術は、コンピュータシステムで実行されるデータ/情報のソート処理に係わり、以下に示すような技術的手段を備えることを特徴とする。本発明のソート処理方法は、コンピュータ(プロセッサ)が実行する、下記(1−1)〜(1−3)の処理ステップを備える。また、本発明のプログラムは、本発明のソート処理方法に従う処理をコンピュータに実行させるものであり、本ソート処理方法の各処理ステップに対応する処理を行う部分を備える。
【0014】
元(入力)となるソートされていないデータ、換言すればソート対象となる第1のデータ列([d1,……,dn])がある。本ソート処理によって、第1のデータ列から、その全体がソートされた、ソート結果(出力)のデータ列(後述の第4のデータ列)を得る。処理対象となるデータ列は、複数のデータ値(数値や文字など大小関係を有するもの)による列である。第1のデータ列のデータ値が取り得る値としては、同じ値の重複も有り得るとする。第1のデータ列におけるデータ値個数をn、重複せずに取り得るデータ値の個数(要素数)をp、pに対応するデータ値範囲(順序付けを持つ値の集合)をSとする。なお、複数の構成要素が順序付きであることを[]で表す。
【0015】
準備として、第1のデータ列のデータ値範囲(S)、又はそれを包含する連続するデータ値範囲などを、任意の区切りで分割した、複数(M個)のグループ(第1〜第Mグループ:[G1,G2,……,GM])を用意する。これらグループ(データ値範囲乃至集合)は、構成値の大小によって順序付けを持って定義される。第1のデータ列の各データ値(例えばレコード値)が前記複数のグループのいずれかに分類が可能なように定義されている必要がある。グループの順序付けは、例えば、各グループを構成するデータ値における最小値(min)や最大値(max)によってなされる。例えば、グループGx内の最小値をGxmin、最大値をGxmaxとすれば、G1min<G2min<……<GMmin、G1max<G2max<……<GMmaxである。また、{G1max<G2min、G2max<G3min、……、G(M−1)max<GMmin}である。
【0016】
(1−1) 前記グループ定義をもとに、まず、第1の処理ステップとして、第1のデータ列を、前記複数のグループに従って、グループ単位の複数の第2のデータ列(グループ単位データ列:[G1列,G2列,……,GM列])へグループ化により分割(分類)する。
【0017】
(1−2) 次に、第2の処理ステップとして、上記(1−1)で分割された、グループ単位の複数の第2のデータ列に対して、それぞれ個別にソート処理を実行し、グループ単位のソート済みの複数の第3のデータ列(ソート済みグループ単位データ列:[G1列’,G2列’,……,GM列’])を得る。なお第2及び第3のデータ列も、前記グループの順序付けに対応して順序付けられている。第2の処理ステップでは、各第2のデータ列に対し、従来技術に従う所定のアルゴリズムのソート処理を実行する。また複数の個別のソート処理は、コンピュータシステム構成に応じて、順次処理としても並列処理としてもよい。
【0018】
(1−3) 次に、第3の処理ステップとして、上記(1−2)でソート済みとなったグループ単位の複数の第3のデータ列について、前記複数のグループの定義における順序付けに従って、順番に結合(連結)する。即ち、該当グループのデータ列内の値を、他グループのデータ列内の値と大小比較することなく、即ち第3のデータ列同士でマージ処理することなく、先頭グループ相当(G1列’)から末尾グループ相当(GM列’)までを順番に結合して1つの第4のデータ列とする。これがソート結果(出力)となる。
【0019】
(2) また例えば、本ソート処理方法では、前記第1のデータ列に対応した前記複数のグループの定義を作成(準備)する処理ステップを有する。本作成のタイミングは、例えば、ソート対象となるデータの形式や特性(p,Sなど)が決まっている場合などに、前記グループの定義を、ソート処理の実行よりも事前に取り決めておく。そして、前記複数のグループは、第1のデータ列のデータ値範囲(S)等を、例えば、要素数(p)等よりも小さい任意のデータ値個数(L)乃至サイズで区切ってなることを特徴とする。また例えば、前記複数のグループは、第1のデータ列のデータ値範囲(S)等を、M個のグループに区切ってなること等としてもよい。
【0020】
(3) また、本ソート処理方法は、より詳しくは例えば以下である。第1のデータ列に対応した第1の配列と、グループ単位の複数の第2のデータ列に対応した複数の第2の配列とを使用する。前記第1の処理ステップでは、第1の配列を、その先頭のデータ値(d1)から末尾のデータ値(dn)まで順に、複数のグループの定義に対応した、各グループへの振り分けのためのインデックステーブル等に従って、グループ単位の複数の第2の配列へ振り分けて該当配列内にデータ値を追加格納してゆくことで複数の第2の配列を作成し、前記第2の処理ステップでは、複数の第2の配列を、個別にソート処理し(換言すれば複数のソート済みの配列を得る)、前記第3の処理ステップでは、ソート処理済みの複数の第2の配列を、グループの順序付けに従って1つに結合して第3の配列をソート結果として得ることを特徴とする。
【発明の効果】
【0021】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。本発明によれば、データ/情報のソート処理における処理時間を短縮することが可能となる。換言すれば、コンピュータシステムにおけるデータ列のソート処理方法及びプログラムに係わり、特に従来のマージソート法の改良/工夫に基づき効率的なソート処理の技術を提供できる。
【0022】
また特に、グループ単位に分割されてソート処理が完了した各データ列は、他グループのデータ列とデータ値を比較しながらマージ処理する必要が無く、単にグループ順に結合すれば、全体がソートされた一つのデータ列をソート結果として得ることができる。そのため、従来マージソート処理で必要であった併合時の比較処理に要する時間を削減でき、従来マージソート処理よりも効率的なソート処理を提供できる。
【0023】
これらの効果は、ソート対象データ列の要素数が多いほど大きいため、特に大容量データベースの検索処理を行うコンピュータシステムなどのように、大規模なシステムや装置に適用することで、より大きな効果を期待できる。
【発明を実施するための最良の形態】
【0024】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一符号を付し、その繰り返しの説明は省略する。図1〜図5は、本実施の形態を示すためのものであり、図6〜図7は、本実施の形態との比較のために従来技術のマージソート処理方法について示すものである。
【0025】
図1は、本実施の形態のソート処理方法の原理(処理例を含む)を示す。図2は、本ソート処理方法に従った処理を実行するコンピュータシステムの構成を示す。図3は、本コンピュータシステムにおける処理対象となる、ソート対象データ列を含んだデータベースの構成例を示す。図4は、本コンピュータシステムにおける、グループ事前取り決め及び配列使用によるデータ列のソート処理例を示す。図5は、同ソート処理方法における、データ列のソート処理例を示すフローである。
【0026】
<従来のマージソート方法>
まず、本実施の形態との比較のために、従来技術のマージソート方法について説明する。図6は、従来のマージソート方法の処理例を示す。図7は、従来のマージソート方法で用いる一般的な併合(マージ)処理の説明図であり、(a)はマージ対象データ列、(b)はマージ結果データ列、(c)はマージ処理のフローを示す。
【0027】
図6において、マージソート対象データ列(X1)600がある。データ列(X1)600は、配列を用いて処理される。データ列(X1)600は、レコードNoが0から7までの各レコードにデータ値が順に格納されている。これら各レコードの8個のデータ値[3,6,8,1,4,7,2,5]を、昇順に並べ替える方法を示す。
【0028】
まず第1の段階として、まず、レコードNo=0〜7の8個のデータ値から、データ値の昇順にソート済みの部分データ列を抽出(取り出し)することにより、複数の部分データ列(部分集合)に分解する。本例では、3つの部分データ列(601〜603)として、[3,6,8],[1,4,7],[2,5]が得られる。
【0029】
次に第2の段階として、抽出された部分データ列(601〜603)を、2つずつマージ処理してゆく。まず、第1の部分データ列601と第2の部分データ列602とをマージ#1(第1(1回目)のマージ処理)する。各マージ処理の手順は、図7で示される。マージ#1処理により、データ値の昇順に併合された第4の部分データ列604を生成する。次に、生成した第4の部分データ列604と、最後の第3の部分データ列603とを、同様手順でマージ#2(第2(2回目)のマージ処理)する。これにより、元のデータ列(600)の内容が昇順に並べ替えられた、1つのマージソート結果データ列(X2)605が得られる。分解された部分データ列がもっと多い場合も、同様のマージ処理の繰り返しによりソート結果が得られる。
【0030】
図7において、図7(a)のAとBは、それぞれ、データ値を2つ持ったデータ列を表している。また、図7(b)のCは、データ値を4つ持ったデータ列であり、換言すれば併合処理結果データ列の格納用バッファ乃至配列を表している。i,j,kは、各データ列におけるデータ値の位置インデックス(レコードNoなど)である。
【0031】
一単位の併合処理において、まず、図7(a)の第1の比較処理(P1)で、AとBのそれぞれの先頭(i,j=0)の値{2,1}を比較する。そして、その小さい方の値であるBの先頭の値{1}を、Cの先頭(k=0)の位置に格納する。次に、第2の比較処理(P2)で、前記P1で大きい方の値であったAの先頭の値{2}と、Bの2番目(j=1)の値{7}とを比較し、その小さい方の値であるAの先頭の値{2}を、Cの2番目(k=1)の位置に格納する。以後同様に、AとB、各データ列の格納済みの値の次の値を比較の対象とした比較処理を繰り返して、Cに順に比較結果値を格納してゆく。即ち、次に、第3の比較処理(P3)で、前記Bの2番目の値{7}と、Aの2番目の値{6}とを比較し、その小さい方の値であるAの2番目の値{6}を、Cの3番目の位置に格納し、最後に残った値{7}を4番目の位置に格納する。これにより、2つのデータ列(A,B)の併合によりソートされたデータ列がCとして得られる。
【0032】
図7(c)において、本マージ処理フローは、前記図7(a),(b)のデータ列{A,B,C}の位置インデックス(i,j,k)に対応している。各データ列{A,B,C}に対応した配列{A[i],B[j],C[k]}を用いて処理される。
【0033】
<本実施の形態のソート方法>
次に、本実施の形態のソート処理方法及び本方法に従った処理を実行するコンピュータシステムを説明する。本実施の形態のソート処理方法は、前述した従来のマージソート方法を踏まえ、その改良/工夫の結果、従来必要であったマージ処理、特にその値比較処理を削減している。そのため単にソート処理方法と称している。
【0034】
本実施の形態のソート処理方法によるソート処理が適用されるシステム及びケースとして例えば以下がある。インターネット経由でPC等の端末からサーバ等に接続する利用者に、固有の利用者番号(ユーザID等)が付与されているとする。その利用者のサーバへの接続記録が、複数の利用者が接続を開始した時刻順に、表形式データ(データベース)として格納されるとする。このデータベースのデータ(インターネット接続記録データ)の横1行を1レコードとして、このレコード群を例えば前記利用者番号の順にソートする処理について考える。図3には、前記インターネット接続記録データであるデータベースの格納データ例を示している。
【0035】
以下説明する本実施の形態では、上記ケースにおけるソート処理の考え方を簡略化して示すものである。例えばソート対象データ列のレコード数及び値範囲を簡単のため少なくして説明するが、実際には大量データ及び広い値範囲を対象にして同様の考え方で処理可能である。図2に示すコンピュータシステム100は、図1に示す原理を踏まえ、上記ケースに対応したソート処理を行う機能を備えるものであり、そのソート処理は、図4,図5で示される。
【0036】
図1において、データ値要素{A〜J}で構成される、元(入力)のデータ列11(ソート対象データ列:D1)がある。また、データ列11に対応するグループ定義10として、データ列11が取り得るデータ値範囲であるデータ値要素(範囲)[A〜J]を、任意のデータ値個数などで区切って成る、順序付けされた複数のグループが準備される。本例では全範囲[A〜J]をデータ値3個程度で区切ってなる3つのグループ[G1,G2,G3]が準備される。第1のグループG1は、含まれるデータ値が{A〜C}であり、同様に、第2のグループG2は{D〜F}、第3のグループG3は{G〜J}が含まれる。グループ内の値によって、G1,G2,G3の順での順序付けを有する。
【0037】
本ソート処理方法では、まず第1に、データ列(D1)11を、グループ定義10に従って、データ列11のデータ値のグループ化(グルーピング)により、3つのグループ単位データ列(21〜23)に分割する。そして第2に、その分割されたグループ単位データ列(21〜23)ごとに、それぞれソート処理(ソート#1〜#3)を行う。これにより、各グループに対応した、ソート済みグループ単位データ列(24〜26)を得る。そして第3に、これら3つのソート済みグループ単位データ列(24〜26)を、前記グループの順序付けに従って、順番に結合する。これにより、元のデータ列11の全体がソートされた内容である、1つのデータ列12(ソート結果データ列:D2)が得られる。
【0038】
前記グループ化では、データ列11を、要素{A〜C}で構成されるグループ単位データ列(G1列)21、要素{D〜F}で構成されるグループ単位データ列(G2列)22、及び要素{G〜J}で構成されるグループ単位データ列(G3列)23に分割する。例えば、グループ単位データ列(G1列)21は、データ列(D1)11から、G1に含まれる値{B,C,A}(レコードNo=0,1,4のデータ値)を順に取り出したものである。そして、グループ単位データ列(21〜23)ごとに、所定の方法によるソート処理(ソート#1〜#3)を行う。これにより、G1列(21)がソートされたソート済みグループ単位データ列(ソート済みG1列)24を生成し、同様に、G2列(22)がソートされたソート済みG2列25、及びG3列(23)がソートされたソート済みG3列26を生成する。前記グループ単位データ列(21〜23)やソート済みグループ単位データ列(24〜26)も、グループ定義10に従って順序付けがされている。最後に、これら3つのソート済みグループ単位データ列(24〜26)を順番に即ち24,25,26の順に結合すると、ソートされたデータ列(D2)12が得られる。
【0039】
図2において、本コンピュータシステム100は、処理装置(CPU)101、メモリ102、記憶装置103、入力部106、出力部107、表示部108、通信I/F部109等を有する構成である。メモリ102上には、ソート処理プログラム110、OS120、ワークエリア130などの領域が確保される。ソート処理プログラム110は、データ読込処理部111、グループ分割処理部112、ソート処理部113を有する。
【0040】
処理装置101は、OS120等の他、メモリ102上にロードされたソート処理プログラム110を実行する。これにより本ソート処理方法に従ったソート処理が実現される。OS120は、コンピュータシステム100の制御プログラムであり、例えば、データベース処理アプリケーションプログラムなども含む。ワークエリア130は、OS120やソート処理プログラム110の作業用記憶領域である。
【0041】
記憶装置103は、例えばハードディスクドライブであり、入力データ104、結果データ105などを記憶する。入力データ104は、ソート処理プログラム110の入力データとなるソート対象データ列を含む。結果データ105は、ソート処理プログラム110の出力データとなるソート結果データ列を含む。入力部106は、キーボード等のデバイスである。出力部107は、プリンタ等のデバイスである。表示部108は、ディスプレイ等のデバイスである。これらデバイスはコンピュータシステム100の管理者などにより操作される。通信I/F部109は、インターネット等のネットワークに接続され通信処理を行う部分である。
【0042】
前記インターネット接続記録データは、例えば、通信I/F部109を介して、記憶装置103内のデータベースに格納される。ソート処理プログラム110は、必要に応じて、記憶装置103からメモリ102上に入力データ104を読み込み、ソート処理を実行して、その結果データ105を、記憶装置103内に格納する。
【0043】
コンピュータシステム100におけるソート処理の際、処理装置101及びメモリ102上のOS120とソート処理プログラム110のデータ読込処理部111により、まず、入力データ104をワークエリア130に読み込む。読み込まれたデータ(データ列)は、グループ分割処理部112により、グループ単位データ列へと分割(グループ化)処理される。そして、ソート処理部113により各グループ単位データ列がソート処理された後、グループ順に結合され、結果データ105として記録される。結果データ105は、キーボード等の入力部106の操作などに応じて、ディスプレイである表示部108へ表示されたり、プリンタ等の出力部107に出力されたりする。
【0044】
図3のデータベースにおいて、例として、接続開始時刻31、接続終了時刻32、利用者名33、利用者番号34、メールアドレス35などの情報が管理されている。利用者番号34の項目(列)の各値が、ソート対象データ列の各レコードのデータ値に対応する。ここでは利用者番号34を数字としているが、英字など他の情報でも構わない。ソート対象データ列11のデータ値は、重複する場合もしない場合もある。本データベースを利用者番号34で予めソートしておくことによって、利用者番号34を用いたデータベース検索処理が効率化されることになる。
【0045】
図4及び図5において、本コンピュータシステム100及びソート処理方法における具体的なソート処理の動作及び流れを示している。図5に示すフローは、図4における処理例に対応している。以下、図4及び図5において、元のデータ列41(ソート対象データ列配列:A1)における8レコード[3,6,8,1,4,7,2,5]を昇順に並べ替えてデータ列42[1〜8]を得るソート処理を例に用いて動作を説明する。
【0046】
まず準備として、本実施の形態の一つの特徴である、元のデータ列41のグループ化、即ち複数のグループに分割(分類)するためのグループ定義40を、事前の取り決めとして行っておく。即ちコンピュータシステム100上で、ソート処理の実行よりも前に、対象データの形式や特性に応じたグループ定義40を作成しておく。図4に示す本例では、グループ定義40として、データ列41が取り得る全データ値範囲[1〜8]を、データ値個数(L)3個程度で区切って、グループ数(M)が3つのグループ[G1,G2,G3]に分けている。即ちソート対象となるデータ列41のレコードのデータ値において、値{1〜3}を第1のグループG1、値{4〜6}を第2のグループG2、値{7,8}を第3のグループG3とする。これらは、構成値の大小によって、G1,G2,G3の順に順序付けられて定義されている。条件としては、あるグループGx内の最小値が1つ前のグループG(x−1)内の最大値より大きく、かつ、グループGx内の最大値が1つ後のグループG(x+1)内の最小値より小さくなるように取り決める必要がある。
【0047】
グループ分割処理部112におけるグループ単位への分割処理では、データ列41の各データ値を、グループ定義40に従い、グループ[G1,G2,G3]に対応した、グループ単位配列(406〜408)に振り分けする。グループG1に含まれるデータ値に対してはG1配列401へ、といったように、メモリ102上に必要な配列が確保されて処理される。
【0048】
なお、本ソート処理方法を実装しているソート処理プログラム110では、図5のフローのS502とS503に示すように、グループ定義40の各グループへのデータ列11の各データ値の振り分け判定及び振り分け処理のための所定のアルゴリズムが組み込まれる。このアルゴリズムは、例えば、グループ定義40に対応して予め準備した、データ値ごとのインデックステーブルを参照して各データ値をグループ単位へ振り分ける方法(従来技術)等を用いる。
【0049】
ソート動作を説明する。まず、グループ化処理として、図4のデータ列41が、レコード読み込みにより、各グループ単位配列(406〜408)へと振り分けされる。図5のS501のレコード読み込み処理により、最初に、データ列41におけるレコードNo=0のデータ値{3}が読み込まれる。S502とS503において、読み込まれたレコード値{3}が、G1〜G3のどのグループに属するかが判定される。この判定の結果、S502で、値{3}はG1に属すると判断され、S504により、G1配列401の末尾に、読み込まれた値{3}が追加される。なお実際には新たにG1配列401が作成される。S507では、次に続くレコードが存在するので、S501〜S506の処理をループする。
【0050】
次に、S501で、レコードNo=1のデータ値{6}が読み込まれ、S502で、入力値{6}はG2に属すると判断され、S505により、G2配列402に値{6}が追加される。次に、S501で、レコードNo=2のデータ値{8}が読み込まれ、S503及びS506で、入力値{8}はG3に属すると判断され、G3配列403の末尾に値{8}が追加される。以下同様に、レコードNo=3〜7について同様の処理を繰り返し、データ列41の各レコードのデータ値が、各グループ用の配列(406〜408)に振り分けられる。結果、G1配列407は[3,1,2]となり、G2配列408は[6,4,5]となり、G3配列406は[8,7]となる。
【0051】
次に、S507で次に続くレコードが存在しないので、S508で、グループ単位配列(406〜408)について、それぞれ並べ替え、即ち個別のソート処理(ソート#1〜ソート#3)を実行する。この際のソート処理アルゴリズムは、既存のものを使用可能である。
【0052】
グループ単位配列(406〜408)の各ソート処理(S508)により、ソート済みグループ単位配列(409〜411)が得られる。即ち、G1配列410は[1,2,3]となり、G2配列411は[4,5,6]となり、G3配列409は[7,8]となる。
【0053】
最後に、S509の処理により、3つのソート済みグループ単位配列(409〜411)を、グループ順(G1−G2−G3)に結合する。なお、グループ単位データ列の結合処理は、広い意味ではマージ処理と言えるが、狭い意味では単なる結合であり、その処理負荷は小さい。最終的に、元のデータ列41を正確に昇順に並べ替えたものに相当するデータ列42(ソート結果データ列配列:A2)を得ることができる。
【0054】
前記グループ定義40及びグループ化について補足する。前記図3では、グループ定義40として、データ列41に対応した全範囲[1〜8]に対し、データ値個数(L)3個程度で区切って3つ(M)のグループ[G1,G2,G3]を定義している。グループ定義40におけるグループ数(M)、グループを構成するデータ値個数(L)などの内容(変数)について変動させても構わない。実際の処理においては、M、Lなどについては任意に決めてよい。即ち、処理対象データの実データレコード数や実データサイズなどをもとに、処理性能などの点を考慮して適度となるように取り決める。例えば、個別のソート処理に対応して適度なサイズのデータ値個数(L)で区切る。グループ単位の個別のソート処理は、Lに対して高速となるものを選択すれば望ましい。
【0055】
例えば、本ソート処理実行時に、データ列41の値の取り得る全範囲が[1〜1000]の場合に、L=100で区切ってM=10個のグループ[G1〜G10]とする。また例えば、データ列41のデータ値が英文字列である場合に、文字列先頭文字が{a〜e}ならばG1、{f〜k}ならばG2、{l〜p}ならばG3といったように、予め適切に取り決めておけばよい。その他、対象データに応じて適宜、グループ定義40を変更したり使い分けたりしても構わない。
【0056】
以上のように、本ソート処理方法では、グループ順に分割されたデータ列を結合するのみで、元のデータ列がソートされた結果を得ることが可能なグループを定義している。そのため、グループ単位データ列に分割して個別ソートした結果をグループ順に結合することで、図7に示すような従来のマージ処理及びその値比較処理を省略することができる。従って、特に値比較処理を要さない分、総合的なソート処理性能の向上が期待できる。
【0057】
図7に図6のマージソート処理の一部処理であるマージ処理を示しているが、このマージ処理は、マージ対象データ列の長さが大きくなる程、値の比較回数が増加する。この処理時間は、データ列中のデータ値個数(レコード数)をNとした場合、N×log(N)に比例することが一般的に知られており、Nが多くなる程その処理性能は劣化する。
【0058】
一方、本実施の形態におけるソート処理時間(グループ単位のソート処理を順次に実行する場合)は、ソート対象データ列のデータ値個数Nをグループ数Mで分割した場合に、M×(N/M)×log(N/M)=N×log(N/M)となる。データ値個数Nが多くなるほど、従来処理に比較して処理性能を大きく改善することができる。なおここで考慮しなければならない点として、従来のマージソート処理と、本実施の形態の処理とにおける、ソート対象データを分割するための処理時間があるが、従来処理(ソート済み列の抽出処理)では単純にデータ列中の各データ値の次データ値との大小比較回数(N−1)に比例する。しかし本実施の形態における処理では、ソート対象データ列中の各データ値をグループ化(振り分け)するために、前記インデックステーブルを用いる方法などのいくつかの方法/手段が考えられる。そのため、従来のマージソート処理と単純には比較できないが、本来のソート処理に要する時間の差に大きな影響を与えることは無い。
【0059】
従来のマージソート処理方法と本ソート処理方法との効果を比較する。前記N×log(N)とN×log(N/M)とを具体的な値で比較する。データ値個数Nのレコードから成る元のデータ列を、M=10個のグループ[G1〜G10]で分割した場合、処理時間は以下のように見積もることができる。まずN=100の場合、N×log(N)=100×6.64=664であり、N×log(N/M)=100×3.32=332である。これらを比較すると、332/664=1/2であり、従来の約半分の処理時間で済むことが期待できる。また、N=1000の場合、N×log(N)=1000×9.97=9970であり、N×log(N/M)=1000×6.64=6640である。比較すると、6640/9970≒2/3である。また、N=10000の場合、N×log(N)=10000×13.29=132900であり、N×log(N/M)=10000×9.97=99700である。比較すると、99700/132900=0.75≒3/4である。
【0060】
以上から、本実施の形態によるソート処理方法及びそのソート処理プログラム110でのソート処理は、従来のマージソート処理と比較して、処理時間を短縮することが可能である。
【0061】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【産業上の利用可能性】
【0062】
本発明は、ソート処理を用いる情報処理システム全般に利用可能であり、特にデータベース検索処理システムなどにも有効である。
【図面の簡単な説明】
【0063】
【図1】本発明の一実施の形態のソート処理方法の原理を示す説明図である。
【図2】本発明の一実施の形態のソート処理方法に従った処理を実行するコンピュータシステムの構成を示す図である。
【図3】本発明の一実施の形態のソート処理方法に従った処理を実行するコンピュータシステムにおける、ソート対象データ列を含んだデータベースの構成例を示す図である。
【図4】本発明の一実施の形態のソート処理方法におけるデータ列のソート処理例を示す説明図である。
【図5】本発明の一実施の形態のソート処理方法におけるデータ列のソート処理例を示すフローチャートである。
【図6】従来のマージソート方法の処理例を示す説明図である。
【図7】従来のマージソート方法で用いる一般的な併合(マージ)処理の説明図であり、(a)はマージ対象データ列、(b)はマージ結果データ列、(c)はマージ処理のフローチャートを示す。
【符号の説明】
【0064】
10,40…グループ定義、11…データ列(ソート対象データ列)、12…データ列(ソート結果データ列)、21〜23…グループ単位データ列、24〜26…ソート済みグループ単位データ列、41…配列(ソート対象データ列配列)、42…配列(ソート結果データ列配列)、100…コンピュータシステム、101…処理装置(CPU)、102…メモリ、103…記憶装置、104…入力データ、105…結果データ、106…入力部、107…出力部、108…表示部、109…通信I/F部、110…ソート処理プログラム、111…データ読込処理部、112…グループ分割処理部、113…ソート処理部、120…OS、130…ワークエリア、401〜411…配列、600…マージソート対象データ列、601〜604…データ列、605…マージソート結果データ列。

【特許請求の範囲】
【請求項1】
コンピュータ上において、ソート対象となる第1のデータ列の全体をソートするソート処理方法であって、
前記第1のデータ列を構成するデータ値が取り得る全範囲における任意に区切られ順序付けを持つ複数のグループをもとに、
前記コンピュータが、前記第1のデータ列を前記グループ単位に分割することにより複数の第2のデータ列を得る第1の処理ステップと、
前記コンピュータが、前記複数の第2のデータ列に対してそれぞれソート処理を行って、ソート処理済みの、複数の第3のデータ列を得る第2の処理ステップと、
前記コンピュータが、前記複数の第3のデータ列を前記複数のグループの順序付けに従って順番に結合した第4のデータ列をソート結果として得る第3の処理ステップとを有することを特徴とするソート処理方法。
【請求項2】
請求項1記載のソート処理方法において、
前記コンピュータが、前記第1のデータ列に対応した前記複数のグループの定義を作成する処理ステップを有し、
前記複数のグループは、前記第1のデータ列を構成するデータ値が取り得る値の全範囲を、任意のデータ値個数で区切ってなることを特徴とするソート処理方法。
【請求項3】
請求項1記載のソート処理方法において、
前記コンピュータが、前記第1のデータ列に対応した第1の配列と、前記グループ単位の複数の第2のデータ列に対応した複数の第2の配列とを使用して、
前記第1の処理ステップでは、前記第1の配列の先頭のデータ値から末尾のデータ値までを順に、前記複数の第2の配列へ振り分けし、
前記第2の処理ステップでは、前記複数の第2の配列を、個別にソート処理し、
前記第3の処理ステップでは、前記個別にソート処理済みの複数の第2の配列を、前記複数のグループの順序付けに従ってマージ処理無しで結合することにより第3の配列をソート結果として得ることを特徴とするソート処理方法。
【請求項4】
ソート対象となる第1のデータ列の全体をソートするソート処理方法に従った処理をコンピュータに実行させるプログラムであって、
前記第1のデータ列を構成するデータ値が取り得る全範囲における任意に区切られ順序付けを持つ複数のグループをもとに、
前記第1のデータ列を前記グループ単位に分割することにより複数の第2のデータ列を得る第1の処理と、
前記複数の第2のデータ列に対してそれぞれソート処理を行って、ソート処理済みの、複数の第3のデータ列を得る第2の処理と、
前記複数の第3のデータ列を前記複数のグループの順序付けに従って順番に結合した第4のデータ列をソート結果として得る第3の処理とを前記コンピュータに実行させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2007−133576(P2007−133576A)
【公開日】平成19年5月31日(2007.5.31)
【国際特許分類】
【出願番号】特願2005−324922(P2005−324922)
【出願日】平成17年11月9日(2005.11.9)
【出願人】(000233295)日立情報通信エンジニアリング株式会社 (195)