(57)【要約】   【課題】  レコードの追加に高速に応答する。  【解決手段】  情報処理装置は、各々の項目において、項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リスト、および、レコードの順番に項目値番号を指定する情報が格納された項目値指定情報配列、をメモリ中に生成する。コンパイル処理部５００１は、ハードディスク装置５０１０に記憶された表形式データ５０１０を読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、値リストの末尾に、新たな項目値を追加し、項目値番号指定配列中、レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納する。【選択図】  図５０
2007034878.tif 000002
【特許請求の範囲】
【請求項１】
複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理方法であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を備えたことを特徴とする情報処理方法。
【請求項２】
前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストであることを特徴とする請求項１に記載の情報処理方法。
【請求項３】
前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを有することを特徴とする請求項２に記載の情報処理方法。
【請求項４】
さらに、前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加するステップを備えたことを特徴とする請求項１ないし３の何れか一項に記載の情報処理方法。
【請求項５】
さらに、各項目に関する項目値を含む単一のレコードを受け付けるステップを備えたことを特徴とする請求項１ないし４の何れか一項に記載の情報処理方法。
【請求項６】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップを備えたことを特徴とする請求項１ないし５の何れか一項に記載の情報処理方法。
【請求項７】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップを備えたことを特徴とする請求項１ないし６の何れか一項に記載の情報処理方法。
【請求項８】
さらに、検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えたことを特徴とする請求項４に記載の情報処理方法。
【請求項９】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えたことを特徴とする請求項４に記載の情報処理方法。
【請求項１０】
さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えたことを特徴とする請求項４に記載の情報処理方法。
【請求項１１】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えたことを特徴とする請求項４に記載の情報処理方法。
【請求項１２】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えたことを特徴とする請求項４に記載の情報処理方法。
【請求項１３】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えたことを特徴とする請求項４に記載の情報処理方法。
【請求項１４】
さらに、前記記憶装置中に、前記項目値番号指定配列と同一サイズの第２の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第２の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納するステップと、
前記記憶装置中に、前記値リストと同一サイズの第２の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第２の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を備えたことを特徴とする請求項１に記載の情報処理方法。
【請求項１５】
前記項目値の取りうる範囲を対数分割するステップと、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を備えたことを特徴とする請求項３に記載の情報処理方法。
【請求項１６】
０からＳまでの整数を、Ｎ個に対数分割する際の範囲が、
０〜Ｓ＾（０／（Ｎ−１））
Ｓ＾（０／（Ｎ−１）〜Ｓ＾（１／（Ｎ−１））
Ｓ＾（１／（Ｎ−１）〜Ｓ＾（２／（Ｎ−１））
：
Ｓ＾（Ｎ−３／（Ｎ−１）〜Ｓ＾（Ｎ−２／（Ｎ−１））
Ｓ＾（Ｎ−２／（Ｎ−１）〜Ｓ＾（Ｎ−１／（Ｎ−１））
であることを特徴とする請求項１５に記載の情報処理方法。
【請求項１７】
複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理装置であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加する値リスト更新手段と、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納する項目値番号格納手段と、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するバリューマップ・ノード追加手段と、を備えたことを特徴とする情報処理装置。
【請求項１８】
前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストであることを特徴とする請求項１７に記載の情報処理装置。
【請求項１９】
前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記バリューマップ・ノード追加手段が、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成することを特徴とする請求項１８に記載の情報処理装置。
【請求項２０】
さらに、前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加する、レコード番号リスト・ノード追加手段を備えたことを特徴とする請求項１７ないし１９の何れか一項に記載の情報処理装置。
【請求項２１】
さらに、各項目に関する項目値を含む単一のレコードを受け付けるレコード受付手段を備えたことを特徴とする請求項１７ないし２０の何れか一項に記載の情報処理装置。
【請求項２２】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段を備えたことを特徴とする請求項１７ないし２１の何れか一項に記載の情報処理装置。
【請求項２３】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段を備えたことを特徴とする請求項１７ないし２２の何れか一項に記載の情報処理装置。
【請求項２４】
さらに、検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定する値番号特定手段と、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えたことを特徴とする請求項２０に記載の情報処理装置。
【請求項２５】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定する値番号特定手段と、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えたことを特徴とする請求項２０に記載の情報処理装置。
【請求項２６】
さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えたことを特徴とする請求項２０に記載の情報処理装置。
【請求項２７】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えたことを特徴とする請求項２０に記載の情報処理装置。
【請求項２８】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第１のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第２のソート結果格納配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えたことを特徴とする請求項２０に記載の情報処理装置。
【請求項２９】
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第１のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第２のソート結果配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えたことを特徴とする請求項２０に記載の情報処理装置。
【請求項３０】
さらに、前記記憶装置中に、前記項目値番号指定配列と同一サイズの第２の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第２の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納する第２の項目値番号配列生成手段と、
前記記憶装置中に、前記値リストと同一サイズの第２の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第２の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納する第２の値リスト生成手段と、を備えたことを特徴とする請求項１７に記載の情報処理装置。
【請求項３１】
前記項目値の取りうる範囲を対数分割する範囲決定手段と、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てる範囲割り当て手段と、を備えたことを特徴とする請求項１９に記載の情報処理装置。
【請求項３２】
０からＳまでの整数を、Ｎ個に対数分割する際の範囲が、
０〜Ｓ＾（０／（Ｎ−１））
Ｓ＾（０／（Ｎ−１）〜Ｓ＾（１／（Ｎ−１））
Ｓ＾（１／（Ｎ−１）〜Ｓ＾（２／（Ｎ−１））
：
Ｓ＾（Ｎ−３／（Ｎ−１）〜Ｓ＾（Ｎ−２／（Ｎ−１））
Ｓ＾（Ｎ−２／（Ｎ−１）〜Ｓ＾（Ｎ−１／（Ｎ−１））
であることを特徴とする請求項３１に記載の情報処理装置。
【請求項３３】
複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を実行させることを特徴とするコンピュータプログラム。
【請求項３４】
前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストであることを特徴とする請求項３３に記載のプログラム。
【請求項３５】
前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記コンピュータに、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを実行させることを特徴とする請求項３４に記載のプログラム。
【請求項３６】
さらに、前記コンピュータに、
前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加するステップを実行させることを特徴とする請求項３３ないし３５の何れか一項に記載のプログラム。
【請求項３７】
さらに、前記コンピュータに、
各項目に関する項目値を含む単一のレコードを受け付けるステップを実行させることを特徴とする請求項３３ないし３６の何れか一項に記載のプログラム。
【請求項３８】
さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップを実行させることを特徴とする請求項３３ないし３７の何れか一項に記載のプログラム。
【請求項３９】
さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップを実行させることを特徴とする請求項３３ないし３８の何れか一項に記載のプログラム。
【請求項４０】
さらに、前記コンピュータに、
検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させることを特徴とする請求項３６に記載のプログラム。
【請求項４１】
さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させることを特徴とする請求項３６に記載のプログラム。
【請求項４２】
さらに、前記コンピュータに、
前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させることを特徴とする請求項３６に記載のプログラム。
【請求項４３】
さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させることを特徴とする請求項３６に記載のプログラム。
【請求項４４】
さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させることを特徴とする請求項３６に記載のプログラム。
【請求項４５】
さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させることを特徴とする請求項３６に記載のプログラム。
【請求項４６】
さらに、前記コンピュータに、
前記記憶装置中に、前記項目値番号指定配列と同一サイズの第２の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第２の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納するステップと、
前記記憶装置中に、前記値リストと同一サイズの第２の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第２の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を実行させることを特徴とする請求項３３に記載のプログラム。
【請求項４７】
前記コンピュータに、前記項目値の取りうる範囲を対数分割するステップと、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を実行させることを特徴とする請求項３５に記載のプログラム。
【請求項４８】
０からＳまでの整数を、Ｎ個に対数分割する際の範囲が、
０〜Ｓ＾（０／（Ｎ−１））
Ｓ＾（０／（Ｎ−１）〜Ｓ＾（１／（Ｎ−１））
Ｓ＾（１／（Ｎ−１）〜Ｓ＾（２／（Ｎ−１））
：
Ｓ＾（Ｎ−３／（Ｎ−１）〜Ｓ＾（Ｎ−２／（Ｎ−１））
Ｓ＾（Ｎ−２／（Ｎ−１）〜Ｓ＾（Ｎ−１／（Ｎ−１））
であることを特徴とする請求項４７に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータのような情報処理装置を用いて大量のデータを処理する情報処理方法、情報処理装置および情報処理プログラムに関し、特に、データ追加を高速に処理する情報処理方法、情報処理装置および情報処理プログラムに関する。
【背景技術】
【０００２】
従来、大量のデータを蓄積し、蓄積されたデータを検索、ソートし、また、データを更新、削除等するようなデータ処理が行われている。これらのデータ処理は、たとえば、ＣＰＵと、メモリと、周辺機器インタフェースと、ハードディスクのような固定記憶装置と、表示装置やプリンタなどの出力装置と、キーボードやマウスなどの入力装置と、電源ユニットとがバスを介して接続された、周知のコンピュータシステムにプログラムをインストールし、プログラムが、コンピュータに、上記各種処理の処理ステップを実行させることで実現される。
【０００３】
上述したようなデータ処理を実現するために、大量のデータを蓄積し管理する各種データベースが知られている。特に大量のデータのうちでも、表形式のデータを高速に処理する要求は非常に強い。
【０００４】
図１は、レコードごとに、各項目の値（項目値）を有するような形式のデータを表として示した図である。このように表として示されるようなデータを表形式データと称する。図１の例では、１００万個のレコードのそれぞれが、性別、年齢、および、職業という項目の値（項目値）を有する。たとえば、レコード番号「０」のレコードは、性別の項目について「女性」という値を持ち、年齢の項目について「１８」という値を持ち、かつ、職業の項目について「プログラマ」という値を持つ。
【０００５】
従来、上述した表形式データは、図２（Ａ）に示すように、いわゆる行単位（レコード単位）で、物理的にその値を格納し、或いは、図２（Ｂ）に示すようにいわゆる項目単位で、物理的にその値を格納していた。図２（Ａ）に示す例の場合、レコード番号に関する性別、年齢および職業の項目値の組が、レコード番号順に、論理的アドレスが増加する順番で記憶装置（たとえばハードディスク装置）上に格納されている。その一方、図２（Ｂ）に示す例の場合には、項目ごとに、レコード番号順に、項目値が、論理アドレスが増加する方向に記憶装置上に格納されている。より具体的には、図２（Ｂ）の例では、性別の項目に関してレコード番号「０」から「９９９９９９」までの項目値が、記憶装置中で順番に並べられ、次に、年齢の項目に関してレコード番号「０」から「９９９９９９」までの項目値が順番に並べられ、さらに、職業の項目に関してレコード番号「０」から「９９９９９９」までの項目値が順番に並べられている。
【０００６】
図２（Ａ）や図２（Ｂ）に示すような形式でデータを記憶装置に格納する場合、レコードの検索などデータ処理のために、記憶装置に格納されたデータのアクセス時間が長いことに起因して、多大な処理時間を要するという問題点がある。また、図２（Ａ）や図２（Ｂ）に示す形式でのデータの記憶には、以下のような問題点がある。
（１）上記形式で記憶されるデータのサイズは巨大化しやすく、また、項目別など、所望のように物理的に分割することが困難である。たとえば、性別の項目の項目値が「男性」のレコードを抽出するとき、年齢や職業という他の項目の情報は必要とされないので、性別という項目だけからなる表に分割してアクセスできれば効率的である。図２（Ｂ）に示された技術の場合、項目ごとの分割は可能であるが、大量のデータを扱う際には、データサイズが巨大化することは同じである。
（２）上記形式で記憶されるデータは、各項目値を同時にソートした形で保持できない。たとえば、図２（Ａ）および図２（Ｂ）に示した従来技術の場合、項目値は、性別の項目に関して「女性、男性、女性、．．．、女性」のようにレコード番号順に並べられている。しかし、検索などを実行する場合には、一般に、「女性、女性、女性、男性、．．．、男性」というように並べられている方が便宜である。ところが、従来の形式では、項目値は所定の配列順序、即ち、レコード番号順に並べられているので、特定の項目に関して項目値をソートすることは許容されない。そのため、従来技術の場合、検索に都合の良い項目値の並べ方を選択することができない。
（３）上記形式で記憶されるデータにおいては、同一値が何度も出現する。
【０００７】
上述した問題点を解決すべく、本発明者は、特許文献１に記載されたように、
特定の項目に属する項目値に対応した項目値番号の順番に、項目値が格納されている値管理テーブル（値リスト）と、レコードの順番に項目値番号を指定する情報が格納された項目値番号指定情報配列（値リストへのポインタ配列）とを記憶装置に保持することにより、項目に対応した項目値を含むレコードの配列として表現される表形式データを蓄積、管理するような情報処理装置を提案している。
【０００８】
この情報処理装置においては、項目値番号指定情報配列から特定のレコードに対応した項目値番号を取得し、値管理テーブルに格納された項目値の中から、取得された項目値番号に対応した項目値を得ることができる。
【０００９】
図３（Ａ）に示す例では、元データとして、レコード番号の順に、年齢の項目の項目値が並べられている表が、メモリなど記憶装置に記憶された、項目値が重複なくかつ昇順に並べられた値リストＶＬと、レコード番号の順に、値リストＶＬ中の位置を指定する項目値番号が格納されたポインタ配列ＶＮｏとで表される。図３（Ｂ）に示す他の例では、同じ元データとして示された表が、項目値が重複なく、かつ、元データにおける出現順に並べられた値リストＶＬと、レコード番号の順に、値リストＶＬ中の位置を指定する項目値番号が格納されたポインタ配列ＶＮｏとで表される。図３（Ａ）の例では、値リストは昇順であるが、無論、降順であっても良い。
【００１０】
いずれの例においても、レコード番号から、ポインタ配列ＶＮｏ中の値（項目値番号）を取得し、かつ、値リストＶＬ中、項目値番号が示す位置の値（項目値）を取り出すことで、レコード番号に対応した項目値を取得することができる。
【００１１】
図１に示すように表として示されたデータを、特許文献１に記載した手法（特に、値リストにおいて項目値が昇順に並べられる手法）を用いると、図４（Ａ）〜（Ｃ）に示すように、性別の項目（図４（Ａ））、年齢の項目（図４（Ｂ））、職業の項目（図４（Ｃ））のそれぞれについて、メモリ中に、ポインタ配列ＶＮｏおよび値リストＶＬが生成される。
【特許文献１】特許第３５８１８３１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
特許文献１に記載したように、ポインタ配列ＶＮｏおよび値リストＶＬにより、ある項目の表を示すことにより、項目ごとに分割してアクセスすることが可能となる。また、昇順或いは降順の値リストＶＬを保持する場合には、それぞれの項目の項目値をソートした状態で保持することができる。さらに、上記値リストにおいては同一の項目値は一度しか出現せず、データのサイズを小さくすることが可能である。
【００１３】
しかしながら、特許文献１に記載された情報処理装置においても、特に、メモリ中に、昇順或いは降順の値リストおよびポインタ配列を格納する態様では、頻繁なレコードの追加があると処理時間が増大するという問題点があった。たとえば、図３（Ａ）の例において、レコードが追加され、当該レコード中の項目値が、値リストＶＬに存在しない（たとえば、「１４」）場合には、新たな項目値を所定の挿入位置に挿入したような値リストを新たに作り、かつ、値リストの更新に応じて、ポインタ配列ＶＮｏの値（項目値番号）も変更する必要がある。
【００１４】
したがって、ウェブサーバにおけるアクセスログの取得など、頻繁にレコードが追加され続けるようなシステムにおいて、データサイズを大規模化させることなく、頻繁なレコードの追加に高速に応答でき、かつ、検索やソートが容易に実現できるのが望ましい。
【００１５】
本発明は、レコードの追加に高速に応答可能な情報処理方法、情報処理装置および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明の目的は、複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理方法であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を備えたことを特徴とする情報処理方法により達成される。
【００１７】
好ましい実施形態においては、前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストである。
【００１８】
より好ましい実施態様においては、前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを有する。
【００１９】
また、好ましい実施態様においては、さらに、前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加するステップを備えている。
【００２０】
好ましい実施態様においては、さらに、各項目に関する項目値を含む単一のレコードを受け付けるステップを備えている。
【００２１】
別の好ましい実施態様においては、さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップを備えている。
【００２２】
また、別の好ましい実施態様においては、さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップを備えている。
【００２３】
検索を実現する情報処理方法に関する実施態様においては、
さらに、検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えている。
【００２４】
検索を実現する情報処理方法に関する他の実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えている。
【００２５】
ソートを実現する情報処理方法に関する実施態様においては、
さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えている。
【００２６】
ソートを実現する情報処理方法に関する他の実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えている。
【００２７】
複数項目のソートを実現する情報処理方法に関する実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えている。
【００２８】
複数項目のソートを実現する情報処理方法に関する他の実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えている。
【００２９】
また、別の好ましい実施態様においては、さらに、前記記憶装置中に、前記項目値番号指定配列と同一サイズの第２の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第２の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納するステップと、
前記記憶装置中に、前記値リストと同一サイズの第２の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第２の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を備えている。
【００３０】
さらに別の好ましい実施態様においては、前記項目値の取りうる範囲を対数分割するステップと、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を備えている。たとえば、０からＳまでの整数を、Ｎ個に対数分割する際の範囲は、
０〜Ｓ＾（０／（Ｎ−１））
Ｓ＾（０／（Ｎ−１）〜Ｓ＾（１／（Ｎ−１））
Ｓ＾（１／（Ｎ−１）〜Ｓ＾（２／（Ｎ−１））
：
Ｓ＾（Ｎ−３／（Ｎ−１）〜Ｓ＾（Ｎ−２／（Ｎ−１））
Ｓ＾（Ｎ−２／（Ｎ−１）〜Ｓ＾（Ｎ−１／（Ｎ−１））
となる。
【００３１】
また、本発明の目的は、複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理装置であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加する値リスト更新手段と、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納する項目値番号格納手段と、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するバリューマップ・ノード追加手段と、を備えたことを特徴とする情報処理装置によっても達成される。
【００３２】
好ましい実施態様においては、前記ノードが項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストである。
【００３３】
より好ましい実施態様においては、前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記バリューマップ・ノード追加手段が、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成する。
【００３４】
また、好ましい実施態様においては、さらに、前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加する、レコード番号リスト・ノード追加手段を備えている。
【００３５】
好ましい実施態様においては、さらに、各項目に関する項目値を含む単一のレコードを受け付けるレコード受付手段を備えている。
【００３６】
別の好ましい実施態様においては、さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段を備えている。
【００３７】
また、別の好ましい実施態様においては、さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段を備えている。
【００３８】
検索を実現する情報処理装置の好ましい実施態様においては、
さらに、検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定する値番号特定手段と、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えている。
【００３９】
検索を実現する情報処理装置の他の好ましい実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定する値番号特定手段と、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えている。
【００４０】
ソートを実現する情報処理装置の好ましい実施態様においては、
さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えている。
【００４１】
ソートを実現する情報処理装置の他の好ましい実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えている。
【００４２】
複数項目のソートを実現する情報処理装置の好ましい実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第１のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第２のソート結果格納配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えている。
【００４３】
複数項目のソートを実現する情報処理装置の他の好ましい実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第１のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第２のソート結果配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えている。
【００４４】
別の好ましい実施態様においては、さらに、前記記憶装置中に、前記項目値番号指定配列と同一サイズの第２の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第２の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納する第２の項目値番号配列生成手段と、
前記記憶装置中に、前記値リストと同一サイズの第２の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第２の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納する第２の値リスト生成手段と、を備えている。
【００４５】
また、別の好ましい実施態様においては、前記項目値の取りうる範囲を対数分割する範囲決定手段と、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てる範囲割り当て手段と、を備えている。たとえば、０からＳまでの整数を、Ｎ個に対数分割する際の範囲が、
０〜Ｓ＾（０／（Ｎ−１））
Ｓ＾（０／（Ｎ−１）〜Ｓ＾（１／（Ｎ−１））
Ｓ＾（１／（Ｎ−１）〜Ｓ＾（２／（Ｎ−１））
：
Ｓ＾（Ｎ−３／（Ｎ−１）〜Ｓ＾（Ｎ−２／（Ｎ−１））
Ｓ＾（Ｎ−２／（Ｎ−１）〜Ｓ＾（Ｎ−１／（Ｎ−１））
となる。
【００４６】
さらに、本発明の目的は、複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を実行させることを特徴とするコンピュータプログラムによっても達成される。
【００４７】
好ましい実施態様においては、前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストである。
【００４８】
より好ましい実施態様においては、前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記コンピュータに、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを実行させる。
【００４９】
また、別の好ましい実施態様においては、さらに、前記コンピュータに、
前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加するステップを実行させる。
【００５０】
好ましい実施態様においては、さらに、前記コンピュータに、
各項目に関する項目値を含む単一のレコードを受け付けるステップを実行させる。
【００５１】
別の好ましい実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップを実行させる。
【００５２】
また、別の好ましい実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップを実行させる。
【００５３】
検索を実現する実施態様においては、さらに、前記コンピュータに、
検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させる。
【００５４】
検索を実現する他の実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させる。
【００５５】
ソートを実現する実施態様においては、さらに、前記コンピュータに、
前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させる。
【００５６】
ソートを実現する他の実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させる。
【００５７】
複数項目のソートを実現する実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させる。
【００５８】
複数項目のソートを実現する他の実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させる。
【００５９】
また、別の好ましい実施態様においては、さらに、前記コンピュータに、
前記記憶装置中に、前記項目値番号指定配列と同一サイズの第２の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第２の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納するステップと、
前記記憶装置中に、前記値リストと同一サイズの第２の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第２の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を実行させる。
【００６０】
さらに別の好ましい実施態様においては、前記コンピュータに、前記項目値の取りうる範囲を対数分割するステップと、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を実行させる。より好ましくは、０からＳまでの整数を、Ｎ個に対数分割する際の範囲は、
０〜Ｓ＾（０／（Ｎ−１））
Ｓ＾（０／（Ｎ−１）〜Ｓ＾（１／（Ｎ−１））
Ｓ＾（１／（Ｎ−１）〜Ｓ＾（２／（Ｎ−１））
：
Ｓ＾（Ｎ−３／（Ｎ−１）〜Ｓ＾（Ｎ−２／（Ｎ−１））
Ｓ＾（Ｎ−２／（Ｎ−１）〜Ｓ＾（Ｎ−１／（Ｎ−１））
となる。
【発明の効果】
【００６１】
本発明によれば、レコードの追加に高速に応答可能な情報処理方法、情報処理装置および情報処理プログラムを提供することが可能となる。
【発明を実施するための最良の形態】
【００６２】
［ハードウェア構成］
以下、添付図面を参照して、本発明の実施の形態について説明する。図５は、本発明の実施の形態にかかる情報処理方法を実現するコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。コンピュータシステム１０は、いわゆるパーソナルコンピュータであり、種々の情報処理プログラムがインストールされている。情報処理プログラムには、たとえば、任意の表形式データをコンパイルして本実施の形態にしたがった形式のデータをメモリに格納するコンパイルプログラム、本実施の形態にしたがった形式のデータを読み出して所定の項目の表（ビュー）を作成するビュー作成プログラム、検索プログラム、ソートプログラム、データ追加プログラムなどが含まれる。インストールされた情報処理プラグラムはコンピュータシステムにより読み出され、当該プログラムにより、コンピュータシステムに、種々の処理ステップを実行させることができる。
【００６３】
図５に示すように、コンピュータシステム１０は、システム全体および個々の構成部分を制御するＣＰＵ１２、処理の過程で生成される種々の配列やリストを記憶するＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１４、プログラム等を記憶するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１６、ハードディスク装置１８、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなど可搬記憶媒体１９をアクセスするためのドライバ２０、ドライバ２０や外部ネットワーク（図示せず）と接続された外部端子との間に設けられたインタフェース（Ｉ／Ｆ）２２、キーボードやマウスからなる入力装置２４、および、表示装置２６を備えている。ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、ハードディスク装置１８、Ｉ／Ｆ２２、入力装置２４および表示装置２６は、バス２８を介して相互に接続されている。
【００６４】
上述したコンパイルプログラム、ビュー作成プログラム、検索プログラム、ソートプログラム、データ追加プログラムなどは、可搬記憶媒体１９に収容され、ドライバ２０に読み取られ、コンピュータシステム１０にインストールされても良い。また、いったん可搬記憶媒体１９から読み出されたものを、ハードディスク装置１８の所定の領域に記憶しておいても良い。或いは、上記プログラムが、ネットワーク（図示せず）、外部端子およびＩ／Ｆ２２を経て、外部のシステム（図示せず）から供給されるものであっても良い。
【００６５】
本発明においては、任意の表形式データをコンパイルして、高速な検索、ソートおよびデータ追加が可能な形式のデータの集合体を構築する。
【００６６】
［データ構造］
図６は、本実施の形態において例として用いる論理的な表形式データのテーブルを示す図である。図６に示すように、例として用いる表形式データのテーブルは、それぞれのレコードが、性別、年齢、身長、体重の項目のそれぞれの項目値を有している。たとえば、レコード番号「０」のレコードは、性別の項目値が「ｗｏｍａｎ」、年齢の項目値が「１８」、身長の項目値が「１６８（ｃｍ）」、体重の項目値が「５５（ｋｇ）」である。
【００６７】
図７（Ａ）、（Ｂ）および図８（Ａ）、（Ｂ）は、図６に示す論理的な表形式データのテーブルを、本実施の形態にしたがって変換した配列を示す図である。これらの配列は、ＲＡＭ１４などメモリに記憶され、図６に示すような表形式のビューを生成するときや、検索、ソート、データ追加などの処理を実行するときに、メモリから読み出される。
【００６８】
図７（Ａ）、（Ｂ）および図８（Ａ）、（Ｂ）に示すように、本実施の形態においては、性別、年齢、身長および体重のそれぞれの項目について情報ブロック７００、７１０、８００、８１０が作られる。たとえば、図７（Ａ）に示すように、性別の項目に関する情報ブロック７００は、レコード番号ごとに、項目値を指定する情報（項目値番号）が格納された値リストへのポインタ配列（以下、単に「ポインタ配列」と称する。）ＡＶＮｏ（Ａｐｐｅａｒａｎｃｅ  ｏｒｄｅｒ  Ｖａｌｕｅ  Ｎｏ．）と、項目値番号に対応付けて、性別の項目値が格納された値リストＡＶＬ（Ａｐｐｅａｒａｎｃｅ  ｏｒｄｅｒ  Ｖａｌｕｅ  Ｌｉｓｔ）とを有する。本実施の形態においては、後述するように、データ生成の高速さ、および、データ追加の容易さを優先しているため、項目値は、レコードの出現順となっている。したがって、後述する検索処理やソート処理を可能にするために、値リストＡＶＬに格納された項目値の各々が何番目の値であるかを示す値（つまり、項目値の順位を示す値）を格納した値順位番号配列ＶＯｒｄが設けられる。
【００６９】
さらに、本実施の形態においては、情報ブロック７００は、項目値を昇順に取り出すことを可能とする配列ＶＩｄｘ（Ｖａｌｕｅ  Ｉｎｄｅｘ）と、同じ位置の項目値を有するレコード番号を、項目値番号ごとに保持したリストＲｅｃＮｏＬｉｓｔ（Ｒｅｃｏｒｄ  Ｎｕｍｂｅｒ  Ｌｉｓｔ）とを含む。図７（Ａ）から理解できるように、ポインタ配列は、レコード数と同じ数の要素（項目値番号）を格納できるサイズを有する。配列ＶＯｒｄおよびＶＩｄｘは、値リストＡＶＬの項目値の数と同じ数の要素を格納できるサイズを有する。これに対して、リストＲｅｃＮｏＬｉｓｔは、項目値番号ごとに格納すべき値の数が可変となっている。
【００７０】
他の情報ブロック（符号７１０、８００、８１０）についても、情報ブロック７００と同様に、それぞれ、ポインタ配列ＶＮｏ、値リストＡＶＬ、配列ＶＯｒｄ、ＶＩｄｘおよびリストＲｅｃＮｏＬｉｓｔを有する。
【００７１】
［コンパイル処理］
まず、従来の形態で記憶された表形式データに基づき、本実施の形態にかかる複数の情報ブロックを生成する処理（コンパイル処理）について説明する。図９および図１０は、本実施の形態にかかるコンパイル処理を示すフローチャートである。
【００７２】
従来の形態の表形式データが、図２（Ａ）に示すように、レコードごとに各項目の値が連続して、ハードディスク装置１８に記憶されていると考える。本実施の形態においては、ＣＰＵ１２が、ハードディスク装置１８からレコードを読み出して、図９および図１０に示す処理を実行して、ＲＡＭ１４などメモリ上に所定の配列を生成する。特に、後述するように、処理対象となるレコードについて処理をしつつ、並行して、ハードディスク装置１８からのレコードの読み出しが可能であるため、コンパイルの処理時間を短縮することが可能となる。
【００７３】
以下、図６に示す表形式データのテーブルのうち、性別という項目について情報ブロックを生成する場合について説明する。他の項目（年齢、身長、体重）についても同様に情報ブロックが生成可能であることはいうまでもない。
【００７４】
まず、ＣＰＵ１２は、メモリ中に、初期的にバリューマップの領域を確保する。また、ＣＰＵ１２は、処理で利用する「全行数」および「値の種類」の値を格納する領域を確保し、初期値「０」を格納する。さらに、ＣＰＵ１２は、テーブルに含まれるそれぞれの項目について、配列ＡＶＮｏ、ＡＶＬ、ＲｅｃＮｏＬｉｓｔの領域を確保して、それぞれに初期値（たとえば無効値）を格納する（ステップ９０１）。配列のサイズやＲｅｃＮｏＬｉｓｔについては後述する。
【００７５】
ＣＰＵ１２は、ハードディスク装置１８から、レコードを読み込む（ステップ９０２）。図２（Ａ）の例では、初期的には、レコード番号「０」のレコード（性別の項目値：「Ｗｏｍａｎ」、年齢の項目値：１８、身長の項目値：１６８、体重の項目値：５５）が読み込まれ、メモリ上に一時的に記憶される。次いで、ＣＰＵ１２は、コンパイル処理の対象となる次のレコードが存在すれば（ステップ９０３でイエス(Yes)）、ＣＰＵ１２は、ハードディスク装置から次のレコードを読み込む（ステップ９０４）。この次のレコードの読み込みと並列的に、ＣＰＵ１２は、既に読み込んで、メモリ上に一時的に記憶されたレコードに基づいて、以下の処理を実行する。
なお、配列ＡＶＮｏは、レコード数と同じ数の値を収容するため、領域のサイズは予め知ることができる。その一方、配列ＡＶＬは、項目値の種類と同じ数の値を収容すればよい。たとえば、全てのレコードが異なる項目値をもっていれば、配列ＡＶＬは、レコード数と同じ数の項目値を収容できるようなサイズとなり、これが、配列ＡＶＬの予想される最大サイズである。したがって、本例では、配列ＡＶＬの領域は、レコード数と同じ数の項目値を収容できるような大きさとする。
【００７６】
また、バリューマップおよびＲｅｃＮｏＬｉｓｔは、リンクリストである。このリンクリストについて以下に説明する。一般に、リンクリストは、図１１（Ａ）に示すように、リンクリストは、値（たとえば、符号１１０１参照）と、次のノードを示すネクストポインタ（たとえば、符号１１０２参照）とを含むノード（たとえば、符号１１１０、１１１１参照）を含む、ノードの集合体である。図１１（Ａ）の例では、リンクリストにより、値「Ａ」、「Ｂ」および「Ｃ」が格納されることがあらわされる。上記リンクリストは、１つの値について１つのネクストポインタがあるため、メモリの使用効率が良くないという問題点がある。そこで、１つのノードに複数の値を格納するために、ブロックリンクリストが利用される。
【００７７】
図１１（Ｂ）はブロックリンクリストの例である。図１１（Ｂ）の例では、１つのノードに３つの値（「Ａ」、「Ｂ」、「Ｃ」、および、「Ｄ」、「Ｅ」、「Ｆ」）が格納されている。本実施の形態では、バリューマップ、および、ＲｅｃＮｏＬｉｓｔとして、図１１（Ｂ）に示す形式のブロックリンクリストを使用している。たとえば、バリューマップのノードは、後述する値番号と、ネクストポインタとを含む。バリューマップのノードに、値番号、項目値およびネクストポインタを含むように構成することも可能である。しかしながら、項目値は、値番号に基づいて配列ＡＶＬを参照することにより取得できるため、本例においては、値番号およびネクストポインタのみを含むようにしている。
【００７８】
また、本実施の形態において、バリューマップは、複数のエントリーを有し、エントリーごとに、項目値の範囲が割り当てられている。図１２（Ａ）に示すように、「０」〜「９」という範囲が割り当てられたエントリー、「１０」〜「１９」という範囲が割り当てられたエントリー、「１１」〜「１９」という範囲が割り当てられたエントリー、「２０」〜「２９」という範囲が割り当てられたエントリー、および、「３０」〜「３９」という範囲が割り当てられたエントリーを有している。しかしながら、上記値の範囲は一例である。好ましい値の範囲の割り当てについては後述する。
【００７９】
図９の処理の説明に戻ると、ＣＰＵ１２は、処理対象とする項目を決定する（ステップ９０５）。上述したように、年齢の項目を処理対象としたときを具体例として説明を進める。ＣＰＵ１２は、「全行数」の値をインクリメントし（ステップ９０６）、次いで、バリューマップにおいて、レコード中、処理対象の項目の項目値が属する範囲にノードが存在するか否かを判断する（ステップ９０７）。図１２（Ａ）、（Ｂ）は、初期的な配列が生成された状態を示す図である。図１２（Ａ）、（Ｂ）に示すように、この例では、バリューマップは、項目値の範囲のそれぞれに関連してブロックリンクリストが生成されるようになっている。項目値の範囲は、「０〜９」、「１０〜１９」、「２０〜２９」、「３０〜３９」としている。実際には、値の最高値はわからないため、さらに、「３９以上」という値の範囲に関連したブロックリンクリストが生成可能とするのが望ましい。
【００８０】
図１３（Ａ）、（Ｂ）は、レコード番号「０」のレコードについての処理を説明する図である。レコード番号「０」のレコード中、年齢という項目の項目値は「１８」である。したがって、「１０〜１９」という範囲が特定される（矢印１３０１参照）。図１３（Ｂ）の例では、上記特定された範囲に関連付けられたブロックリンクリストのノードは存在しないため（ステップ９０８でノー(No)）、ＣＰＵ１２は、バリューマップにおいて、その範囲に関連付けて先頭に、メモリ中、値番号として、「０」を含むノードを生成する（ステップ９０９、図１３（Ｂ）の符号１３０２参照）。バリューマップにおける値番号とは、初期値から昇順であたえられる番号である。なお、本実施の形態においては、値番号は、初期値が「０」で、その後、値が「１」ずつ増加するようになっており、結果としてその項目値が最初に出現するレコード番号に一致している。
【００８１】
また、図１３（Ｂ）において、ノードを「０（１８）」と表記している。これは、値番号が「０」でかつ対応する項目値が「１８」であることを示しているが、実際にノードに格納されるのは、値番号だけである。図１４（Ｂ）以降においても同様である。
【００８２】
次いで、ＣＰＵ１２は、配列ＡＶＮｏ中、レコード番号に対応する位置に、値番号を格納する。また、ＣＰＵ１２は、配列ＡＶＬに項目値を格納する。この配列ＡＶＬへの項目値の格納は、値の出現順となる。つまり、配列の先頭から値が出現するたびに、順次、項目値が格納される。上述したように、値番号は、初期値（本実施の形態においては「０」）から昇順（本実施の形態においては、１ずつ増分する）で与えられる値であるため、配列ＡＶＬにおいて、値番号に示す格納位置番号に格納された項目値を読み出すことで、値番号に関連した項目値を取得することができる。
【００８３】
さらに、ＣＰＵ１２は、リンクリストＲｅｃＮｏＬｉｓｔ中、配列ＡＶＬの値の格納位置と同じ位置に、レコード番号を含むノードが生成される（以上、ステップ１００４）。
【００８４】
図１３（Ｂ）の例においては、値番号「０」が、配列ＡＶＮｏ中、レコード番号「０」に相当する位置に格納され（符号１３０３参照）、項目値「１８」が、配列ＡＶＬ中、先頭（格納位置番号＝０）に格納される（符号１３０４参照）。また、リンクリストＲｅｃＮｏＬｉｓｔ中、格納位置番号「０」の位置に、レコード番号「０」を含むノードが生成される（符号１３０５参照）。
【００８５】
ステップ１００４の処理の後、ＣＰＵ１２は、「値の種類」の値をインクリメントする（ステップ１００５）。本実施の形態においては、ＣＰＵ１２は、次いで、同じレコードにおいて、未処理の他の項目があるか否かを判断し（ステップ１００６）、未処理の他の項目が存在する場合には（ステップ１００６でイエス(Yes)）、ステップ９０４に戻り、他の項目（図１３の例では、身長など）について、ステップ９０４以降の処理を実行する。
【００８６】
同じレコードにおいて他の項目について処理が終了していれば（ステップ１００６でノー(No)）、ＣＰＵ１２は、未処理のレコードが存在する否かを判断する（ステップ１００７）。
【００８７】
図１４（Ａ）、（Ｂ）は、図１３（Ａ）、（Ｂ）の処理対象のレコードの次のレコード（レコード番号「１」）に関する処理を説明する図である。図１４（Ａ）、（Ｂ）の例も、図１３（Ａ）、（Ｂ）の例と同様に、ステップ９０８でノー(No)と判断され、バリューマップにおいて、所定の範囲（「２０〜２９」の範囲）に関連付けて、値番号「１」が格納される（ステップ９０９）。また、配列ＡＶＮｏ中、レコード番号「１」に対応する位置に、値番号「１」が格納され、かつ、配列ＡＶＬの次の位置（つまり格納位置番号「１」の位置）に項目値「２１」を格納する。また、リンクリストＲｅｃＮｏＬｉｓｔ中、配列ＡＶＬの値の格納位置と同じ位置に、レコード番号「１」を含むノードが生成される（以上、ステップ１００４）。新たな項目値「２１」が出現しているため、「値の種類」の値がインクリメントされる（ステップ１００５）。
【００８８】
図１５（Ａ）、（Ｂ）は、レコード番号「５」のレコードが処理対象である場合の処理を説明する図である。この例では、項目値「２０」が属する範囲（「２０〜２９」の範囲）に既にノードが存在するため、ステップ９０８でイエス(Yes)と判断される。この場合、ＣＰＵ１２は、バリューマップにおいて当該範囲のノードに関して、処理対象のレコードと、同じ項目値に関するノードが存在するか否かを判断する（ステップ１００１）。図１０においては、「同一の項目値が存在」と記載したが、実際にはＣＰＵ１２は、バリューマップ中、項目値が属する範囲のノードに格納された値番号に基づいて、配列ＡＶＬ中、当該値番号が示す位置の項目値を特定することで、同一の項目値の有無を判断することができる。
【００８９】
図１５（Ｂ）の例では、ステップ１００１でノー(No)と判断される。そこで、ＣＰＵ１２は、ノードの挿入位置を特定する（ステップ１００２）。より詳細には、ある範囲のノード群は、配列ＡＶＬ中、その値番号が示す位置の項目値が昇順になるように並べられている。図１５（Ｂ）の例では、値番号「５」に関連する項目値は「２０」であり、既にバリューマップに格納されたノードの値番号のそれぞれに関連する項目値「２１」、「２４」、「２８」より小さい。そこで、ノードの挿入位置は先頭と判断される。
【００９０】
そこで、ＣＰＵ１２は、先頭位置に、値番号「５」を含むノードを生成する（ステップ１００３）。なお、このノードにおいては、項目値が次に大きいノード（値番号「１」を格納したノード）へのネクストポインタが格納される。
【００９１】
次いで、配列ＡＶＮｏ中、レコード番号「５」に対応する位置に、値番号「５」が格納されるとともに、配列ＡＶＬ中、格納位置番号「５」の位置に、項目値「２０」が格納される。また、リンクリストＲｅｃＮｏＬｉｓｔ中、配列ＡＶＬの値の格納位置と同じ位置に、レコード番号「５」を含むノードが生成される（以上、ステップ１００４、図１５（Ｂ）の符号１５０１参照）。その後、新たな項目値が追加されているため、「値の種類」の値がインクリメントされる（ステップ１００５）。
【００９２】
図１６（Ａ）、（Ｂ）は、レコード番号「６」のレコードが処理対象である場合の処理を説明する図である。この例では、項目値「１６」が属する範囲（「１０〜１９」の範囲）に既にノードが存在するため、ステップ９０８でイエス(Yes)と判断される。次いで、ＣＰＵ１２は、バリューマップにおいて当該範囲のノードに関して、処理対象のレコードと、同じ項目値に関するノードが存在するか否かを判断する（ステップ１００１）。図１６（Ｂ）の例では、既に、項目値「１６」に関するノードは存在する（符号１６０１参照）。したがって、ステップ１００１でイエス(Yes)と判断される。また、バリューマップ中、項目値「１６」に関するノードの値番号は「３」であることがわかる。バリューマップに、項目値に関するノードが既に存在すれば、新たにノードを生成する必要はない。同様に、配列ＡＶＬにも既に同一の項目値が格納されているため、配列ＡＶＬへの値の格納も実行されない。
【００９３】
ＣＰＵ１２は、配列ＡＶＮｏ中、レコード番号「６」に対応する位置に、値番号「３」を格納する。また、ＣＰＵ１２は、リンクリストＲｅｃＮｏＬｉｓｔ中、配列ＡＶＬにおいてレコード中の項目値が格納されている位置（図１６（Ｂ）の例では、格納位置番号「３」の位置）と同じ位置に、レコード番号「６」を含むノードを生成する（ステップ１００８、および、図１６（Ｂ）の符号１６０２参照）。また、この場合には、新たな項目値が出現されていないため、「値の種類」の値はインクリメントされない。
【００９４】
このような処理を、処理対象となる全てのレコードについて実行することにより、図１７（Ｂ）に示すような、配列ＡＶＮｏ、ＡＶＬ、および、リンクリストＲｅｃＮｏＬｉｓｔおよびバリューリストを生成することができる。
【００９５】
本実施の形態においては、ハードディスク装置１８に記憶された従来の表形式データが、図２（Ａ）に示すように、レコードごとに各項目の値が連続して記憶されている場合について説明した。本発明にかかるコンパイル処理はこれに限定されず、図２（Ｂ）に示すように、項目ごとに、各レコードの項目値が連続して記憶されているような表形式データにも適用することができる。この場合には、項目ごとの、全てのレコードについて情報ブロックを生成する処理を繰り返し実行すればよい。この場合にも、特定の項目についてあるレコードの項目値について、配列ＡＶＮｏ、ＡＶＬ、および、リンクリストへ値を格納する処理を実行するのに並列して、当該同じ項目について次のレコードの項目値のハードディスク装置１８からの読み出し処理を実行することができる。
【００９６】
配列ＡＶＮｏおよびＡＶＬを生成することで、レコード番号、ＡＶＮｏの値、および、ＡＶＬの項目値という順でたどっていくことにより、レコード番号に関連する項目値を特定することは可能である。すなわち、配列ＡＶＮｏおよびＡＶＬを生成すれば、これら配列に基づいて、レコードごとに、各項目の項目値が配置されたようなビューを作成し、表示装置２６に表示することもできる。しかしながら、本実施の形態においては、後に、検索、集計、ソート、データ更新の処理を実行する。したがって、これらの処理をより高速に実現するために、配列ＶＯｒｄおよびＶＩｄｘを生成する。
【００９７】
［配列ＶＯｒｄおよびＶＩｄｘの生成］
図１８は、本実施の形態にかかる配列ＶＯｒｄの生成処理を示すフローチャートである。図１８に示すように、ＣＰＵ１２は、メモリ中に配列ＶＯｒｄのための領域を確保する（ステップ１８０１）。なお、配列ＶＯｒｄは、配列ＡＶＬの項目値の数と同じだけの要素を格納できるサイズを有する。
【００９８】
次いで、ＣＰＵ１２は、バリューマップ中、もっとも若いノードの値番号を取り出す（ステップ１８０２）。図１７の例では、ＣＰＵ１２は、バリューマップ中、範囲が「１０代（１０〜１９）」の先頭のノードの値番号「３」を取り出す（図１９の符号１９０１参照）。ＣＰＵ１２は、配列ＶＯｒｄ中、取り出された値番号が示す位置に、ＶＯｒｄの格納値を格納する（ステップ１８０３）。図１９の例では、配列ＶＯｒｄ中、値番号「３」の位置に格納値「０」が格納される。
【００９９】
全てのノードについて処理が終了していなければ（ステップ１８０４でノー(No)）、ＣＰＵ１２は、ＶＯｒｄの格納値をインクリメントし（ステップ１８０５）、かつ、バリューマップ中、先に処理対象となったノードのネクストポインタを参照して、次のノードを特定し、その値番号を取得する（ステップ１８０６）。その後、ステップ１８０３に戻る。
【０１００】
このような処理を繰り返すことにより、図２０（Ａ）〜（Ｇ）に示すように、配列ＶＯｒｄに格納値が格納されていく。
【０１０１】
次に、配列ＶＩｄｘの生成について説明する。図２１は、本実施の形態にかかる配列ＶＩｄｘの生成処理を示すフローチャートである。図２１に示すように、ＣＰＵ１２は、メモリ中に配列ＶＩｄｘのための領域を確保し（ステップ２１０１）、値の格納位置を示すための格納位置番号を「０」に初期化する（ステップ２１０２）。配列ＶＩｄｘも、配列ＡＶＬの項目値の数と同じだけの要素を格納できるサイズを有する。
【０１０２】
次いで、ＣＰＵ１２は、もっとも若いノードの値番号を取り出す（ステップ２１０３）。図１７の例では、ＣＰＵ１２は、バリューマップ中、範囲が「１０代（１０〜１９）」の先頭のノードの値番号「３」を取り出す（図２２の符号２２０１参照）。ＣＰＵ１２は、配列ＶＩｄｘ中、格納位置番号が示す位置に、値番号を格納する（ステップ２１０４）。図２２の例では、配列ＶＯｒｄ中、格納位置番号「０」の位置に、値番号「３」が格納される。
【０１０３】
全てのノードについて処理が終了していなければ（ステップ２１０５でノー(No)）、ＣＰＵ１２は、ＶＩｄｘの格納位置番号をインクリメントし（ステップ２１０６）、かつ、バリューマップ中、先に処理対象となったノードのネクストポインタを参照して、次のノードを特定し、その値番号を取得する（ステップ２１０７）。その後、ステップ２１０４に戻る。
【０１０４】
このような処理を繰り返すことにより、図２３（Ａ）〜（Ｇ）に示すように、配列ＶＩｄｘに格納値が格納されていく。図２４（Ｂ）は、年齢という項目について従来の表形式データ（図２４（Ａ））を、本実施の形態にしたがった情報ブロックの形態で表した図である。
【０１０５】
図２４（Ｂ）は、年齢という項目についての情報ブロックを示しているが、他の項目（性別、身長、体重）についても、同様に、配列ＡＶＮｏ、ＶＯｒｄ、ＡＶＬ、ＶＩｄｘ、ＲｅｃＮｏＬｉｓｔおよびバリューマップが生成される。これら配列を利用した検索、ソートなどの各処理について以下に説明する。
【０１０６】
なお、ＣＰＵ１２は、配列ＶＯｒｄから配列ＶＩｄｘは即座に作ることができ、同様に、配列ＶＩｄｘから配列ＶＯｒｄは即座に作ることができる。配列ＶＯｒｄの値は、配列ＶＩｄｘの格納位置番号に相当し、配列ＶＯｒｄの格納位置番号は、配列ＶＩｄｘの値に対応する。図２０（Ｇ）に示す配列ＶＯｒｄと、図２３（Ｇ）に示す配列ＶＩｄｘを比較すると、配列ＶＯｒｄの格納位置番号「０」の値は「３」であり、その一方、配列ＶＩｄｘの格納位置番号「３」の値は「０」である。したがって、本実施の形態において、ＣＰＵ１２は、何れか一方を生成しておけば、一方の配列の値を、他方の配列の格納位置番号として、かつ、一方の配列の格納位置番号を、他方の配列の値として、他方の配列を生成することができる。
【０１０７】
［検索処理］
各項目について情報ブロックを構成する配列がメモリに記憶された状態で実行される検索処理について以下に説明する。本実施の形態では、バリューマップを利用した検索と、配列ＶＩｄｘを利用した検索とを考えることができる。
【０１０８】
まず、バリューマップを利用した検索について説明する。図２５は、本実施の形態においてバリューマップを利用した検索処理を示すフローチャートである。オペレータが入力装置２４を操作して、検索対象となる項目（キー項目）について、検索条件を入力する。たとえば、年齢という項目であれば、単一の年齢（項目値）や年齢の範囲（項目値の範囲）が検索条件となる。ＣＰＵ１２は、検索条件を受け付けると（ステップ２５０１）、バリューマップのノードを順次読み込み、当該ノードが、検索条件に合致する項目値に関連しているか否かを判断する。
【０１０９】
より詳細には、ＣＰＵ１２は、まず、バリューマップの先頭のノードから順にノードを読み込む。配列ＡＶＬ中、読み込まれたノード中の値番号が示す位置の値（項目値）が、検索条件に合致するまでノードは順に読み込まれる。検索条件に合致するノードが出現すると、ＣＰＵ１２は、当該ノード中の値番号をメモリに一時的に記憶する（ステップ２５０２）。
【０１１０】
次いで、ＣＰＵ１２は、ノード中のネクストポインタを参照して、次のノードを読み込む（ステップ２５０３）。ＣＰＵ１２は、読み込まれたノード中の値番号が示す位置の項目値が検索条件に合致するか否かを判断し（ステップ２５０４）、検索条件に合致する場合には、ＣＰＵ１２は、ノード中の値番号をメモリに一時的に記憶する（ステップ２５０５）。
【０１１１】
本実施の形態においては、「最小値＜（或いは≦）検索範囲＜（或いは≦）最大値」で表される検索範囲は、バリューマップにおいて連続して出現する。したがって、ひとたび検索条件に合致するノードが出現した後は、検索条件に合致しなくなるまで（ステップ２５０４でノー(No)）、ネクストポインタをたぐってノードを特定し、ノード中の値番号をメモリ中に一時的に記憶すればよい。
【０１１２】
バリューマップのノードの値番号の一時的な記憶が終了すると、ＣＰＵ１２は、メモリ中に記憶された値番号を取得し（ステップ２５０６）、ＲｅｃＮｏＬｉｓｔ中、値番号が示す位置の１以上のノードのそれぞれのレコード番号を取得し、当該レコード番号を、たとえば、メモリ中に生成した配列に格納する（ステップ２５０７）。この処理を、一時的に記憶された全ての値番号について実行する（ステップ２５０８）。ステップ２５０７で取得され、たとえば、配列に格納された一連のレコード番号が検索結果を示すものとなる。さらに、ＣＰＵ１２は、取得されたレコード番号に基づいて、各項目の情報ブロック中、レコード番号が示すＡＶＬの項目値を取り出して、取得されたレコード番号ごとに、各項目の項目値が整列された形式のビューを作成し、表示装置２６の画面上に表示する（ステップ２５０９）。
【０１１３】
図２６（Ａ）、（Ｂ）を参照して、年齢の項目について、「１８〜２２」という検索条件が与えられた場合の処理について説明する。図２６（Ｂ）において、ＣＰＵ１２がバリューマップのノードを順次参照すると、値番号「０」を含むノード（符号２６０１参照）が、項目値「１８」に関するものであることがわかる。最終的には、値番号「０」を含むノード、値番号「５」を含むノード、および、値番号「１」を含むノードが、検索条件に合致するため、（０，５，１）という値番号がメモリに一時的に記憶される。
【０１１４】
ＣＰＵ１２は、次いで、ＲｅｃＮｏＬｉｓｔ中、「０」の位置に格納されたノード中のレコード番号「０」、「９」を取り出す（図２７（Ｂ）参照）。その後、ＣＰＵ１２は、ＲｅｃＮｏＬｉｓｔ中、「５」の位置に格納されたノード中のレコード番号「５」と、「１」の位置に格納されたノード中のレコード番号「１」とを取り出す（図２７（Ｂ）参照）。これにより、検索結果として、（０，９，５，１）という複数のレコード番号を取得することができる。
【０１１５】
次に、配列ＶＩｄｘを利用した検索について説明する。図２８は、本実施の形態において配列ＶＩｄｘを利用した検索処理を示すフローチャートである。図２５の処理と同様にＣＰＵ１２が検索条件を受け付けると（ステップ２８０１）、ＣＰＵ１２は、配列ＶＩｄｘを参照して、ＶＩｄｘに格納された値番号が示す位置のＡＶＬの値（項目値）が検索条件に合致するような、ＶＩｄｘの要素の範囲を特定し、当該範囲に含まれる値番号をメモリ中に一時的に記憶する（ステップ２８０２）。配列ＶＩｄｘの値の参照先は昇順となっている（図２９（Ｂ）参照）。つまり、ＶＩｄｘの先頭（格納位置番号「０」）の要素（値番号）「３」が示す位置の、配列ＡＶＬの項目値は「１６」、次の位置（格納位置番号「１」の要素（値番号）「０」が示す位置の、配列ＡＶＬの項目値は「１８」である。以後、ＶＩｄｘの格納位置番号が大きくなるにしたがって、参照される配列ＡＶＬの項目値は大きくなっている。したがって、ステップ２８０２においては、いわゆるバイセクション法を利用して、ＶＩｄｘの要素の範囲を特定することで、処理を高速化することが可能である。
【０１１６】
次いで、ＣＰＵ１２は、メモリ中に記憶された値番号を取得し（ステップ２８０３）、ＲｅｃＮｏＬｉｓｔ中、値番号が示す位置の１以上のノードのそれぞれのレコード番号を取得し、当該レコード番号を、たとえば、メモリ中に生成した配列に格納する（ステップ２８０４）。この処理を、一時的に記憶された全ての値番号について実行する（ステップ２８０５）。ステップ２８０４で取得され、たとえば、配列に格納された一連のレコード番号が検索結果を示すものとなる。さらに、ＣＰＵ１２は、取得されたレコード番号に基づいて、各項目の情報ブロック中、レコード番号が示すＡＶＬの項目値を取り出して、取得されたレコード番号ごとに、各項目の項目値が整列された形式のビューを作成し、表示装置２６の画面上に表示する（ステップ２８０６）。
【０１１７】
図２９（Ａ）、（Ｂ）を参照して、年齢の項目について、「１８〜２２」という検索条件が与えられた場合の処理について説明する。図２９（Ｂ）において、検索条件に合致するＶＩｄｘの要素の範囲は、格納位置番号「１〜３」の範囲であると判断される。したがって、その範囲に含まれるＶＩｄｘの値番号（０，５，１）がメモリ中に一時的に記憶される。
【０１１８】
ＣＰＵ１２は、次いで、ＲｅｃＮｏＬｉｓｔ中、「０」の位置に格納されたノード中のレコード番号「０」、「９」を取り出す（図３０（Ｂ）参照）。その後、ＣＰＵ１２は、ＲｅｃＮｏＬｉｓｔ中、「５」の位置に格納されたノード中のレコード番号「５」と、「１」の位置に格納されたノード中のレコード番号「１」とを取り出す（図３０（Ｂ）参照）。これにより、検索結果として、（０，９，５，１）という複数のレコード番号を取得することができる。
【０１１９】
このようにして、本実施の形態にかかる情報ブロックを利用した検索を実現することができる。
【０１２０】
［ソート処理（単一のソートキー）］
次に、本実施の形態にかかる情報ブロックを利用してソート処理について以下に説明する。まず、レコードの全体集合を対象に単一の項目（ソートキー）でソートする場合に実行される処理について説明する。本実施の形態では、バリューマップを利用したソートと、配列ＶＩｄｘを利用したソートとを考えることができる。
【０１２１】
まず、バリューマップを使用したソートについて説明する。図３１（Ａ）は、本実施の形態においてバリューマップを利用したソート処理を示すフローチャートである。オペレータが入力装置２４を操作して、ソートキーを入力すると、ＣＰＵ１２は、当該ソートキーを受け付ける（ステップ３１０１）。ＣＰＵ１２は、バリューマップのノードを読み込み、各ノードに含まれる値番号を参照し、ＲｅｃＮｏＬｉｓｔ中、当該値番号の位置にあるノードに含まれるレコード番号を取得して、これをメモリ中に一時的に記憶する（ステップ３１０２）。ＣＰＵ１２は、上記ステップ３１０２の処理を先頭のノードから開始し、ノード中にネクストポインタがある場合には、当該ネクストポインタをたぐって次のノードを特定し、同様の処理を実行する（ステップ３１０３、３１０４参照）。
【０１２２】
図３２に示す例では、まず、ＣＰＵ１２は、バリューマップの先頭のノード中の値番号「３」に基づいて、ＲｅｃＮｏＬｉｓｔ中、値番号「３」の位置のノードを参照する。値番号「３」の位置の２つのノードには、それぞれ、レコード番号「３」および「６」が含まれるため、ＣＰＵ１２は、メモリ中に（３，６）を一時的に記憶する。全てのバリューマップのノードの値番号にしたがって、ＲｅｃＮｏＬｉｓｔ中のノードのレコード番号を取得すると、メモリ中には、（３，６，０，９，５，１，２，８，４，７）という順序でレコード番号が一時的に記憶される。
【０１２３】
ＣＰＵ１２は、取得されたレコード番号の順に、各項目の情報ブロック中、レコード番号が示すＡＶＬの項目値を取り出して、取得されたレコード番号ごとに、各項目の項目値が整列された形式のビューを作成し、表示装置２６の画面上に表示する（ステップ３１０５）。これにより、ソートキーでソートされたビューを取得することができる。図３２の例では、（３，６，０，９，５，１，２，８，４，７）というレコード番号の順序で、ＡＶＬの項目値を取り出して、ビューを作成すればよい。
【０１２４】
次に、配列ＶＩｄｘを利用したソートについて説明する。図３１（Ｂ）は、本実施の形態において配列ＶＩｄｘを利用したソート処理を示すフローチャートである。図３１（Ａ）の例と同様に、ＣＰＵ１２は、ソートキーを受け付けると（ステップ３１１１）、ＣＰＵ１２は、配列ＶＩｄｘの要素（値番号）を参照し、ＲｅｃＮｏＬｉｓｔ中、当該値番号の位置にあるノードに含まれるレコード番号を取得して、これをメモリ中に一時的に記憶する（ステップ３１１２）。ＣＰＵ１２は、上記ステップ３１１２の処理を、配列ＶＩｄｘの先頭（格納位置番号「０」）の要素から開始し、配列ＶＩｄｘの全ての要素について処理が施されるまで、処理を繰り返す（ステップ３１１３、３１１４参照）。次いで、実行するビュー作成処理（ステップ３１１５）は、図３１（Ａ）のステップ３１０５と同様である。
【０１２５】
図３３に示す例では、まず、ＣＰＵ１２は、配列ＶＩｄｘの先頭（格納位置番号「０」）の要素（値番号）「３」に基づいて、ＲｅｃＮｏＬｉｓｔ中、値番号「３」の位置のノードを参照する。値番号「３」の位置の２つのノードには、それぞれ、レコード番号「３」および「６」が含まれるため、ＣＰＵ１２は、メモリ中に（３，６）を一時的に記憶する。全ての配列ＶＩｄｘ中の要素にしたがって、ＲｅｃＮｏＬｉｓｔ中のノードのレコード番号を取得すると、メモリ中には、（３，６，０，９，５，１，２，８，４，７）という順序でレコード番号が一時的に記憶される。
【０１２６】
このように、全てのレコードを対象として単一のソートキーでソートする場合には、バリューマップ或いは配列ＶＩｄｘを利用することで、非常に簡単にソートされたビューを得ることができる。
【０１２７】
［ソート処理（複数のソートキー）］
次に、ソートキーが複数の場合の処理について説明する。本実施の形態においては、優先度の大きなソートキーおよび優先度の小さなソートキーをオペレータが入力し、これにもとづいて、システムのＣＰＵ１２により処理が実行される。
【０１２８】
図３４および図３５は、複数のソートキーが与えられた場合のソート処理を示すフローチャートである。オペレータが入力装置２４を操作して、優先度の低いソートキーおよび優先度の高いソートキーを入力し、その情報をＣＰＵ１２が受け付けると（ステップ３４０１）、ＣＰＵ１２は、優先度の低いソートキーについて、ソートされたレコード番号のリストを取得する（ステップ３４０２）。このレコード番号のリストは、上記ソートキーとなった項目に関して、図３１（Ａ）のステップ３１０２〜３１０４の処理、或いは、図３１（Ｂ）のステップ３１１２〜３１１４の処理を実行すればよい。
【０１２９】
たとえば、論理的に表形式として図３６（Ａ）で示されるような例を考えると、詳細な説明は省略するが、図３１（Ａ）のステップ３１０２〜３１０４の処理或いは図３１（Ｂ）のステップ３１１２〜３１１４の処理を実行することにより、図３６（Ｂ）に示すようなレコード番号の配列ＯｒｄＳｅｔを、メモリ上に生成することができる。なお、配列ＯｒｄＳｅｔは、ソートキーによるソート順が反映されたレコード番号の配列であるため、順序集合配列ということができる。
【０１３０】
以下、図３４のステップ３４０３以降のステップは、優先度の高いソートキーに関する処理となる。ＣＰＵ１２は、優先度の高いソートキーの情報ブロック中の配列ＡＶＬと同一サイズのカウント配列Ｃｏｕｎｔの領域をメモリ中に確保し、カウント配列のそれぞれの要素に初期値「０」を格納する（ステップ３４０３）。また、ＣＰＵ１２は、配列ＯｒｄＳｅｔの値の取得位置を特定するための格納位置番号を「０」に初期化する（ステップ３４０４）。
【０１３１】
次いで、ＣＰＵ１２は、配列ＯｒｄＳｅｔ中、格納位置番号が示す位置のレコード番号を取り出し、ソートキーの情報ブロックの配列ＡＶＮｏ中、当該レコード番号が示す位置の値を特定し、さらに、配列ＶＯｒｄ中、先に特定された配列ＡＶＮｏの値が示す位置の値を取得する。ＣＰＵ１２は、カウント配列中、取得されたＶＯｒｄの値の位置の値をインクリメントする（ステップ３４０５）。ＣＰＵ１２は、配列ＯｒｄＳｅｔの全ての値について、ステップ３４０５の処理を実行する（ステップ３４０６、３４０７参照）。
【０１３２】
図３７（Ａ）に示すように、上記例において、配列ＯｒｄＳｅｔ中、格納位置番号「０」の値（レコード番号）は「２」である。この値に基づいて、配列ＡＶＮｏおよび配列ＶＯｒｄの値をたどっていくと、配列ＶＯｒｄの値「４」を得ることができる。そこで、カウント配列において、格納位置番号「４」の位置の値を、「０」から「１」に増大させる。配列ＯｒｄＳｅｔ中の他の値（レコード番号）についても同様の処理を実行することにより、図３７（Ｂ）に示すようなカウント配列を得ることができる。
【０１３３】
カウント配列が完成すると、ＣＰＵ１２は、カウント配列の値を累計数化して累計数配列Ａｇｇｒをメモリ中に生成する（ステップ３４０８）。この累計数配列Ａｇｇｒの値は、その値が格納された格納位置番号より前の、全ての格納位置番号の位置のカウント配列のカウント値の総和に相当する。
【０１３４】
図３５に示すように、ＣＰＵ１２は、配列ＯｒｄＳｅｔと同一サイズの第２の順序集合配列ＯｒｄＳｅｔ２をメモリ中に生成する（ステップ３５０１）。また、ＣＰＵ１２は、配列ＯｒｄＳｅｔの値の取得位置を特定するための格納位置番号を「０」に初期化する（ステップ３５０２）。
【０１３５】
ＣＰＵ１２は、配列ＯｒｄＳｅｔ中、格納位置番号が示す位置の値を取得し、これを一時的に記憶しておく（ステップ３５０３）。次いで、ＣＰＵ１２は、配列ＡＶＮｏ中、ステップ３５０３で取得した配列ＯｒｄＳｅｔの値の示す位置の値を取得し、その後、配列ＶＯｒｄ中、取得された配列ＡＶＮｏの値が示す位置の値を取得する。さらに、ＣＰＵ１２は、配列Ａｇｇｒ中、取得された配列ＶＯｒｄの値の示す位置の値（累計数）を取得する（ステップ３５０４）。
【０１３６】
ＣＰＵ１２は、第２の順序集合配列ＯｒｄＳｅｔ２中、ステップ３５０４で取得された配列Ａｇｇｒの値（累計数）が示す位置に、ステップ３５０３で取得され、一時的に記憶された、配列ＯｒｄＳｅｔの値を格納する（ステップ３５０５）。また、ＣＰＵ１２は、ステップ３５０４で値（累計数）を取得した、Ａｇｇｒ配列中の値をインクリメントする（ステップ３５０６）。ＣＰＵ１２は、ステップ３５０３〜ステップ３５０６に示す処理を、配列ＯｒｄＳｅｔに格納された全ての値について実行する（ステップ３５０７、３５０８参照）。
【０１３７】
図３９（Ａ）に示すように、配列ＯｒｄＳｅｔの格納位置番号「０」の値は「２」であり、この値が一時的に記憶される（ステップ３５０３参照）。また、配列ＯｒｄＳｅｔの値に基づいて、配列ＡＶＮｏ、ＶＯｒｄを順にたぐっていくと、Ａｇｇｒ配列中、格納位置番号「４」の値「６」が取得される。したがって、第２の順序集合配列ＯｒｄＳｅｔ２中、格納位置番号「６」の位置に、一時的に記憶された配列ＯｒｄＳｅｔの値「２」が格納される。また、配列Ａｇｇｒ中、格納位置番号「４」の値「６」がインクリメントされて「７」となる。図３９（Ｂ）、図４０（Ａ）、図４０（Ｂ）は、それぞれ、配列ＯｒｄＳｅｔの格納位置番号「１」、「２」および「３」の場合の、図３５のステップ３５０３〜ステップ３５０６に示す処理を具体的に示す図である。全ては図示しないが、同様の処理を繰り返すことにより、図４１に示すような、第２の順序集合配列ＯｒｄＳｅｔ２を得ることができる。
【０１３８】
ＣＰＵ１２は、第２の順序集合配列ＯｒｄＳｅｔ２が完成すると、当該ＯｒｄＳｅｔ２に格納されたレコード番号の順に、各項目における情報ブロックのＡＶＬの項目値と取り出して、ＯｒｄＳｅｔ２に格納されたレコード番号の順に、各項目の項目値が整列された形式期のビューを作成し、表示装置２６の画面上に表示する（ステップ３５０９）。このようにして、複数のソートキーでソートされたビューを取得することができる。図４２（Ａ）に示すように表される表を、年齢の優先度を高くして、体重および年齢をソートキーとして、図３４および図３５に示す処理を実行すると、図４２（Ｂ）に示すビューを得ることが可能である。
【０１３９】
［部分集合の場合］
レコードの全体集合ではなく部分集合を対象としたソート処理も実現可能である。たとえば、部分集合をソートする場合には、部分集合に該当するレコードに「１」、それ以外のレコードに「０」を与えたビットマップを作成しておき、ソート後のレコード番号を得る際に、ビットマップを参照して、当該レコード番号が部分集合に属する場合に、当該レコード番号を、結果を示す配列に格納すればよい。図３２（Ｂ）或いは図３３（Ｂ）で示した例において、年齢という項目が「２１以下」であるようなレコード番号からなる部分集合を対象としてソートを実行することを考える。
【０１４０】
ここでは、ＣＰＵ１２は、検索処理（図２５参照）などを実行して、レコード番号ごとに部分集合に該当する場合には「１」、それ以外の場合には「０」が格納されたビットマップをメモリ上に生成する（図４３（Ａ）の符号４３０１参照）。ＣＰＵ１２は、ソートされたレコード番号の配列ＯｒｄＳｅｔの値（レコード番号）を参照して、ビットマップ中、ＯｒｄＳｅｔの値が示す位置のビットが「１」であれば、当該ＯｒｄＳｅｔの値（レコード番号）を、最終的な配列に格納する。このようにして、図４３（Ｂ）に示すように、最終的な配列ＯｒｄＳｅｔを得ることができる。
【０１４１】
また、ソート対象となるＯｒｄＳｅｔが既に部分集合となっている場合は、複数のソートキーのソート処理で説明した方法を用いる事もできる。
【０１４２】
［データ追加処理］
ウェブサーバにおいて、アクセスログを収集するためには、リアルタイムで、多数のレコードが追加される。本実施の形態は、上述したコンパイル処理の一部を実行することにより、レコードの追加を高速に実現することが可能である。実際には、レコードの追加は、Ｎ個のレコードのうち、（Ｎ−１）個のコンパイル処理が終了した後に、Ｎ番目のレコードのコンパイル処理を実行することと同様である。つまり、最後の１つのレコードについてのコンパイル処理を独立して実行すれば、これがデータ追加処理となる。
【０１４３】
図４４は、データ追加の際の処理を示すフローチャートである。図４４において、ステップ４４０１は、図９のステップ９０５に、ステップ４４０２〜４４０５は、それぞれ、図９のステップ９０６〜９０９に対応する。また、ステップ４４０６〜ステップ４４１１は、それぞれ、図１０のステップ１００１〜１００６に対応し、ステップ４４１２は、図１０のステップ１００８に対応する。このように、データ追加処理は、単一のレコードについて、項目ごとに、バリューマップのノードを生成すればよい。これにより、高速にレコードを追加し、当該レコードが追加された状態の配列ＡＶＮｏ、ＡＶＬ、バリューマップを得ることが可能となる。
【０１４４】
なお、レコードが追加されると、検索処理やソート処理にて参照され得る配列ＶＯｒｄおよびＶＩｄｘは、再度、図１８および図２１に示す処理を実行することで、再度生成される必要がある。しかしながら、上述したように、頻繁にレコードが追加される場合には、レコードの追加に伴って、図４４に示すデータ追加処理を実行し、上記配列ＡＶＮｏ、ＡＶＬ、バリューマップを最新の状態にすることができる。これにより、頻繁にレコードが追加された場合にも、レコードが追加された状態でビューを作成し、表示装置２６の画面上に作成したビューを表示することが可能となる。また、図１８や図２１に示す処理は、適当な数のレコードの追加が終了した後に、バッチ処理にて実行し、これにより、新たに配列ＶＯｒｄおよびＶＩｄｘを生成するように構成すれば良い。
【０１４５】
［第２のコンパイル処理］
本実施の形態においては、情報ブロックには、配列ＡＶＮｏ、ＶＯｒｄ、ＡＶＬおよびＶＩｄｘ、リンクリストＲｅｃＮｏＬｉｓｔおよびバリューマップが含まれる。このような本実施の形態にかかる情報ブロックの配列に基づいて、特許文献１（特許第３５８１８３１号）に記載された情報ブロック、特に、昇順の値リストＶＬを有する情報ブロックを得ることが可能である。本実施の形態にかかる情報ブロックに基づいて、昇順の値リストＶＬおよび値リストへのポインタ配列ＶＮｏを得る処理を、本明細書において第２のコンパイル処理と称する。
【０１４６】
第２のコンパイル処理においては、配列ＡＶＮｏに基づく配列ＶＮｏへの変換処理と、配列ＡＶＬに基づく配列ＶＬへの変換処理とが含まれる。図４５は、第２のコンパイル処理におけるＶＮｏへの変換処理を示すフローチャートである。図４５に示すように、ＣＰＵ１２は、配列ＡＶＮｏと同一サイズの配列ＶＮｏをメモリ中に生成する（ステップ４５０１）。図７（Ｂ）や図２４（Ｂ）に示した情報ブロックを例とすると、ＣＰＵ１２は、ＡＶＮｏと同じサイズ、つまり、１０個の値を格納することができるサイズの配列が、メモリ中に生成される。
【０１４７】
ＣＰＵ１２は、配列ＡＶＮｏの値の位置を指定するための格納位置番号を「０」に初期化し（ステップ４５０２）、配列ＡＶＮｏ中、格納位置番号が示す位置の値を取得し、当該取得した値をメモリ中に一時的に記憶する（ステップ４５０３）。また、ＣＰＵ１２は、配列ＶＯｒｄ中、一時的に記憶されたＡＶＮｏの値が示す位置の値を取得する（ステップ４５０４）。次いで、ＣＰＵ１２は、配列ＶＮｏ中、格納位置番号が示す位置に、ステップ４５０４で取得したＶＯｒｄの値を格納する（ステップ４５０５）。ＣＰＵ１２は、配列ＡＶＮｏの全ての値について同様の処理を実行する（ステップ４５０６、４５０７参照）。図４６（Ａ）、（Ｂ）〜（Ｄ）は、それぞれ、図２４（Ｂ）に示す情報ブロックについて、格納位置番号「０」、「１」、「８」、「９」の場合の、ステップ４５０３〜４５０５の処理を説明する図である。
【０１４８】
図４７は、第２のコンパイル処理におけるＶＬへの変換処理を示すフローチャートである。図４７に示すように、ＣＰＵ１２は、配列ＡＶＬと同一サイズの配列ＶＬをメモリ中に生成する（ステップ４７０２）。図７（Ｂ）や図２４（Ｂ）の例では、ＡＶＬと同じサイズ、つまり、７個の値（項目値）を格納することができるサイズの配列が、メモリ中に生成される。
【０１４９】
ＣＰＵ１２は、配列ＡＶＬの値の位置を指定するための格納位置番号を「０」に初期化し（ステップ４７０２）、配列ＡＶＬ中、格納位置番号が示す位置の値を取得し、当該取得した値をメモリ中に一時的に記憶する（ステップ４７０３）。また、ＣＰＵ１２は、配列ＶＯｒｄ中、格納位置番号が示す位置の値を取得する（ステップ４７０４）。次いで、ＣＰＵ
１２は、配列ＶＬ中、ステップ４７０４で取得した配列ＶＯｒｄの値が示す位置に、ステップ４７０２で取得されメモリに一時的に記憶された配列ＡＶＮｏの値を格納する（ステップ４７０５）。図４８（Ａ）〜（Ｄ）は、それぞれ、図２４（Ｂ）に示す情報ブロックについて、格納位置番号「０」、「１」、「５」、「６」の場合の、ステップ４７０３〜４７０５の処理を説明する図である。
【０１５０】
図７（Ａ）、（Ｂ）、および、図８（Ａ）、（Ｂ）に示す情報ブロックのそれぞれについて、図４５および図４７に示す処理を実行することにより、図４９（Ａ）〜（Ｄ）に示すように、性別、年齢、身長および体重の項目のそれぞれについて、項目値が昇順に格納された値リストＶＬ、および、レコードの順番に、当該値リストの項目値を指定する番号（項目値番号）が格納されたポインタ配列ＶＮｏがメモリ中に生成される。たとえば、図４９（Ｂ）から理解できるように、レコード番号から、当該レコード番号が示す位置のポインタ配列ＶＮｏの値を特定し、かつ、値リストＶＬ中、ポインタ配列ＶＮｏの値が示す位置の項目値を取得する。これにより、レコード番号と、当該レコード番号と関連付けられた項目値との組を得ることでき、図６に示すような論理的な表（ビュー）を表示装置２６の画面上に表示することもできる。
【０１５１】
たとえば、レコードが頻繁に追加されるような状況下では、コンピュータシステムは、本実施の形態にかかる、配列ＡＶＮｏおよびＡＶＬを含む情報ブロック（「第１の情報ブロック」とも称する。）を生成し、レコードの追加にも高速に応答できるようにしておく。その一方、夜間などにバッチ処理により、昇順の値リストＶＬおよびポインタ配列ＶＮｏを有する情報ブロック（「第２の情報ブロック」とも称する。）を生成して、第２の情報ブロックを利用して、検索、集計、ジョインなどの情報処理を実行しても良い。
【０１５２】
［バリューマップ］
本実施の形態において、バリューマップは、それぞれ項目値の範囲が与えられた複数のエントリーを有する。各エントリーへの項目値の範囲の割り当てについて以下に説明する。本実施の形態においては、３２ビット整数を、対数分割して１６ビットの範囲に割り当てる。この場合には、それぞれの範囲の上界を、「Ｓ＾（ｎ／（Ｎ−１））」とする。
【０１５３】
つまり、それぞれの項目値の範囲（以下、「区間０」、「区間１」、・・・と称する。）は以下のように設定される。
【０１５４】
区間０：０〜Ｓ＾（０／（Ｎ−１））
区間１：Ｓ＾（０／（Ｎ−１））〜Ｓ＾（１／（Ｎ−１））
区間２：Ｓ＾（１／（Ｎ−１））〜Ｓ＾（２／（Ｎ−１））
：
区間（Ｎ−２）：Ｓ＾（Ｎ−３／（Ｎ−１））〜Ｓ＾（Ｎ−２／（Ｎ−１））
区間（Ｎ−１）：Ｓ＾（Ｎ−２／（Ｎ−１））〜Ｓ＾（Ｎ−１／（Ｎ−１））
項目値に正負があると考えると、一方の符号側については、１５ビットの範囲を割り当てることになる。
【０１５５】
以下、Ｓ＝１２８＝２＾７、Ｎ＝８＝２＾３という例を考える。
【０１５６】
この場合には、区間０〜区間７は、以下のように表される。
【０１５７】
区間０：０〜２＾０
区間１：２＾０〜２＾１
区間２：２＾１〜２＾２
：
区間６：２＾５〜２＾６
区間７：２＾６〜２＾７
Ｓ＝２＾３１（つまり、符号付きの３２ビット整数）の場合には、Ｎ＝２＾１５＝３２７６８とすればよい。
【０１５８】
浮動小数点の分割については、以下のように考える。
【０１５９】
正の数と負の数の側に分け、さらに、それぞれの側において、１を中心に絶対値が大きくなる方向と小さくなる方向のそれぞれを対数分割する。つまり、上記区間の考え方を、正の数で絶対値が１より小さい（但し０を含む）、正の数で絶対値が１以上、負の数で絶対値が１より小さい、負の数で絶対値が１以上の４つに適用すればよい。
【０１６０】
実際の処理においては、ＣＰＵ１２は、バリューマップをメモリ中に生成する際に、演算を実行して、区間ごとの項目値の範囲を算出して、エントリーごとに項目値の範囲を割り当てても良い。或いは、整数、小数のそれぞれ、考えられるビット数ごとに予め、項目値の範囲をテーブルとしてメモリ中に保持していても良い。
【０１６１】
［機能ブロック図］
図５０は、本実施の形態にかかるコンピュータシステムの機能ブロック図ある。図５０に示すように、コンピュータシステムは、それぞれ、コンパイルプログラム、検索プログラム、ソートプログラム、第２のコンパイルプログラムにより、コンパイル処理を実行するコンパイル処理部４００１、検索処理を実行する検索処理部５００２、ソート処理を実行するソート処理部５００３、および、第２のコンパイル処理を実行する第２のコンパイル処理部５００５として機能する。また、コンパイル処理部５００１は、データ追加処理を実行するデータ追加処理部５００４としても機能する。
【０１６２】
図５０に示すように、コンパイル処理部５００１は、ハードディスク装置１８から、従来の形態で記憶された表形式データを読み込み、図９および図１０に示す処理を実行して、配列ＡＶＮｏ、ＡＶＬおよびリンクリストをメモリ中に生成し、また、図１８および図２１に示す処理を実行して、配列ＶＯｒｄおよびＶＩｄｘをメモリ中に生成する。つまり、図５０に示すように、コンパイル処理部５００１は、従来の形態で記憶された表形式データ５０１０から第１の情報ブロック５０２０を生成して、メモリ中に格納する。
【０１６３】
検索処理部５００２は、メモリから第１の情報ブロック５０２０を読み出して、図２５に示す処理或いは図２８に示す処理を実行し、表形式のビューを生成して、表示装置２６に表示し、また、当該ビューをメモリなどに記憶する。また、ソート処理部は、メモリから第１の情報ブロック５０２０を読み出して、図３１（Ａ）或いは図３１（Ｂ）に示す処理を実行して、表形式のビューを生成して、表示装置２６に表示し、また、当該ビューをメモリなどに記憶する。
【０１６４】
コンパイル処理部がデータ追加部として機能するときには、メモリから第１の情報ブロックを読み出して、配列およびリンクリストを更新して、メモリに戻す。また、第２のコンパイル処理部５００５は、メモリから第１の情報ブロック５０２０を読み出して、第２の情報ブロック５０３０を生成して、メモリ中に格納する。
【０１６５】
［試験結果］
以下、本実施の形態にかかる情報処理方法を用いて、Ｍ件（Ｍ＝１０、１００、１０００、１００００、１０００００、１００００００、１０００００００）の異なる整数を読み込んだ（ＣＳＶインポート）ときの処理時間と、量販店などで入手可能な汎用のパーソナルコンピュータ用ＤＢで、同様に、異なる整数を読み込んだとき（比較例）の処理時間を比較した。なお、比較例においてはインデックス構築を行っていない。
【０１６６】
処理時間の算出のため、コンピュータは以下のような構成とした。
【０１６７】
ＣＰＵ：インテル社 Ｐｅｎｔｉｎｕｍ（登録商標）  ４
クロック：１．５９ＭＨｚ
ＲＡＭ：１ＧＢ
Ｌ１キャッシュ：８ＫＢ、４  ｗａｙｓ  ａｓｓｏｃｉａｔｉｖｅ、６４バイト ラインサイズ
Ｌ２キャッシュ：２５６バイト、８  ｗａｙｓ  ａｓｓｏｃｉａｔｉｖｅ、６４バイト ラインサイズ
図５１は、ＣＳＶインポートに要した時間を示す図であり、処理時間の単位はミリ秒である。本実施の形態にかかる情報処理方式によれば、実施的にインデックスが構築される。本実施の形態によれば、インデックス構築を含む手法であっても、たとえば、１，０００，０００個の整数をＣＳＶインポートするために、約２．６７秒しか要さない。これは、約２１．７２秒を要する比較例の８倍の速度である。
【０１６８】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【図面の簡単な説明】
【０１６９】
【図１】図１は、レコードごとに、各項目の値（項目値）を有するような形式のデータを表として示した図である。
【図２】図２（Ａ）、（Ｂ）は、それぞれ、従来の、表形式データの記憶装置への格納形態の例を示す図である。
【図３】図３（Ａ）、（Ｂ）は、従来の問題を解決するために、表形式データ中、年齢の項目について、メモリ中に値リストＶＬおよび値リストへのポインタ配列ＶＮｏを生成することで格納する技術の例を示す図である。
【図４】図４（Ａ）〜（Ｃ）は、図３に示す手法を用いて、図１に示す表を、項目ごとの値リストおよび値リストへのポインタ配列で表した図である。
【図５】図５は、本発明の実施の形態にかかる情報処理方法を実現するコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。
【図６】図６は、本実施の形態において例として用いる表形式データのテーブルを示す図である。
【図７】図７（Ａ）、（Ｂ）は、図６に示す表形式データを、本実施の形態にしたがって変換した配列を示す図である。
【図８】図８（Ａ）、（Ｂ）は、図６に示す表形式データを、本実施の形態にしたがって変換した配列を示す図である。
【図９】図９は、本実施の形態にかかるコンパイル処理を示すフローチャートである。
【図１０】図１０は、本実施の形態にかかるコンパイル処理を示すフローチャートである。
【図１１】図１１（Ａ）、（Ｂ）は、それぞれ、リンクリストを説明する図である。
【図１２】図１２（Ａ）、（Ｂ）は、コンパイル処理において、初期的な配列が生成された状態を示す図である。
【図１３】図１３（Ａ）、（Ｂ）は、レコード番号「０」のレコードについての処理を説明する図である。
【図１４】図１４（Ａ）、（Ｂ）は、レコード番号「１」のレコードについての処理を説明する図である。
【図１５】図１５（Ａ）、（Ｂ）は、レコード番号「５」のレコードについての処理を説明する図である。
【図１６】図１６（Ａ）、（Ｂ）は、レコード番号「６」のレコードについての処理を説明する図である。
【図１７】図１７（Ａ）、（Ｂ）は、コンパイル処理により、配列ＡＶＮｏ、ＡＶＬ、リンクリストＲｅｃＮｏＬｉｓｔおよびバリューマップが完成した状態を説明する図である。
【図１８】図１８は、本実施の形態にかかる配列ＶＯｒｄの生成処理を示すフローチャートである。
【図１９】図１９は、配列ＶＯｒｄの生成を説明する図である。
【図２０】図２０（Ａ）〜（Ｇ）は、それぞれ、配列ＶＯｒｄの生成を説明する図である。
【図２１】図２１は、本実施の形態にかかる配列ＶＩｄｘの生成処理を示すフローチャートである。
【図２２】図２２は、配列ＶＩｄｘの生成を説明する図である。
【図２３】図２３（Ａ）〜（Ｇ）は、それぞれ、配列ＶＩｄｘの生成を説明する図である。
【図２４】図２４（Ａ）、（Ｂ）は、コンパイル処理の結果を説明する図である。
【図２５】図２５は、本実施の形態においてバリューマップを利用した検索処理を示すフローチャートである。
【図２６】図２６（Ａ）、（Ｂ）は、バリューマップを利用した検索処理を説明する図である。
【図２７】図２７（Ａ）、（Ｂ）は、バリューマップを利用した検索処理を説明する図である。
【図２８】図２８は、本実施の形態において配列ＶＩｄｘを利用した検索処理を示すフローチャートである。
【図２９】図２９（Ａ）、（Ｂ）は、配列ＶＩｄｘを利用した検索処理を説明する図である。
【図３０】図３０（Ａ）、（Ｂ）は、配列ＶＩｄｘを利用した検索処理を説明する図である。
【図３１】図３１（Ａ）、（Ｂ）は、それぞれ、バリューマップを利用したソート処理および配列ＶＩｄｘを利用したソート処理を示すフローチャートである。
【図３２】図３２（Ａ）、（Ｂ）は、バリューマップを利用したソート処理を説明する図である。
【図３３】図３３（Ａ）、（Ｂ）は、配列ＶＩｄｘを利用したソート処理を説明する図である。
【図３４】図３４は、複数のソートキーが与えられた場合のソート処理を示すフローチャートである。
【図３５】図３５は、複数のソートキーが与えられた場合のソート処理を示すフローチャートである。
【図３６】図３６（Ａ）は、ソート処理の対象となる表形式データのテーブルの例、図３６（Ｂ）は、体重という項目をソートキーとしたソート結果を示す図である。
【図３７】図３７（Ａ）は、ソート処理におけるカウント配列の生成を説明する図、図３８（Ｂ）は、完成したカウント配列を示す図である。
【図３８】図３８（Ａ）は、ソート処理において完成したカウント配列を示す図、図３８（Ｂ）は、カウント配列に基づいて生成される累計数配列Ａｇｇｒを示す図である。
【図３９】図３９（Ａ）、（Ｂ）は、ソートされたレコード番号を収容する第２の順序集合配列ＯｒｄＳｅｔ２への値の格納を説明する図である。
【図４０】図４０（Ａ）、（Ｂ）は、ソートされたレコード番号を収容する第２の順序集合配列ＯｒｄＳｅｔ２への値の格納を説明する図である。
【図４１】図４１は、完成した第２の順序集合配列ＯｒｄＳｅｔ２を示す図である。
【図４２】図４２（Ａ）は、ソート前の表形式データのテーブルを示す図、図４２（Ｂ）はソート後の表形式データのテーブルを示す図である。
【図４３】図４３は、ビットマップを利用した、レコードの部分集合に対する処理を説明する図である。
【図４４】図４４は、本実施の形態にかかるレコード追加処理を示すフローチャートである。
【図４５】図４５は、第２のコンパイル処理におけるＶＮｏへの変換処理を示すフローチャートである。
【図４６】図４６（Ａ）〜（Ｄ）は、第２のコンパイル処理におけるＶＮｏの生成を説明する図である。
【図４７】図４７は、第２のコンパイル処理におけるＶＬへの変換処理を示すフローチャートである。
【図４８】図４８（Ａ）〜（Ｄ）は、第２のコンパイル処理におけるＶＬの生成を説明する図である。
【図４９】図４９（Ａ）〜（Ｄ）は、第２の情報ブロックの例を示す図である。
【図５０】図５０は、本実施の形態にかかるコンピュータシステムの機能ブロック図ある。
【図５１】図５１は、本実施の形態および比較例を用いたＣＳＶインポートに要した時間を示す図である。
【符号の説明】
【０１７０】
１０        コンピュータシステム
１２        ＣＰＵ
１４        ＲＡＭ
１６        ＲＯＭ
１８        固定記憶装置
２０        ドライバ
２２        Ｉ／Ｆ
２４        入力装置
２６        表示装置
５００１    コンパイル処理部
５００２    検索処理部
５００３    ソート処理部
５００４    データ追加処理部
５００５    第２のコンパイル処理部
【図１】
2007034878.tif 000003
【図２】
2007034878.tif 000004
【図３】
2007034878.tif 000005
【図４】
2007034878.tif 000006
【図５】
2007034878.tif 000007
【図６】
2007034878.tif 000008
【図７】
2007034878.tif 000009
【図８】
2007034878.tif 000010
【図９】
2007034878.tif 000011
【図１０】
2007034878.tif 000012
【図１１】
2007034878.tif 000013
【図１２】
2007034878.tif 000014
【図１３】
2007034878.tif 000015
【図１４】
2007034878.tif 000016
【図１５】
2007034878.tif 000017
【図１６】
2007034878.tif 000018
【図１７】
2007034878.tif 000019
【図１８】
2007034878.tif 000020
【図１９】
2007034878.tif 000021
【図２０】
2007034878.tif 000022
【図２１】
2007034878.tif 000023
【図２２】
2007034878.tif 000024
【図２３】
2007034878.tif 000025
【図２４】
2007034878.tif 000026
【図２５】
2007034878.tif 000027
【図２６】
2007034878.tif 000028
【図２７】
2007034878.tif 000029
【図２８】
2007034878.tif 000030
【図２９】
2007034878.tif 000031
【図３０】
2007034878.tif 000032
【図３１】
2007034878.tif 000033
【図３２】
2007034878.tif 000034
【図３３】
2007034878.tif 000035
【図３４】
2007034878.tif 000036
【図３５】
2007034878.tif 000037
【図３６】
2007034878.tif 000038
【図３７】
2007034878.tif 000039
【図３８】
2007034878.tif 000040
【図３９】
2007034878.tif 000041
【図４０】
2007034878.tif 000042
【図４１】
2007034878.tif 000043
【図４２】
2007034878.tif 000044
【図４３】
2007034878.tif 000045
【図４４】
2007034878.tif 000046
【図４５】
2007034878.tif 000047
【図４６】
2007034878.tif 000048
【図４７】
2007034878.tif 000049
【図４８】
2007034878.tif 000050
【図４９】
2007034878.tif 000051
【図５０】
2007034878.tif 000052
【図５１】
2007034878.tif 000053