(57)【特許請求の範囲】
【請求項１】
各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる表形式データを、コンピュータを用いて、項目値が配置された値リストと、レコード番号に対応して、前記値リスト中の項目値を特定するための位置指定番号を収容した位置指定配列とを有する、コンピュータの記憶装置に記憶された、情報ブロックの形態に変換するデータのコンパイル方法であって、
コンピュータのＣＰＵが、前記表形式データにおいて、レコード番号と対応つけられた項目値からなる項目値配列と、項目値配列中の項目値の位置を特定する順位指定配列と、順位指定配列中の要素を特定する位置指定配列とからなる部分中間ブロックであって、初期的には、単一のレコードと対応つけられた部分中間ブロックをコンピュータの記憶装置に生成するステップと、
コンピュータのＣＰＵが、隣接するレコード番号をもつレコードと対応つけられた隣接する部分中間ブロックを選択して、第１の部分中間ブロックおよび第２の部分中間ブロックからなる対を生成するステップと、
コンピュータのＣＰＵが、前記対に関して、項目値配列を併合して新たな項目値配列をコンピュータの記憶装置に生成するステップと、
コンピュータのＣＰＵが、前記対に関して、第１の部分中間ブロックに属する項目値と第２の部分中間ブロックに属する項目値とを比較することで、併合された新たな項目値配列において、所定の順序にて項目値を特定するように、新たな順位指定配列の要素を決定するステップと、
コンピュータのＣＰＵが、前記決定された前記新たな順位指定配列の要素が前記新たな順位指定配列の中で格納されている位置番号を新たな位置指定配列の要素に設定するステップと、
コンピュータのＣＰＵが、隣接する部分中間ブロックを選択して対を生成し、新たな項目値配列、要素が決定された新たな順位指定配列および新たな位置指定配列からなる新たな部分中間ブロックを作成することを繰り返して、最終的に一つの部分中間ブロックをコンピュータの記憶装置に作成するステップとを備え、
コンピュータのＣＰＵが、前記最終的に作成された部分中間ブロックを前記情報ブロックとし、かつ、前記新たな順位指定配列および前記新たな項目値配列により前記値リストを構成することを特徴とするデータのコンパイル方法。
【請求項２】
コンピュータのＣＰＵが、さらに、最終的に一つの部分中間ブロックが生成された後に、前記新たな順位指定配列の上位の位置から順番に前記新たな順位指定配列の要素を取り出し、前記新たな項目値配列の中で前記取り出された前記順位指定配列の要素によって特定される項目値をコンピュータの記憶装置に確保されたさらに新たな項目値配列の上位の位置から順番に格納することにより、前記項目値が重複なく所定の順序に配置された前記さらに新たな項目値配列が前記値リストを構成することを特徴とする請求項１に記載のデータのコンパイル方法。
【請求項３】
各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる表形式データを、コンピュータを用いて、項目値が配置された値リストと、レコード番号に対応して、前記値リスト中の項目値を特定するための位置指定番号を収容した位置指定配列とを有する、コンピュータの記憶装置に記憶された、情報ブロックの形態に変換するデータのコンパイル方法を記憶したコンピュータにより読み取り可能な記憶媒体であって、
コンピュータのＣＰＵが、前記表形式データにおいて、レコード番号と対応つけられた項目値からなる項目値配列と、項目値配列中の項目値の位置を特定する順位指定配列と、順位指定配列中の要素を特定する位置指定配列とからなる部分中間ブロックであって、初期的には、単一のレコードと対応つけられた部分中間ブロックをコンピュータの記憶装置に生成するステップと、
コンピュータのＣＰＵが、隣接するレコード番号をもつレコードと対応つけられた隣接する部分中間ブロックを選択して、第１の部分中間ブロックおよび第２の部分中間ブロックからなる対を生成するステップと、
コンピュータのＣＰＵが、前記対に関して、項目値配列を併合して新たな項目値配列をコンピュータの記憶装置に生成するステップと、
コンピュータのＣＰＵが、前記対に関して、第１の部分中間ブロックに属する項目値と第２の部分中間ブロックに属する項目値とを比較することで、併合された新たな項目値配列において、所定の順序にて項目値を特定するように、新たな順位指定配列の要素を決定するステップと、
コンピュータのＣＰＵが、前記決定された前記新たな順位指定配列の要素が前記新たな順位指定配列の中で格納されている位置番号を新たな位置指定配列の要素に設定するステップと、
コンピュータのＣＰＵが、隣接する部分中間ブロックを選択して対を生成し、新たな項目値配列、要素が決定された新たな順位指定配列および新たな位置指定配列からなる新たな部分中間ブロックを作成することを繰り返して、最終的に一つの部分中間ブロックをコンピュータの記憶装置に作成するステップとを備え、
コンピュータのＣＰＵが、前記最終的に作成された部分中間ブロックを前記情報ブロックとし、かつ、前記新たな順位指定配列および前記新たな項目値配列により前記値リストを構成することを特徴とするデータのコンパイル方法を記憶した記憶媒体。
【請求項４】
コンピュータのＣＰＵが、さらに、最終的に一つの部分中間ブロックが生成された後に、前記新たな順位指定配列の上位の位置から順番に前記新たな順位指定配列の要素を取り出し、前記新たな項目値配列の中で前記取り出された前記新たな順位指定配列の要素によって特定される項目値をコンピュータの記憶装置に確保されたさらに新たな項目値配列の上位の位置から順番に格納することにより、前記項目値が重複なく所定の順序に配置された前記さらに新たな項目値配列が前記値リストを構成することを特徴とする請求項３に記載のデータのコンパイル方法を記憶した記憶媒体。
【請求項５】
各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる表形式データを、項目値が配置された値リストと、レコード番号に対応して、前記値リスト中の項目値を特定するための位置指定番号を収容した位置指定配列とを有する情報ブロックの形態に変換するデータ処理装置であって、
前記表形式データにおいて、レコード番号と対応つけられた項目値からなる項目値配列と、項目値配列中の項目値の位置を特定する順位指定配列と、順位指定配列中の要素を特定する位置指定配列とからなる部分中間ブロックであって、初期的には、単一のレコードと対応つけられた部分中間ブロックを生成する手段と、
隣接するレコード番号をもつレコードと対応つけられた隣接する部分中間ブロックを選択して、第１の部分中間ブロックおよび第２の部分中間ブロックからなる対を生成する手段と、
前記対に関して、項目値配列を併合して新たな項目値配列を生成する手段と、
前記対に関して、第１の部分中間ブロックに属する項目値と第２の部分中間ブロックに属する項目値とを比較することで、併合された新たな項目値配列において、所定の順序にて項目値を特定するように、新たな順位指定配列の要素を決定する手段と、
前記決定された前記新たな順位指定配列の要素が前記新たな順位指定配列の中で格納されている位置番号を新たな位置指定配列の要素に設定する手段と、
隣接する部分中間ブロックを選択して対を生成し、新たな項目値配列、要素が決定された新たな順位指定配列および新たな位置指定配列からなる新たな部分中間ブロックを作成することを繰り返して、最終的に一つの部分中間ブロックを作成する手段とを備え、
前記最終的に作成された部分中間ブロックを前記情報ブロックとし、かつ、前記新たな順位指定配列および前記新たな項目値配列により前記値リストを構成することを特徴とするデータ処理装置。
【請求項６】
さらに、最終的に一つの部分中間ブロックが生成された後に、前記新たな順位指定配列の上位の位置から順番に前記新たな順位指定配列の要素を取り出し、前記新たな項目値配列の中で前記取り出された前記新たな順位指定配列の要素によって特定される項目値をさらに新たな項目値配列の上位の位置から順番に格納することにより、前記項目値が重複なく所定の順序に配置された前記さらに新たな項目値配列が前記値リストを構成することを特徴とする請求項５に記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【産業上の技術分野】
本発明は、コンピュータのような情報処理装置を用いて大量のデータを処理するデータ処理方法およびデータ処理装置に関し、より詳細には、任意の表形式データを、高速処理に適した所定の形式に変換する方法および装置に関する。
【０００２】
【従来の技術】
データベースなど大量のデータを、検索、集計、ソートするため、或いは、これらのデータをジョイン、更新等するためには多大な時間を要する。これを解決すべく、本発明者は、表形式のデータを極めて拘束に検索、集計およびソートするための手法、並びに、表形式のデータをジョインし、更新し、或いは、トランザクション処理する手法を提案している（ＰＣＴ／ＪＰ９９／０４３００、特願平１１−１５１１５６号、特願平１１−２１５４５０号）。
これらに提示された一連の方法は、一切のインデックスを用いず、統一的な処理を実行することができ、かつ、部分集合に対しても効率を落とすことなく処理を実行することが可能であるという点で革新的である。
【０００３】
上記高速な検索、集計、ソート、ジョイン、更新等を実現するためには、与えられた表形式のデータを、所定の形式に変換する処理（以下、これを「コンパイル」ないし「コンパイル処理」と称する。）を実行する必要がある。この形式においては、図２に示すように、ある項目に関して、項目値が重複無くかつ所定の順序にて配置された値リストと、レコード番号に対応して要素が設けられ、各々の要素が、レコード番号に対応した項目値の配置された、値リスト中の位置を指定する配列（ポインタ配列）とが設けられている。このようなある項目に対して所定の形式となっているデータ群を情報ブロックと称する。
【０００４】
コンパイル処理は、以下のような場合に必要となる。
(１)新規に与えられた表形式のデータを所定の形式に変換して記憶すべき場合、
(２)１または複数の項目から新たな項目を算出する場合、および、
(３)ある表形式のデータに、他の表形式のデータを追加すべき場合、たとえば、１月分の表に、２月分の表を追加する場合。
このように、コンパイル処理を実行すべき場合には、従来、既知のソート手法（たとえば、クイックソート）を用いて、値リスト中の項目値を並べ替えるなどの処理を実行していた。
【０００５】
【発明が解決しようとする課題】
しかしながら、上記既知のソート方法を用いて情報ブロックを作成する場合には、以下の問題が生じる。
(１)一般に、Ｏ(ｎ・ｌｏｇ(ｎ))の比較演算が必要とされ、多大な処理時間を要する。
(２)特にクイックソートを用いた場合に、データの分布により極端に処理効率が悪化する場合がある。
(３)複数のプロセッサを利用してソートを高速化することが困難である。
本発明は、高速な処理時間と、データの分布によっても処理効率が極端に悪化しないことが予測できるデータのコンパイル方法を提供することを目的とする。
また、本発明は、シングルプロセッサでも効果的であるが、特に、末子部パラレルシステムにおいてパフォーマンスを劇的に改善できるデータのコンパイル方法を提供することを目的とする。
【０００６】
【課題を解決するための手段】
本発明の目的は、各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる表形式データを、項目値が所定の順序でかつ重複なしに配置された値リストと、レコード番号に対応して、前記値リスト中の項目値を特定するための位置指定番号を収容した位置指定配列とを有する情報ブロックの形態に変換するデータのコンパイル方法であって、
前記表形式データにおいて、レコード番号と対応つけられた項目値からなる項目値配列と、項目値配列中の項目値の位置を特定する順位指定配列と、順位指定配列中の要素を特定する位置指定配列とからなる部分中間ブロックであって、初期的には、単一のレコードと対応つけられた部分中間ブロックを生成するステップと、
隣接する部分中間ブロックを選択して、第１の部分中間ブロックおよび第２の部分空間ブロックからなる対を生成するステップと、
前記対に関して、項目値配列を併合して新たな項目値配列を生成するステップと、
前記対に関して、第１の部分中間ブロックに属する項目値と第２の部分中間ブロックに属する項目値とを比較することで、併合された新たな項目値配列において、所定の順序にて項目値を特定するように、順位指定配列の要素を決定するステップと、
前記順位指定配列の要素の決定に伴って、併合前の項目値を特定できるように、前記位置指定配列の要素を決定するステップと、
隣接する部分中間ブロックを選択して対を生成し、併合した項目値配列、要素が決定された順位指定配列および位置指定配列からなる新たな部分中間ブロックを作成することを繰り返して、最終的に一つの部分中間ブロックを作成するステップとを備え、
前記最終的に作成された部分中間ブロックを情報ブロックとし、かつ、前記順位指定配列および項目値配列により値リストを構成することを特徴とするデータのコンパイル方法により達成される。
【０００７】
本発明においては、部分中間ブロックの対を生成して、各部分中間ブロックの項目値の比較を行なうことで、対における項目値の順位を決定している。また、順次隣接する部分中間ブロックを対にして新たな部分中間ブロックを生成するような、いわゆるトーナメントの形態で、より大きな部分中間ブロックを生成している。本発明においては、「ｎ」個のレコードに対して全ての項目値が異なっている場合には、比較の回数が、約「ｎ＊（ｌｏｇ２(ｎ)−１）」となり、いわゆるＯ（ｎ・ｌｏｇ(ｎ)）となる。しかしながら、「ｍ（ｎ＞ｍ）」個の項目値のみが異なり、これが「ｎ」と比較して十分に小さい場合には、比較の回数は略「ｎ」回にまで減じることができる。また、「ｍ」が比較的大きな場合であっても、比較回数を「ｍ＊（ｌｏｇ２(ｎ)−１）」とすることができる。すなわち、処理効率を予測することができ、かつ、処理効率が最悪の場合でも、せいぜい、Ｏ（ｎ・ｌｏｇ(ｎ)）とすることが可能となる。
【０００８】
また、いわゆるトーナメントの形態を利用しているため、部分中間ブロックの対の比較を、複数のプロセッサにてパラレル処理することに適している。これにより、処理時間を著しく減じることが可能となる。
【０００９】
本発明の好ましい実施態様においては、順位指定配列の要素を決定するステップが、新たな順位指定配列を生成するステップと、第1の部分中間ブロックの項目値と第2の部分中間ブロックの項目値とを比較して、より高位の順位となるものを決定し、前記新たな順位指定配列の上位から順次、当該項目値を指定する第１の部分中間ブロック或いは第２の部分中間ブロック中の順位指定配列の値を配置するステップとを有し、
位置指定配列の要素を決定するステップが、前記新たな順位指定配列を特定するための位置指定再定義配列を生成するステップと、前記順位指定配列の値が配置される際に、第1の部分中間ブロック或いは第２の部分中間ブロックにおいて、位置指定再定義配列中の対応する位置に、前記新たな順位指定配列にて配置された値を特定できるような要素を配置するステップとを有し、
さらに、前記位置指定再定義配列にて、前記位置指定配列の値を変換して、新たな位置指定配列を求めるステップを備えている。
【００１０】
本発明において、情報ブロックの値リストは、順位指定配列と項目値配列の形態となっていても良い。或いは、他の形態においては、さらに、最終的に一つの部分中間ブロックが生成された後に、前記順位指定配列中の上位に位置している要素にて特定される項目値を、順次配置することにより、重複なくかつ所定の順序にて配置された新たな項目値配列を作成するように構成しても良い。
また、本発明の目的は、上記ステップを備えたプログラムを記憶した、コンピュータにより読み取り可能な記憶媒体によっても達成される。
【００１１】
【発明の実施の形態】
以下、添付図面を参照して、本発明の実施の形態につき説明を加える。図１は、本発明の実施の形態にかかる検索、集計およびサーチ方法を実現できるコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。図１に示すように、このコンピュータシステム１０は、通常のものと同様の構成であり、プログラムを実行することにより、システム全体および個々の構成部分を制御するＣＰＵ１２、ワークデータなどを記憶するＲＡＭ(Random Access Memory)１４、プログラム等を記憶するＲＯＭ(Read Only Memory)１６、ハードディスク等の固定記憶媒体１８、ＣＤ−ＲＯＭ１９をアクセスするためのＣＤ−ＲＯＭドライバ２０、ＣＤ−ＲＯＭドライバ２０や外部ネットワーク（図示せず）と接続された外部端子との間に設けられたインタフェース（Ｉ／Ｆ）２２、キーボードやマウスからなる入力装置２４、ＣＲＴ表示装置２６を備えている。ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、外部記憶媒体１８、Ｉ／Ｆ２２、入力装置２４および表示装置２６は、バス２８を介して相互に接続されている。
【００１２】
本実施の形態にかかる、任意の表形式データをコンパイルするプログラム、コンパイルした表形式データから所定の項目の表（ビュー）を作成するプログラム、検索プログラム、集計プログラムおよびソートプログラムは、ＣＤ−ＲＯＭ１９に収容され、ＣＤ−ＲＯＭドライバ２０に読取られても良いし、ＲＯＭ１６に予め記憶されていても良い。また、いったんＣＤ−ＲＯＭ１９から読み出したものを、外部記憶媒体１８の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク（図示せず）、外部端子およびＩ／Ｆ２２を経て外部から供給されるものであっても良い。
本発明においては、任意の表形式データをコンパイルして、高速な検索、集計およびソートが可能な情報ブロックの集合体の形式を有するデータを構築する。
このデータを構築する際の高速なコンパイル方法が本発明の本質的事項となる。
【００１３】
本発明者は、情報ブロックの集合体の形式を有するデータを利用した検索、集計およびソート方法を考案した（特願平１０−２２７２７８号）。また、上記形式を有するデータを利用したデータのジョイン方法およびデータの削除／追加／更新方法を考案した（特願平１１−１５１１５６号、特願平１１−２１５４５０号）。まず、これら情報ブロックの構造、および、これを利用した検索について説明し、その後、上記情報ブロックの作成（コンパイル）につき説明を加える。
【００１４】
図２は、本実施の形態にて用いる情報ブロックを示す図である。図２に示すように、情報ブロック１００は、値リスト１１０と値リストへのポインタ配列１２０とを含んでいる。値リスト１１０は、表形式データの各項目に対して、その項目に属する項目値が順序付け（整数化）された項目値番号の順番に、上記項目値番号に対応した項目値１１１が格納されたテーブルである。値リストへのポインタ配列１２０は、表形式データのある列（すなわち項目）の項目値番号、つまり値リスト１１０へのポインタが表形式データのレコード番号順に格納された配列である。
【００１５】
上記値リストへのポインタ配列１２０と値リスト１１０とを組み合わせることにより、あるレコード番号が与えられたときに、所定の項目に関する値リストへのポインタ配列１２０からそのレコード番号に対応して格納された項目値番号を取り出し、次いで、値リスト１１０内でその項目値番号に対応して格納された項目値を取り出すことにより、レコード番号から項目値を得ることができる。したがって、従来のデータ表と同様に、レコード番号（行）と項目（列）という座標を用いてすべてのデータ（項目値）を参照することができる。
【００１６】
たとえば、図３（ａ）に示す表形式データを考える。この例では、顧客ＩＤ、顧客名、電話番号という項目に種々の項目値が与えられている。本実施の形態においては、このような表形式データを、図３（ｂ）ないし（ｄ）に示す形式の情報ブロックとして保持している。たとえば、図３（ｂ）において、ポインタ配列１２０−１は、顧客ＩＤを示す項目値を格納した値リスト１１０−１に関連付けられている。すなわち、先頭レコード（レコード番号「０」）のポインタ配列のポインタ値は０であり、これに対応して、顧客ＩＤを示す項目値「１」が得られる。図３（ｂ）において、ポインタ配列１２０−２は、顧客名を示す項目値を格納した値リスト１１０−２に関連付けられている。たとえば先頭レコード（レコード番号「０」）のポインタ配列におけるポインタ値は「５」であり、これに対応して、顧客名を示す項目値「山田  ○男」が得られる。図３（ｃ）においても、同様に、ポインタ配列１２０−３が、電話番号を示す項目値を格納した値リスト１１０−３に関連付けられていることが理解できよう。また、各値リストにおいては、項目値が順序付けられて（この例では昇順）いることが理解できよう。
【００１７】
さらに、本実施の形態においては、情報ブロック１００の値管理テーブルは、値リスト１１０のほか、検索や集計のために用いる分類番号フラグ配列、項目値に対応するポインタを格納すべきメモリ空間の先頭アドレスを示す開始位置配列、および、存在数配列が含まれている。分類番号フラグ配列の各フラグ、および、存在数配列の各存在数は、項目値の各々に対応付けられている。分類番号フラグのフラグ値は、通常 「０」であり、検索や集計の際に見出すべき項目値に対応して「１」にセットされる。また、存在数は、その項目値を有するレコードの個数に対応する。なお、開始位置は、対応するポインタ値よりも小さなポインタ値に対応する存在数を加算したものに対応するため、必ずしも設ける必要はない。
図４（ａ）は、表形式データの他の例を示す図、図４（ｂ）および（ｃ）は、それぞれ、「性別」および「年令」に関する情報ブロックを示す図である。図４（ｂ）に示すように、性別に関する情報ブロック２００−１の値管理テーブル２１０−１には、ポインタ配列２２０の各ポインタ値に対応する項目値（「男性」および「女性」）と、各項目値に対応する分類番号、開始位置および存在数が示されている。たとえば、ポインタ値が「０」（つまり、値リストの項目値が「男性」）であるようなレコードの数は６３２５６４個であり、その一方、ポインタ値が「１」（つまり、値リストの項目値が「女性」）であるようなレコードの数は３６７４２６個となっている。また、各項目値に対応する開始位置は、後述するレコードへのポインタ配列２３０−１の先頭アドレスを示している。図４（ｃ）においても、同様のことが理解できよう。
【００１８】
このようなデータ構造を有する情報ブロックを用いた検索の一例につき以下に説明を加える。図５は、単一項目に関する検索手法を示すフローチャートである。この処理は、ＣＰＵ１２（図１参照）が所定の検索プログラムを実行することにより実現される。この例では、「年令」の項目値が１６歳または１９歳であるレコードが検索される。まず、表形式データに関する情報ブロックのうち、図４（ｃ）に示す「年令」に関する情報ブロック２００−２が特定される（ステップ５０１）。
【００１９】
次いで、特定された情報ブロック（以下、「特定情報ブロック」と称する。）の値リスト２１０−２において、項目値が上記検索条件に合致するもの（１６歳または１９歳）に対応する行の分類番号が「１」にセットされる（ステップ５０２）。本例の場合には、項目値番号「０」および項目値番号「３」に対応する行の分類番号が１にセットされる。次いで、分類番号が「１」にセットされている行に対応した開始位置および存在数が取得される（ステップ５０３）。これら情報をポインタ取り出し情報と称する。レコードへのポインタ配列において、ステップ５０３にて取得されたポインタ取り出し情報に基づき、検索条件に合致したレコードへのポインタを示すレコード番号が取り出される（ステップ５０４）。
本例においては、項目値番号「０」に対応したレコードのポインタは、レコードへのポインタ配列の開始位置「０」すなわち先頭から、４５８９８個目までの領域に格納され、その一方、項目値番号「３」に対応したレコードのポインタは、レコードへのポインタ配列の２３８３１３７番目から１８９６５３個分の領域に格納されていることがわかる。最後に、後の処理にて利用できるようにするために、取り出されたレコード番号の配列が、結果集合として作成され、これが保持される（ステップ５０５）。
また、集計およびソートも、分類番号、開始位置および存在数を利用することにより実現することができる。
【００２０】
次に、上記情報ブロックを生成するためのコンパイル処理について説明を加える。このコンパイル処理においては、ある項目について無作為に配置されたデータを、重複なくかつ所定の順序（たとえば五十音順やアルファベット順）でソートされた値リストを作り出している。図６（ａ）は、表形式データにおける、レコードとある項目（姓）の項目値とを示す図である。本実施の形態にかかるコンパイル処理においては、この図６（ａ）に示すような、項目値がランダムに並べられた項目に関して、図６（ｂ）に示すような形式の情報ブロックを生成する。
図６（ｂ）において、情報ブロック６００には、値リストへのポインタ配列６０１（以下、「ＰＶ」と称する。）、および、値リスト６０２が含まれる。コンパイル処理の直後には、値リスト６０２は、元の項目値が収容された配列（オリジナル項目値配列）６０３と、当該オリジナル項目値配列６０３の格納位置番号を示す配列６０４（以下、「ＶＬＰ」と称する。）とから構成される。上記ポインタ配列（ＰＶ）は、値リスト中の項目値を指定するという意味で、位置指定配列ということができる。また、ＶＬＰは、項目値の順序を表しているという意味で、順位指定配列ということができる。コンパイル処理の直後の情報ブロックは、上述した図３（ｂ）に示す情報ブロックとは若干形式が異なっているが、後に述べる処理により同等の形式とすることができる。
図７は、この実施の形態にかかるコンパイル処理の概略を示すフローチャートである。図７に示すように、コンパイル処理においては、コンピュータシステム１０は、固定記憶媒体１８等に記憶された表形式データを読み出し（ステップ７０１）、情報ブロックを作成する必要がある項目を特定する（ステップ７０２）。たとえば、全ての項目について情報ブロックを作成しても良いし、指定された任意の項目に関する情報ブロックのみを作成しても良い。また、読み出した表形式データは、ＲＡＭ１４上に一時的に保存しておくのが、処理時間を考慮した場合に望ましい。
【００２１】
次いで、コンピュータシステム１０は、表形式データから所定の項目を選択して、当該項目にかかるデータ（項目値）をレコード番号と関連付けて切り出す（ステップ７０３）。これにより、たとえば、図６（ａ）に示す形式のデータを取り出すことができる。次いで、当該項目に関する情報ブロックが作成される（ステップ７０４）。この処理については後に詳述する。ステップ７０３、７０４の処理は、指定された全項目について実行される（ステップ７０５、７０６参照）。これにより、所定の項目に関する情報ブロックが完成する。
【００２２】
次に、ステップ７０４の処理につきより詳細に説明を加える。ステップ７０４の処理は、隣接するレコードを順次組み合わせて、当該組み合わせにおいてＰＶやＶＬＰ中の値を決定することにより実現される。たとえば、レコード番号が０〜４ｎ（レコード数＝４ｎ＋１）である項目について、図８（ａ）に示すように、初期的には、４ｎ＋１個の部分中間ブロック８０１−０〜８０１−(4n)を考える。そして、隣接する二つの部分中間ブロック（たとえば、部分中間ブロック８０１−０と部分中間ブロック８０１−１）を組み合わせて、図８（ｂ）に示す新たな部分中間ブロック（たとえば、部分中間ブロック８１１−０）を考え、これら新たな部分中間ブロックにおいてＰＶやＶＬＰの値を更新する。図８（ｂ）に示すように、この時点で、（２ｎ＋１）個の新たな部分中間ブロックが作られる。
さらに、隣接する二つの部分中間ブロック（たとえば、部分中間ブロック８１１−０と８１１−１）とを組み合わせて、図８（ｃ）に示すように新たな部分中間ブロック（たとえば、部分中間ブロック８２１−０）を考え、これら新たな部分中間ブロックにおいてＰＶやＶＬＰの値を更新する。
【００２３】
このような処理を繰り返すことで、最終的には、２つの部分中間ブロックを組み合わせたブロックを作り出すことができる。このブロックが情報ブロックとなる。上記処理をフローチャートにて表したものを図９に示す。
図９のステップ９０１にて生成される初期的な部分中間ブロックには、たとえば、図８（ａ）の部分中間ブロックが対応する。また、末尾のブロックまで、隣接する部分中間ブロックが選ばれて（ステップ９０２）、これらが合併されて、変換配列（以下、「ＴＲ」と称する。）や合併後の新たな格納位置番号を示す配列（以下、「ＶＬＰ’」と称する。）のための領域が確保される（ステップ９０３）。次いで、合併された形態のＰＶやＶＬＰの値が更新される（ステップ９０４、９０５）。上記ＴＲは、ＰＶを再定義するために利用されるため、位置指定再定義配列ということができる。
【００２４】
さらに、あるレベルの部分中間ブロック群において末尾の部分中間ブロックまで、合併の処理が終了すると、合併された部分中間ブロックの数が１つであるか否かが判断される（ステップ９０６）。ここで「イエス（Yes）」と判断されれば、当該１つの部分中間ブロックが完成した情報ブロックとなる。その一方、「ノー（No）」と判断されれば、合併後の複数の部分中間ブロックを、処理対象として再度ステップ９０２〜９０５の処理が進められる。
図６（ａ）に示すレコード番号と、「姓」という項目の対応する項目値とを例にとって、図９の処理、特にステップ９０２〜９０４の処理を詳細に説明する。
【００２５】
まず、図１７に示すように、９つの初期的な部分中間ブロックが生成される（図９のステップ９０１参照）。ここで、冒頭の部分中間ブロック１７０１−０および部分中間ブロック１７０１−１が合併され、ＰＶやＶＬＰが更新される（図９のステップ９０４参照）。
図１０は、ステップ９０４の処理をより詳細に示す図である。この処理において、合併される二つの部分中間ブロックのうち、より小さなレコード番号に関するものを第１の部分中間ブロック、より大きなレコード番号に関するものを第２の部分中間ブロックと称する。また、第１の部分中間ブロックにおいて、比較対象となる項目値を示すために、ＶＬＰの値を指すように配置されたポインタを第１の比較位置ポインタと称し、第２の部分中間ブロックにおいて、比較対象となる項目値を示すために、ＶＬＰの値を指すように配置されたポインタを第２の比較位置ポインタと称する。この比較位置ポインタは、図１０の処理の冒頭では、各部分中間ブロックにおいて最も小さいレコード番号を有するＶＬＰの値を指している。さらに、この処理において生成されるＶＬＰ’において値を格納すべき位置を示すポインタを格納位置ポインタと称する。これら第１の比較位置ポインタ、第２の比較位置ポインタおよび格納位置ポインタは、図１０の処理に先立って、初期位置（各ＶＬＰにおける先頭の位置）に設定される。
【００２６】
図１０に示すように、コンピュータシステム１０は、第１の比較位置ポインタにて指示される項目値（第１の指示値）と、第２の比較位置ポインタにて指示される項目値（第２の指示値）とを取り出して、これらの値を比較する（ステップ１００１〜１００３）。以下、第１の指示値および第２の指示値の大小、或いは、第１の比較ポインタおよび第２の比較ポインタの位置により、異なる処理に進む（ステップ１００４〜ステップ１０１４参照）。
図１５に示す部分中間ブロック１５０１−０、１５０１−１に着目すると、初期的には、第１の比較位置ポインタは、部分中間ブロック１５０１−０における「たなか」を指示し、その一方、第２の比較位置ポインタは、部分中間ブロック１５０１−１における「あべ」を指示する。したがって、これらを比較すると（図１０のステップ１００３参照）、「第１の指示値＞第２の指示値」となる（ステップ１００８参照）。この場合には、ステップ１００９に進み、図１３に示す処理が実行される。
【００２７】
より詳細には、第２の比較位置ポインタが示す項目値「あべ」と対応するＶＬＰの値「１」が特定され（ステップ１３０１）、当該ＶＬＰの値「１」が、ＶＬＰ’中の格納位置ポインタにて示される位置（先頭つまり格納位置番号「０」の位置）に格納される（ステップ１３０２）。次いで、第２の比較位置ポインタの位置に対応するＴＲの値として、格納位置ポインタの位置している格納位置番号（この場合には「０」）が与えられる（ステップ１３０３）。
その後に、コンピュータシステム１０は、第２の比較位置ポインタを一つ下流側（格納位置番号が大きくなる側）に移動させる(ステップ１３０４)とともに、格納位置ポインタも一つ下流側に移動させる（ステップ１３０５）。
【００２８】
このような処理の後、再度ステップ１００１〜ステップ１００３の処理が実行される。しかしながら、上記例では第２の比較位置ポインタを一つ下流側に移動させると、第２の比較位置ポインタが指し示す項目値が存在しない。このため、ここではステップ１０１２にてイエス（Yes）と判断され、図１２の処理が実行される。
【００２９】
より詳細には、第１の比較位置ポインタに示す項目値「たなか」と対応するＶＬＰの値「０」が特定され（ステップ１２０１）、これが、ＶＬＰ’中、格納位置ポインタが示す位置（２番目の位置つまり格納位置番号「１」にて示される位置）に格納される（ステップ１２０２）。次いで、第１の比較位置ポインタの位置に対応するＴＲの値として、格納位置ポインタの位置している格納位置番号（この場合には「１」）を与える（ステップ１２０３）。その後に、第２の比較位置ポインタを一つ下流側（格納位置番号が大きくなる側）に移動させる(ステップ１２０４)とともに、格納位置ポインタも一つ下流側に移動させる（ステップ１２０５）。
さらに、再度ステップ１００１〜ステップ１００３が実行されるが、第１の比較位置ポインタおよび第２の比較位置ポインタとも、指示する項目値が存在しない。このため、ここではステップ１００４〜ステップ１０１２においてノー(No)と判断されてステップ１０１４に進む。
【００３０】
より詳細には、第１の部分中間ブロック（図１５の符号１５０１−０参照）において、ＰＶの値を、それぞれ、対応するＴＲの値で変換して、新たなＰＶを生成する（ステップ１４０１）とともに、第２の部分中間ブロック（図１５の符号１５０１−１参照）において、ＰＶの値を、それぞれ、対応するＴＲの値で変換して、新たなＰＶを生成する（ステップ１４０２）。図１６に、新たなＰＶやＶＬＰの生成についてより具体的に説明する。たとえば、第1の部分中間ブロック１５０１−０中のＰＶ（旧ＰＶ）１６０１の要素（値）「０」を取り出し、この要素にて示される格納位置番号のＴＲ１６０２の要素（値）を特定する。この要素（値）は「１」であるため、新たなＰＶ（新ＰＶ）１６０３において、当該ＴＲの要素にて示される格納位置番号に示される位置に、旧ＰＶの要素「０」を収容すればよい。第２の部分中間ブロックにおいても同様の処理が進められ、これにより、新ＰＶを得ることが可能となる。
また、図１０のステップ１００１〜１０１３の処理を繰り返すことによって作り出されたＶＬＰ’が、新たなＶＬＰとなる（ステップ１４０３、図１６の符号１６０４参照）。
【００３１】
他の部分中間ブロックの組でも図１０の処理が実行されて、新ＰＶおよび新ＶＬＰが作り出される。図１０〜図１４の処理においてまだ説明していないものを中心に、他の部分中間ブロックの組に関する処理につき説明する。図１５に示す部分中間ブロック１５０１−４、１５０１−５に着目すると、初期的には、第１の比較位置ポインタは、部分中間ブロック１５０１−４における「あべ」を指示し、その一方、第２の比較位置ポインタは、部分中間ブロック１５０１−５における「たなか」を指示する。したがって、これらを比較すると、「第１の指示値＜第２の指示値」となり（ステップ１００６でイエス(Yes)）、ステップ１００７に進み、図１２の処理が実行される。
【００３２】
図１２においては、第１の比較位置ポインタが示す項目値「あべ」と対応するＶＬＰの値「４」が特定され（ステップ１２０１）、当該ＶＬＰの値「４」が、ＶＬＰ’中の格納位置ポインタにて示される位置（格納位置番号「４」の位置）に格納される（ステップ１２０２）。次いで、第１の比較位置ポインタの位置に対応するＴＲの値として、格納位置ポインタの位置している格納位置番号（この場合には「４」）が与えられる（ステップ１２０３）。
その後に、コンピュータシステム１０は、第１の比較位置ポインタを一つ下流側（格納位置番号が大きくなる側）に移動させる（ステップ１２０４）とともに、格納位置ポインタも一つ下流側に移動させる（ステップ１２０５）。
【００３３】
このような処理の後、再度ステップ１００１〜ステップ１００３の処理が実行される。しかしながら、この例では第１の比較位置ポインタを一つ下流側に移動させると、第１の比較位置ポインタが指し示す項目値が存在しない。このため、ここでは、ステップ１０１０にてイエス(Yes)と判断され、図１３に示す処理に進む。
【００３４】
図１３の処理では、第２の比較位置ポインタが示す項目値「たなか」と対応するＶＬＰの値「５」が特定され、これが、ＶＬＰ’中、格納位置番号「５」にて示される位置に格納される（ステップ１３０１、１３０２）。また、第２の比較位置ポインタに対応するＴＲの値として、格納位置番号「５」が与えられる（ステップ１３０３）。次いで、第２の比較位置ポインタおよび格納位置ポインタが一つ下流側に移動される（ステップ１３０４、１３０５）。
この時点で、第１の比較位置ポインタおよび第２の比較位置ポインタの双方とも、指示する項目値が存在しないため、ステップ１０１４に進み、新ＰＶおよび新ＶＬＰが作り出される（ステップ１４０１〜１４０３参照）。
【００３５】
次に、図１５に示す部分中間ブロック１５０１−６、１５０１−７に着目すると、初期的には、第１の比較位置ポインタは、部分中間ブロック１５０１−７における「いとう」を指示し、その一方、第２の比較位置ポインタは、部分中間ブロック１５０１−７における「いとう」を指示する。したがって、これらを比較すると、「第１の指示値＝第２の指示値」となり（ステップ１００４でイエス(Yes)）、ステップ１００５に進む。
図１１においては、第１の比較位置ポインタが示す項目値「いとう」と対応するＶＬＰの値「６」が特定され（ステップ１１０１）、当該ＶＬＰの値「６」が、ＶＬＰ’中の格納位置ポインタにて示される位置（格納位置番号「６」の位置）に格納される（ステップ１１０２）。次いで、第１の比較位置ポインタに対応するＴＲの値として、格納位置ポインタの位置している格納位置番号「６」が与えられる（ステップ１１０３）。その後に、第１の比較位置ポインタが一つ下流側に移動される。
【００３６】
同様に、第２の比較位置ポインタの位置に対応するＴＲの値として、格納位置ポインタが位置している格納位置番号「６」が与えられ（ステップ１１０５）、第２の比較位置ポインタが一つ下流側に移動される（ステップ１１０６）。
このように、双方の部分中間ブロックにおいて、同じ項目値が存在する場合には、その重複を排除する形で、ＶＬＰ’に値が収容される。
その後の処理では、第１の比較位置ポインタ、第２の比較位置ポインタとも、指示する項目値が存在しないため、図１４に進み、新ＰＶおよび新ＶＬＰが作られる。
【００３７】
このようにして、図１５の符号１５１１−０〜１５１１−４に示すような新たな部分中間ブロックを得ることができる。これら部分中間ブロックについて、図９〜図１４の処理が実行される。ここでは、図１７に示すように、部分中間ブロック１５１１−０をそのままにして、部分中間ブロック１５１１−１、１５１１−２の組、部分中間ブロック１５１１−３、１５１１−４の組を作り、部分中間ブロックの組のそれぞれに関する処理を実行している。
部分中間ブロック１５１１−１、１５１１−２の組に関する処理について、再度、フローチャート等を参照して説明を加える。図１８（ａ）の矢印Ａ、ＢおよびＣに示すように、初期的には、第1の比較位置ポインタ、第２の比較位置ポインタおよび第３の比較位置ポインタは、それぞれ、ＶＬＰ、ＶＬＰ’の先頭に配置される。
【００３８】
図１０にしたがって、第1の比較位置ポインタ（図１８（ａ）の矢印Ａ）が指し示すＶＬＰの値「３」にて特定される項目値「いとう」が取り出され（ステップ１０１１参照）、その一方、第２の比較位置ポインタ（同図の矢印Ｂ）が指し示すＶＬＰの値「４」にて特定される項目値「あべ」が取り出される（ステップ１０１２）。
第１の指示値「いとう」と第２の指示値「あべ」とを比較すると、第１の指示値＞第２の指示値となるため（ステップ１００８でイエス(Yes)）、図１３の処理が実行される。これにより、図１８（ｂ）に示すように、格納位置ポインタ（矢印Ｃ）にて示される位置に、ＶＬＰの値「４」が配置されるとともに、所定のＴＲ中の値も配置される。その後に、第２の比較位置ポインタおよび格納位置ポインタが、一つ下流側に移動される（矢印Ｂ’および矢印Ｃ’）参照。
【００３９】
次いで、第１の比較位置ポインタ（図１８（ｂ）の矢印Ａ）が指し示すＶＬＰの値「３」にて特定される項目値「いとう」と、第２の比較位置ポインタ（同図の矢印Ｂ’）が指し示すＶＬＰの値「５」にて特定される項目値「たなか」とが比較される（図１０のステップ１００１〜１００３）。この場合には、第１の指示値＜第２の指示値となるため、ステップ１００７に進み、図１８（ｃ）に示すように、格納位置ポインタ（同図矢印Ｃ）にて示される位置に、第１の比較位置ポインタにて示されるＶＬＰの値「３」が配置されるとともに、所定のＴＲの値も配置される。また、第１の比較位置ポインタおよび格納位置ポインタが一つ下流側に移動される（矢印Ａ’および矢印Ｃ’参照）。
【００４０】
さらに、第１の比較位置ポインタ（図１８（ｃ）の矢印Ａ’）が指し示すＶＬＰの値「２」にて特定される項目値「たなか」と、第２の比較位置ポインタ（同図の矢印Ｂ）が指し示すＶＬＰの値「５」にて特定される項目値「たなか」とが比較される（図１０のステップ１００１〜１００３参照）。この場合には、第１の指示値＝第２の指示値となるため、ステップ１００５に進む。ここでは、図１８（ｄ）に示すように、格納位置ポインタ（矢印Ｃ）にて示される位置に、第１の比較位置ポインタにて示されるＶＬＰの値「２」が配置される。また、第１の比較位置ポインタおよび第２の比較位置ポインタにて示される位置に対応するＴＲの値として、格納位置ポインタが指し示す格納位置番号「４」が配置される。
【００４１】
このような処理の後、再度図１０の処理が進められると、ステップ１０１４に進む。ここでは、旧ＰＶをＴＲにて変換して新たなＰＶを作る処理が実行される。旧ＰＶの値が取りだされ、当該値が指し示す位置のＴＲの値を特定して、当該ＴＲの値を、新ＰＶにおいて前記旧ＰＶを取り出した値の位置と対応する位置に配置する。この処理を繰り返すことで、図２０（ｂ）に示すような新ＰＶ２００１を得ることが可能となる。
【００４２】
次に、部分中間ブロック１５１１−３、１５１１−４からなる組に関する処理についても簡単に説明する。ここでも、先の部分中間ブロックの組と同様の処理が進められる。たとえば、最初に図１０の処理を施すことにより、図１９（ｂ）に示すように、格納位置ポインタ（図１９（ｂ）の矢印Ｃ）の位置に、第２の格納位置ポインタ（同図の矢印Ｂ）にて指し示されるＶＬＰの値「８」が配置されるとともに、対応するＴＲの値「６」が決定される。また、次に図１０の処理を施すことにより、図１９（ｃ）に示すように、格納位置ポインタ（図１９（ｃ）の矢印Ｃ）の位置に、第１の比較位置ポインタ（図１９（ｃ）の矢印Ａ）にて指し示されるＶＬＰの値「６」が配置されるとともに、所定のＴＲの値（第１の比較位置ポインタおよび第２の比較位置ポインタが指し示す位置に対応するＴＲの値）が決定される。
【００４３】
最後に、もう一度図１０の処理を施すことにより、ステップ１０１４において新たなＰＶが作られる（図２０（ｂ）参照）。
これにより、図１７の符号１７０１−１、１７０１−２に示すような部分中間ブロックを作り出すことができる。
【００４４】
さらに、この例では、部分中間ブロック１７０１−０（実際には、部分中間ブロック１５０１−０と同じ）と部分中間ブロック１７０１−１とを併合している。ここでも、図１０に示す処理が繰り返され、部分中間ブロック１７０１−０と部分中間ブロック１７０１−１との間で、比較位置ポインタにて指し示すＶＬＰの値により特定される項目値の比較結果にしたがって、ＶＬＰ’の値やＴＲの値が順次決定される。
【００４５】
図２１に示すように、部分中間ブロック１７０１−０と部分中間ブロック１７０１−１に関して、図１０の処理が施される。図２１（ａ）に示すように、最初に実行される図１０の処理では、第1の比較位置ポインタ（図２１（ａ）の矢印Ａ）が示すＶＬＰの値「１」にて特定される項目値「あべ」と、第２の比較位置ポインタ（図２１（ｂ）の矢印Ｂ）が示すＶＬＰの値「４」にて特定される項目値「あべ」とが比較される。この比較結果に基づき図１１（ステップ１００５）の処理が実行されて、格納位置ポインタ（図２１（ａ）の矢印Ｃ）に示すＶＬＰ’中の値「１」が決定されるとともに、第１および第２の比較位置ポインタの位置に対応するＴＲ中の値「０」が決定される。
【００４６】
また、図２１（ｂ）に示すように、次に実行される図１０の処理では、第１の比較位置ポインタ（図２１（ｂ）の矢印Ａ）が示すＶＬＰの値「０」にて特定される項目値「たなか」と、第２の比較位置ポインタ（図２１（ｂ）の矢印Ｂ）が示すＶＬＰの値「３」にて特定される項目値「いとう」とが比較される。この比較結果に基づき、図１３の処理（ステップ１００９）が実行されて、格納位置ポインタ（図２１（ｂ）の矢印Ｃ）に示すＶＬＰ’中の値「３」が決定されるとともに、第２の比較位置ポインタの位置に対応するＴＲ中の値「１」が決定される。
【００４７】
さらに、図２１（ｃ）に示すように、次に実行される図１０の処理では、第１の比較位置ポインタ（図２１（ｃ）の矢印Ａ）が示すＶＬＰの値「０」にて特定される項目値「たなか」と、第２の比較位置ポインタ（図２１（ｃ）の矢印Ｂ）が示すＶＬＰの値「２」にて特定される項目値「たなか」とが比較される。この比較結果に基づき、図１１の処理（ステップ１００５）が実行されて、格納位置ポインタ（図２１（ｃ）の矢印Ｃ）に示すＶＬＰ’の値「０」が決定されるとともに、第１および第２の比較位置ポインタの位置に対応するＴＲ中の値「２」が決定される。この後に実行される図１０の処理では、第１の比較位置ポインタおよび第２の比較位置ポインタが示すＶＬＰの値が存在しないため、図１４の処理（ステップ１０１４）が実行され、ＰＶ（旧ＰＶ）の値が、関連するＴＲにて変換されて、新たなＰＶ（新ＰＶ）を得ることができる（図２３（ａ）参照）。
このような処理により、図１７の符号１７１１−０にて示すような部分中間ブロックが生成される。最後に、部分中間ブロック１７１１−０と部分中間ブロック１７１１−１（実際には部分中間ブロック１７０１−２と同じ）との組を作り、この部分中間ブロックの組について所定の処理を実行する。
【００４８】
上記部分中間ブロック１７１１−０、１７１１−１の組に関する処理について、フローチャート等を参照して説明を加える。たとえば、最初に図１０の処理においては、図２２（ａ）に示すように、第１の比較位置ポインタ（図２２（ａ）の矢印Ａ）が示すＶＬＰの値「１」にて特定される項目値「あべ」と、第２の比較位置ポインタ（図２２（ｂ）の矢印Ｂ）が示すＶＬＰの値「８」にて特定される項目値「あべ」とが比較される。この比較結果に基づき図１１（ステップ１００５）の処理が実行されて、格納位置ポインタ（図２２（ａ）の矢印Ｃ）に示すＶＬＰ’中の値「１」が決定されるとともに、第１および第２の比較位置ポインタの位置に対応するＴＲ中の値「０」が決定される。
【００４９】
また、図２２（ｂ）に示すように、次に実行される図１０の処理では、第１の比較位置ポインタ（図２２（ｂ）の矢印Ａ）が示すＶＬＰの値「３」にて特定される項目値「いとう」と、第２の比較位置ポインタ（図２２（ｂ）の矢印Ｂ）が示すＶＬＰの値「３」にて特定される項目値「いとう」とが比較される。この比較結果に基づき、図１１の処理（ステップ１００５）が実行されて、格納位置ポインタ（図２２（ｂ）の矢印Ｃ）に示すＶＬＰ’中の値「３」が決定されるとともに、第１および第２の比較位置ポインタの位置に対応するＴＲの値「１」が決定される。
【００５０】
さらに、図２２（ｃ）に示すように、次に実行される図１０の処理では、第１の比較位置ポインタ（図２２（ｃ）の矢印Ａ）が示すＶＬＰの値「０」は存在するが、第２の比較位置ポインタ（図２２（ｃ）の矢印Ｂ）が示すＶＬＰの値が存在しないため、図１２の処理（ステップ１０１３）に進み、格納位置ポインタ（図２２（ｃ）の矢印Ｃ）に示すＶＬＰ’の値「０」が決定されるとともに、第１の比較位置ポインタの位置に対応するＴＲ中の値「２」が決定される。この後に実行される図１０の処理では、第１の比較位置ポインタおよび第２の比較位置ポインタが示すＶＬＰの値が存在しないため、図１４の処理（ステップ１０１４）が実行され、ＰＶ（旧ＰＶ）の値が、関連するＴＲにて変換されて、新たなＰＶ（新ＰＶ）を得ることができる（図２３（ｂ）参照）。
【００５１】
このようにして、図６（ｂ）に示すように、ＶＰ６０１と、ＶＬＰ６０４およびオリジナル項目値配列６０３からなる値リスト６０２を有する情報ブロック６００を得ることができる。ここで、オリジナル項目値配列においては、実際には、格納位置番号「０」、「１」および「３」に対応する要素（項目値）「たなか」、「あべ」および「いとう」（符号６１０、６１１、６１３参照）のみが利用され、他の要素（項目値）（たとえば、符号６１２、６１４参照）が利用されていない、つまり、ＶＬＰの値に指し示されていないことが理解できる。すなわち、オリジナル項目値配列において、項目値が重複している場合には、もっとも格納位置番号の小さなもののみが利用され、他のものは利用されない。
【００５２】
この形式であっても、図３（ｂ）に示す情報ブロックと同等であることにつき以下に説明を加える。たとえば、図６（ａ）においては、レコード番号「０」に対応して項目値「たなか」が特定されている。図６（ｂ）においても、レコード番号「０」に対応して、ＰＶ中、格納位置番号「０」の要素（値）「２」が特定される。この要素「２」を格納位置番号とするように、ＶＬＰ中の要素（値）を特定すると、「０」を得ることができ、さらに、当該ＶＬＰの要素（値）「０」を格納位置番号とするオリジナル項目値配列の項目値「たなか」を特定することが可能となる。他のレコード番号についても同様に、項目値を得られることは明らかである。
【００５３】
したがって、図６（ｂ）に示すＶＬＰ６０４およびオリジナル項目値配列６０３からなる値リスト６０２を利用して、検索、集計およびソートを実現することも可能である。ただし、この場合には、オリジナル項目値配列をそのまま利用することになる。図６（ｂ）から明らかなように、オリジナル項目値配列においては、項目値が重複する場合には、格納位置番号が最も小さいもののみが利用され、残りの項目値が利用されない。したがって、重複が多い場合には、オリジナル項目値配列において利用されない部分が多く出現する。そこで、ＶＬＰの値にて示す項目値を、新たな配列に収容することで、重複のまったくない項目値配列（圧縮型値リスト）を作成することが可能となる。
【００５４】
図２４は、圧縮型値リストを生成する処理を示すフローチャートである。図２４に示すように、コンピュータシステム１０は、格納位置番号を初期化するとともに、圧縮型値リストのための領域を確保する（ステップ２４０１）。この領域に配置されるデータ（項目値）のレコード数は、ＶＬＰに含まれる値の数と対応するため、この値の数に対応して領域を確保すればよい。
【００５５】
次いで、格納位置番号が示すＶＬＰ中の値が取り出され（ステップ２４０２）、当該ＶＬＰの値が示す、オリジナル項目値配列中の項目値が特定される（ステップ２４０３）。その後に、特定された項目値が、圧縮型値リスト中、格納位置番号が示す位置に配置される（ステップ２４０４）。この処理は、全てのＶＬＰの値に関して実行される（ステップ２４０５、２４０６参照）。たとえば、図６（ｂ）に示す値リスト６０２に関して、図２４の処理を施すと、図２５（ａ）に示すように、ＶＬＰの値（たとえば、格納位置番号「０」にて示される値「１」）によりオリジナル項目値配列中の項目値（たとえば「あべ」）が特定され（ステップ２４０２、２４０３）る。そして、この項目値が、圧縮型値リストの格納位置番号にて示される位置（たとえば「０」の位置）に配置される。
【００５６】
このような処理の結果、図６（ｂ）に示す情報ブロック６００は、図２５（ｂ）に示すように、ＰＶ６０１と圧縮型値リスト２５０１とを有する情報ブロック２５００に変換される。新たなに得られた情報ブロック２５００は、図３（ｂ）に示す情報ブロックと同じ形式であることが理解できるであろう。図２４の処理の結果得られた情報ブロック２５００に基づき、検索、集計およびソートの処理を実行できることは言うまでもない。
【００５７】
上記コンパイル処理において、図１０に示す処理を繰り返して二つの部分中間ブロックを併合することにより得られた配列につき再度考察を加える。たとえば、図１８（ｄ）のＶＬＰ’および項目値配列を参照する。新たなＶＬＰ（新ＶＬＰ）であるＶＬＰ’（符号１８０１参照）中、格納位置番号「２」の位置に収容された値「４」にて特定される、項目値配列（符号１８０２参照）の要素（値）は、「あべ」である。また、新ＶＬＰ１８０１中、格納位置番号「３」の位置に収容あれた値「３」にて特定される、項目値配列１８０２の要素（値）は「いとう」である。さらに、新ＶＬＰ１８０１中、格納位置番号「４」の位置に収容あれた値「２」にて特定される、項目値配列１８０２の要素（値）は「たなか」である。新ＶＬＰおよび項目値配列により、併合された部分中間ブロックに関する、項目値がソートされた状態の値リストが作られていることが理解できる。すなわち、ある二つの部分中間ブロックに関して図１０の処理を繰り返し実行することにより、上記二つの部分中間ブロックを併合した部分中間ブロックに関して、項目値が所定の順序で並べられかつ重複が排除された値リストが作られる。
【００５８】
上記構成のデータのコンパイル方法における処理速度について考察を加える。
ここでは説明を容易にするために、値リストを、ＶＬＰおよび項目値配列の形式ではなく、ＶＬＰの値により項目値配列の値を特定し、これを並べた配列（圧縮型値リスト）の形式として説明する。
図２６に示すように、８つのレコードに、０〜７の何れかの数字が項目値として割り当てられていると考える。ここで、各レコードに対応する項目値は全てことなると考える。この場合に、本実施の形態においては、レコード番号が「０」および「１」の値リスト（符号２６０１−０、２６０１−１参照）に関する部分中間ブロックの組、レコード番号「２」および「３」の値リストに関する部分中間ブロックの組など、４つの部分中間ブロックの組（図２６（ｂ）参照）のそれぞれに関して図１０の処理が繰り返し実行される。
【００５９】
上記例では全ての項目値が異なるため、４回の項目値の比較、すなわち、「２」と「６」との比較、「４」と「０」との比較、「３」と「７」との比較および「５」と「１」との比較が行なわれる。これを一般化すると、要素が「ｎ（ただしｎは２の累乗であるのが望ましい）」であれば、最初の処理においては、「ｎ／２１」回の比較が実行されることになる。
【００６０】
次の部分中間ブロックの併合により４つの部分中間ブロックから、２つの部分中間ブロックが作られる（図２６（ｂ）および（ｃ）参照）。ここでは、部分中間ブロック２６０２−０、２６０２−１に関して、３回の項目値の比較、つまり、「２」と「０」との比較、「２」と「４」との比較、および、「６」と「４」との比較が実行され、残りの情報ブロックに関しても、３回の項目値の比較、つまり、「３」と「１」との比較、「３」と「５」との比較、および、「７」と「５」との比較が実行される。これを一般化すると、要素が「ｎ（ただしｎは２の累乗であるのが望ましい）」であれば、最大で「（ｎ／２２）＊（２２−１）」回の比較が実行されることになる。
さらに、２つの部分中間ブロックから最終的な情報ブロックが作られる（図２６（ｃ）および（ｄ）参照）。ここでは、７回の項目値の比較、つまり、「０」と「１」、「２」と「１」、「２」と「３」、「４」と「３」、「４」と「５」、「６」と「５」、および、「６」と「７」の比較が実行される。これを一般化すると、要素が「ｎ（ただしｎは２の累乗であるのが望ましい）」であれば、最大で「（ｎ／２３）＊（２３−１）」回の比較が実行されることになる。
【００６１】
上記比較回数を検討すると、部分中間ブロックの併合において以下の回数だけ比較処理が実行される。
１回目              ：（ｎ／２１）回
２回目              ：（ｎ／２２）＊（２２−１）回
３回目              ：（ｎ／２３）＊（２３−１）回
：
ｌｏｇ２（ｎ）回目  ：（ｎ／２ｌｏｇ２（ｎ））＊（２ｌｏｇ２（ｎ）−１）回
【００６２】
情報ブロック生成に必要な比較回数は、上記各併合処理における比較回数の総和と考えられる。したがって、
総比較回数は、以下の式１により得ることが可能である。
【数１】
0004563558.tif 000002
このように、項目値に重複のない場合（各項目値が異なる場合）には、最大で、約「ｎ＊ｌｏｇ２（ｎ）−１」回の比較処理が行なわれることが理解できる。
【００６３】
これに対して、「ｎ」個の項目値のうち、「ｍ」個が異なる場合を考える。この場合には、部分中間ブロックの併合において以下の回数だけ比較処理が実行される。
0004563558.tif 000003
ここで、「ｎ」に対して「ｍ」が十分に小さい場合（たとえば、ｍ＝１〜４程度の場合）には、
１回目              ：（ｎ／２１）回
２回目              ：（ｎ／２２）回
３回目              ：（ｎ／２３）回
：
ｌｏｇ２（ｎ）回目  ：（ｎ／２ｌｏｇ２（ｎ））回
と考えることができるため、総比較回数は約「ｎ」回と考えることができる。
【００６４】
その一方、「ｎ」が「ｍ」に対して比較的大きい場合には、
１回目              ：（ｎ／２１）回
２回目              ：（ｎ／２２）＊（(m/n)＊２２−１）回
３回目              ：（ｎ／２３）＊（(m/n)＊２３−１）回
：
ｌｏｇ２（ｎ）回目  ：（ｎ／２ｌｏｇ２（ｎ））＊（(m/n)＊２ｌｏｇ２（ｎ）−１）回
と考えることができるため、総比較回数は、以下の式２となる。
【数２】
0004563558.tif 000004
【００６５】
このように、「ｎ」個の項目値中、「ｍ」個が異なる場合には、「ｍ」の大きさにしたがって以下のように比較処理が実行される。
「ｍ」が十分に小さい場合：約「ｎ」回の比較
「ｍ」が比較的大きい場合：約「ｍ＊ｌｏｇ２（ｎ）−１」回の比較
したがって、特に項目値の重複が大きい場合には、ほぼ「ｎ」のオーダーで情報ブロックを生成することが可能となる。
【００６６】
本実施の形態によれば、部分中間ブロックの対からなる新たな部分中間るブロックを作成して、この新たな部分空間ブロックにおける項目値の比較によって、部分中間ブロックにおける項目値配列を作成し、部分中間ブロックを漸次大きくすることにより、最終的に一つの部分中間ブロックを得て、これを情報ブロックとしている。したがって、対に関する処理を、複数のプロセッサによりパラレルに実施することが可能となる。
【００６７】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
前記実施の形態にかかる部分中間ブロックの対に対する処理は、シングルプロセッサにより実行されても良いし、パラレルプロセッサを有するシステムにおいて、ある対の処理をあるプロセッサに割り当てることにより、より高速化を図っても良いことは言うまでもない。
【００６８】
また、部分中間ブロックの対の選択は、前記実施の形態に示すものに限定されず、隣接する二つの部分中間ブロックであれば所望のように、対とすることが可能である。
さらに、前記実施の形態においては、一般のコンピュータシステム１０内に、所定のプログラムを読み込み、当該プログラムを実行することにより、複数の表形式データのジョインおよびジョインされた表形式データに関する処理を実現しているが、本発明はこれに限定されるものではなく、パーソナルコンピュータ等のような一般のコンピュータシステムに、データベース処理専用のボードコンピュータを接続し、当該ボードコンピュータが上記処理を実行できるように構成しても良いことは言うまでもない。したがって、本明細書において、手段とは必ずしも物理的手段を意味するものではなく、各手段の機能が、ソフトウェアによって実現される場合も包含する。さらに、一つの手段の機能が、二つ以上の物理的手段により実現されても、若しくは、二つ以上の手段の機能が、一つの物理的手段により実現されてもよい。
【００６９】
【発明の効果】
本発明によれば、高速な処理時間と、データの分布によっても処理効率が極端に悪化しないことが予測できるデータのコンパイル方法を提供することが可能となる。
また、本発明によれば、特に、末子部パラレルシステムにおいてパフォーマンスを劇的に改善できるデータのコンパイル方法を提供することが可能となる。
【図面の簡単な説明】
【図１】  図１は、本発明の実施の形態にかかる検索、集計およびサーチ方法を実現できるコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。
【図２】  図２は、本実施の形態にて用いる情報ブロックを示す図である。
【図３】  図３は、表形式データの例、および、当該表形式データに基づく情報ブロックの例を示す図である。
【図４】  図４は、表形式データの他の例、および、当該表形式データに基づく情報ブロックの他の例を示す図である。
【図５】  図５は、単一項目に関する検索手法を示すフローチャートである。
【図６】  図６は、ある項目に関するレコード番号と項目値との関係、および、完成した本実施の形態にかかる情報ブロックを示す図である。
【図７】  図７は、本実施の形態にかかるコンパイル処理の概略を示すフローチャートである。
【図８】  図８は、本実施の形態にかかる部分中間ブロックの一例を示す図である。
【図９】  図９は、本実施の形態において二つの部分中間ブロックを併合して新たな部分中間ブロックを生成する処理の概略を示すフローチャートである。
【図１０】  図１０は、図９のステップ９０４の処理をより詳細に示すフローチャートである。
【図１１】  図１１は、図１０のステップ１００５をより詳細に示すフローチャートである。
【図１２】  図１２は、図１０のステップ１００７、１０１３をより詳細に示すフローチャートである。
【図１３】  図１３は、図１０のステップ１００９、１０１１をより詳細に示すフローチャートである。
【図１４】  図１４は、図１０のステップ１０１４をより詳細に示すフローチャートである。
【図１５】  図１５は、初期的な部分中間ブロックが併合されて新たな部分空間ブロックが生成された例を示す図である。
【図１６】  図１６は、本実施の形態において新たなＰＶを作成するための処理を示す図である。
【図１７】  図１７は、本実施の形態において部分中間ブロックの併合の一例を示す図である。
【図１８】  図１８は、本実施の形態において部分中間ブロックの併合処理を説明するための図である。
【図１９】  図１９は、本実施の形態において部分中間ブロックの併合処理を説明するための図である。
【図２０】  図２０は、本実施の形態において新たなＰＶを作成するための処理を示す図である。
【図２１】  図２１は、本実施の形態において部分中間ブロックの併合処理を説明するための図である。
【図２２】  図２２は、本実施の形態において部分中間ブロックの併合処理を説明するための図である。
【図２３】  図２３は、本実施の形態において新たなＰＶを作成するための処理を示す図である。
【図２４】  図２４は、本実施の形態において、圧縮型値リストを生成する処理を示すフローチャートである。
【図２５】  図２５は、本実施の形態において、圧縮型値リストを生成する処理を説明するための図である。
【図２６】  図２６は、本実施の形態にかかる処理速度を考察するために用いられた配列の一例を示す図である。
【符号の説明】
１０        コンピュータシステム
１２        ＣＰＵ
１４        ＲＡＭ
１６        ＲＯＭ
１８        固定記憶装置
２０        ＣＤ−ＲＯＭドライバ
２２        Ｉ／Ｆ
２４        入力装置
２６        表示装置
【図１】
0004563558.tif 000005
【図２】
0004563558.tif 000006
【図３】
0004563558.tif 000007
【図４】
0004563558.tif 000008
【図５】
0004563558.tif 000009
【図６】
0004563558.tif 000010
【図７】
0004563558.tif 000011
【図８】
0004563558.tif 000012
【図９】
0004563558.tif 000013
【図１０】
0004563558.tif 000014
【図１１】
0004563558.tif 000015
【図１２】
0004563558.tif 000016
【図１３】
0004563558.tif 000017
【図１４】
0004563558.tif 000018
【図１５】
0004563558.tif 000019
【図１６】
0004563558.tif 000020
【図１７】
0004563558.tif 000021
【図１８】
0004563558.tif 000022
【図１９】
0004563558.tif 000023
【図２０】
0004563558.tif 000024
【図２１】
0004563558.tif 000025
【図２２】
0004563558.tif 000026
【図２３】
0004563558.tif 000027
【図２４】
0004563558.tif 000028
【図２５】
0004563558.tif 000029
【図２６】
0004563558.tif 000030