JP2007034878A - 情報処理方法、情報処理装置および情報処理プログラム - Google Patents
情報処理方法、情報処理装置および情報処理プログラム Download PDFInfo
- Publication number
- JP2007034878A JP2007034878A JP2005220054A JP2005220054A JP2007034878A JP 2007034878 A JP2007034878 A JP 2007034878A JP 2005220054 A JP2005220054 A JP 2005220054A JP 2005220054 A JP2005220054 A JP 2005220054A JP 2007034878 A JP2007034878 A JP 2007034878A
- Authority
- JP
- Japan
- Prior art keywords
- value
- array
- item
- list
- record
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】 レコードの追加に高速に応答する。
【解決手段】 情報処理装置は、各々の項目において、項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リスト、および、レコードの順番に項目値番号を指定する情報が格納された項目値指定情報配列、をメモリ中に生成する。コンパイル処理部5001は、ハードディスク装置5010に記憶された表形式データ5010を読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、値リストの末尾に、新たな項目値を追加し、項目値番号指定配列中、レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納する。
【選択図】 図50
Description
本発明は、コンピュータのような情報処理装置を用いて大量のデータを処理する情報処理方法、情報処理装置および情報処理プログラムに関し、特に、データ追加を高速に処理する情報処理方法、情報処理装置および情報処理プログラムに関する。
従来、大量のデータを蓄積し、蓄積されたデータを検索、ソートし、また、データを更新、削除等するようなデータ処理が行われている。これらのデータ処理は、たとえば、CPUと、メモリと、周辺機器インタフェースと、ハードディスクのような固定記憶装置と、表示装置やプリンタなどの出力装置と、キーボードやマウスなどの入力装置と、電源ユニットとがバスを介して接続された、周知のコンピュータシステムにプログラムをインストールし、プログラムが、コンピュータに、上記各種処理の処理ステップを実行させることで実現される。
上述したようなデータ処理を実現するために、大量のデータを蓄積し管理する各種データベースが知られている。特に大量のデータのうちでも、表形式のデータを高速に処理する要求は非常に強い。
図1は、レコードごとに、各項目の値(項目値)を有するような形式のデータを表として示した図である。このように表として示されるようなデータを表形式データと称する。図1の例では、100万個のレコードのそれぞれが、性別、年齢、および、職業という項目の値(項目値)を有する。たとえば、レコード番号「0」のレコードは、性別の項目について「女性」という値を持ち、年齢の項目について「18」という値を持ち、かつ、職業の項目について「プログラマ」という値を持つ。
従来、上述した表形式データは、図2(A)に示すように、いわゆる行単位(レコード単位)で、物理的にその値を格納し、或いは、図2(B)に示すようにいわゆる項目単位で、物理的にその値を格納していた。図2(A)に示す例の場合、レコード番号に関する性別、年齢および職業の項目値の組が、レコード番号順に、論理的アドレスが増加する順番で記憶装置(たとえばハードディスク装置)上に格納されている。その一方、図2(B)に示す例の場合には、項目ごとに、レコード番号順に、項目値が、論理アドレスが増加する方向に記憶装置上に格納されている。より具体的には、図2(B)の例では、性別の項目に関してレコード番号「0」から「999999」までの項目値が、記憶装置中で順番に並べられ、次に、年齢の項目に関してレコード番号「0」から「999999」までの項目値が順番に並べられ、さらに、職業の項目に関してレコード番号「0」から「999999」までの項目値が順番に並べられている。
図2(A)や図2(B)に示すような形式でデータを記憶装置に格納する場合、レコードの検索などデータ処理のために、記憶装置に格納されたデータのアクセス時間が長いことに起因して、多大な処理時間を要するという問題点がある。また、図2(A)や図2(B)に示す形式でのデータの記憶には、以下のような問題点がある。
(1)上記形式で記憶されるデータのサイズは巨大化しやすく、また、項目別など、所望のように物理的に分割することが困難である。たとえば、性別の項目の項目値が「男性」のレコードを抽出するとき、年齢や職業という他の項目の情報は必要とされないので、性別という項目だけからなる表に分割してアクセスできれば効率的である。図2(B)に示された技術の場合、項目ごとの分割は可能であるが、大量のデータを扱う際には、データサイズが巨大化することは同じである。
(2)上記形式で記憶されるデータは、各項目値を同時にソートした形で保持できない。たとえば、図2(A)および図2(B)に示した従来技術の場合、項目値は、性別の項目に関して「女性、男性、女性、...、女性」のようにレコード番号順に並べられている。しかし、検索などを実行する場合には、一般に、「女性、女性、女性、男性、...、男性」というように並べられている方が便宜である。ところが、従来の形式では、項目値は所定の配列順序、即ち、レコード番号順に並べられているので、特定の項目に関して項目値をソートすることは許容されない。そのため、従来技術の場合、検索に都合の良い項目値の並べ方を選択することができない。
(3)上記形式で記憶されるデータにおいては、同一値が何度も出現する。
(1)上記形式で記憶されるデータのサイズは巨大化しやすく、また、項目別など、所望のように物理的に分割することが困難である。たとえば、性別の項目の項目値が「男性」のレコードを抽出するとき、年齢や職業という他の項目の情報は必要とされないので、性別という項目だけからなる表に分割してアクセスできれば効率的である。図2(B)に示された技術の場合、項目ごとの分割は可能であるが、大量のデータを扱う際には、データサイズが巨大化することは同じである。
(2)上記形式で記憶されるデータは、各項目値を同時にソートした形で保持できない。たとえば、図2(A)および図2(B)に示した従来技術の場合、項目値は、性別の項目に関して「女性、男性、女性、...、女性」のようにレコード番号順に並べられている。しかし、検索などを実行する場合には、一般に、「女性、女性、女性、男性、...、男性」というように並べられている方が便宜である。ところが、従来の形式では、項目値は所定の配列順序、即ち、レコード番号順に並べられているので、特定の項目に関して項目値をソートすることは許容されない。そのため、従来技術の場合、検索に都合の良い項目値の並べ方を選択することができない。
(3)上記形式で記憶されるデータにおいては、同一値が何度も出現する。
上述した問題点を解決すべく、本発明者は、特許文献1に記載されたように、
特定の項目に属する項目値に対応した項目値番号の順番に、項目値が格納されている値管理テーブル(値リスト)と、レコードの順番に項目値番号を指定する情報が格納された項目値番号指定情報配列(値リストへのポインタ配列)とを記憶装置に保持することにより、項目に対応した項目値を含むレコードの配列として表現される表形式データを蓄積、管理するような情報処理装置を提案している。
特定の項目に属する項目値に対応した項目値番号の順番に、項目値が格納されている値管理テーブル(値リスト)と、レコードの順番に項目値番号を指定する情報が格納された項目値番号指定情報配列(値リストへのポインタ配列)とを記憶装置に保持することにより、項目に対応した項目値を含むレコードの配列として表現される表形式データを蓄積、管理するような情報処理装置を提案している。
この情報処理装置においては、項目値番号指定情報配列から特定のレコードに対応した項目値番号を取得し、値管理テーブルに格納された項目値の中から、取得された項目値番号に対応した項目値を得ることができる。
図3(A)に示す例では、元データとして、レコード番号の順に、年齢の項目の項目値が並べられている表が、メモリなど記憶装置に記憶された、項目値が重複なくかつ昇順に並べられた値リストVLと、レコード番号の順に、値リストVL中の位置を指定する項目値番号が格納されたポインタ配列VNoとで表される。図3(B)に示す他の例では、同じ元データとして示された表が、項目値が重複なく、かつ、元データにおける出現順に並べられた値リストVLと、レコード番号の順に、値リストVL中の位置を指定する項目値番号が格納されたポインタ配列VNoとで表される。図3(A)の例では、値リストは昇順であるが、無論、降順であっても良い。
いずれの例においても、レコード番号から、ポインタ配列VNo中の値(項目値番号)を取得し、かつ、値リストVL中、項目値番号が示す位置の値(項目値)を取り出すことで、レコード番号に対応した項目値を取得することができる。
図1に示すように表として示されたデータを、特許文献1に記載した手法(特に、値リストにおいて項目値が昇順に並べられる手法)を用いると、図4(A)〜(C)に示すように、性別の項目(図4(A))、年齢の項目(図4(B))、職業の項目(図4(C))のそれぞれについて、メモリ中に、ポインタ配列VNoおよび値リストVLが生成される。
特許第3581831号公報
特許文献1に記載したように、ポインタ配列VNoおよび値リストVLにより、ある項目の表を示すことにより、項目ごとに分割してアクセスすることが可能となる。また、昇順或いは降順の値リストVLを保持する場合には、それぞれの項目の項目値をソートした状態で保持することができる。さらに、上記値リストにおいては同一の項目値は一度しか出現せず、データのサイズを小さくすることが可能である。
しかしながら、特許文献1に記載された情報処理装置においても、特に、メモリ中に、昇順或いは降順の値リストおよびポインタ配列を格納する態様では、頻繁なレコードの追加があると処理時間が増大するという問題点があった。たとえば、図3(A)の例において、レコードが追加され、当該レコード中の項目値が、値リストVLに存在しない(たとえば、「14」)場合には、新たな項目値を所定の挿入位置に挿入したような値リストを新たに作り、かつ、値リストの更新に応じて、ポインタ配列VNoの値(項目値番号)も変更する必要がある。
したがって、ウェブサーバにおけるアクセスログの取得など、頻繁にレコードが追加され続けるようなシステムにおいて、データサイズを大規模化させることなく、頻繁なレコードの追加に高速に応答でき、かつ、検索やソートが容易に実現できるのが望ましい。
本発明は、レコードの追加に高速に応答可能な情報処理方法、情報処理装置および情報処理プログラムを提供することを目的とする。
本発明の目的は、複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理方法であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を備えたことを特徴とする情報処理方法により達成される。
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理方法であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を備えたことを特徴とする情報処理方法により達成される。
好ましい実施形態においては、前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストである。
より好ましい実施態様においては、前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを有する。
前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを有する。
また、好ましい実施態様においては、さらに、前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加するステップを備えている。
好ましい実施態様においては、さらに、各項目に関する項目値を含む単一のレコードを受け付けるステップを備えている。
別の好ましい実施態様においては、さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップを備えている。
また、別の好ましい実施態様においては、さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップを備えている。
検索を実現する情報処理方法に関する実施態様においては、
さらに、検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えている。
さらに、検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えている。
検索を実現する情報処理方法に関する他の実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えている。
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えている。
ソートを実現する情報処理方法に関する実施態様においては、
さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えている。
さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えている。
ソートを実現する情報処理方法に関する他の実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えている。
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えている。
複数項目のソートを実現する情報処理方法に関する実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えている。
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えている。
複数項目のソートを実現する情報処理方法に関する他の実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えている。
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えている。
また、別の好ましい実施態様においては、さらに、前記記憶装置中に、前記項目値番号指定配列と同一サイズの第2の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第2の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納するステップと、
前記記憶装置中に、前記値リストと同一サイズの第2の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第2の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を備えている。
前記記憶装置中に、前記値リストと同一サイズの第2の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第2の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を備えている。
さらに別の好ましい実施態様においては、前記項目値の取りうる範囲を対数分割するステップと、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を備えている。たとえば、0からSまでの整数を、N個に対数分割する際の範囲は、
0〜S^(0/(N−1))
S^(0/(N−1)〜S^(1/(N−1))
S^(1/(N−1)〜S^(2/(N−1))
:
S^(N−3/(N−1)〜S^(N−2/(N−1))
S^(N−2/(N−1)〜S^(N−1/(N−1))
となる。
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を備えている。たとえば、0からSまでの整数を、N個に対数分割する際の範囲は、
0〜S^(0/(N−1))
S^(0/(N−1)〜S^(1/(N−1))
S^(1/(N−1)〜S^(2/(N−1))
:
S^(N−3/(N−1)〜S^(N−2/(N−1))
S^(N−2/(N−1)〜S^(N−1/(N−1))
となる。
また、本発明の目的は、複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理装置であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加する値リスト更新手段と、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納する項目値番号格納手段と、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するバリューマップ・ノード追加手段と、を備えたことを特徴とする情報処理装置によっても達成される。
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理装置であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加する値リスト更新手段と、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納する項目値番号格納手段と、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するバリューマップ・ノード追加手段と、を備えたことを特徴とする情報処理装置によっても達成される。
好ましい実施態様においては、前記ノードが項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストである。
より好ましい実施態様においては、前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記バリューマップ・ノード追加手段が、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成する。
前記バリューマップ・ノード追加手段が、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成する。
また、好ましい実施態様においては、さらに、前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加する、レコード番号リスト・ノード追加手段を備えている。
好ましい実施態様においては、さらに、各項目に関する項目値を含む単一のレコードを受け付けるレコード受付手段を備えている。
別の好ましい実施態様においては、さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段を備えている。
また、別の好ましい実施態様においては、さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段を備えている。
検索を実現する情報処理装置の好ましい実施態様においては、
さらに、検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定する値番号特定手段と、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えている。
さらに、検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定する値番号特定手段と、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えている。
検索を実現する情報処理装置の他の好ましい実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定する値番号特定手段と、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えている。
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定する値番号特定手段と、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えている。
ソートを実現する情報処理装置の好ましい実施態様においては、
さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えている。
さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えている。
ソートを実現する情報処理装置の他の好ましい実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えている。
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えている。
複数項目のソートを実現する情報処理装置の好ましい実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第1のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第2のソート結果格納配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えている。
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第1のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第2のソート結果格納配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えている。
複数項目のソートを実現する情報処理装置の他の好ましい実施態様においては、
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第1のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第2のソート結果配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えている。
さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第1のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第2のソート結果配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えている。
別の好ましい実施態様においては、さらに、前記記憶装置中に、前記項目値番号指定配列と同一サイズの第2の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第2の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納する第2の項目値番号配列生成手段と、
前記記憶装置中に、前記値リストと同一サイズの第2の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第2の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納する第2の値リスト生成手段と、を備えている。
前記記憶装置中に、前記値リストと同一サイズの第2の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第2の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納する第2の値リスト生成手段と、を備えている。
また、別の好ましい実施態様においては、前記項目値の取りうる範囲を対数分割する範囲決定手段と、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てる範囲割り当て手段と、を備えている。たとえば、0からSまでの整数を、N個に対数分割する際の範囲が、
0〜S^(0/(N−1))
S^(0/(N−1)〜S^(1/(N−1))
S^(1/(N−1)〜S^(2/(N−1))
:
S^(N−3/(N−1)〜S^(N−2/(N−1))
S^(N−2/(N−1)〜S^(N−1/(N−1))
となる。
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てる範囲割り当て手段と、を備えている。たとえば、0からSまでの整数を、N個に対数分割する際の範囲が、
0〜S^(0/(N−1))
S^(0/(N−1)〜S^(1/(N−1))
S^(1/(N−1)〜S^(2/(N−1))
:
S^(N−3/(N−1)〜S^(N−2/(N−1))
S^(N−2/(N−1)〜S^(N−1/(N−1))
となる。
さらに、本発明の目的は、複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を実行させることを特徴とするコンピュータプログラムによっても達成される。
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を実行させることを特徴とするコンピュータプログラムによっても達成される。
好ましい実施態様においては、前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストである。
より好ましい実施態様においては、前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記コンピュータに、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを実行させる。
前記コンピュータに、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを実行させる。
また、別の好ましい実施態様においては、さらに、前記コンピュータに、
前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加するステップを実行させる。
前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加するステップを実行させる。
好ましい実施態様においては、さらに、前記コンピュータに、
各項目に関する項目値を含む単一のレコードを受け付けるステップを実行させる。
各項目に関する項目値を含む単一のレコードを受け付けるステップを実行させる。
別の好ましい実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップを実行させる。
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップを実行させる。
また、別の好ましい実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップを実行させる。
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップを実行させる。
検索を実現する実施態様においては、さらに、前記コンピュータに、
検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させる。
検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させる。
検索を実現する他の実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させる。
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させる。
ソートを実現する実施態様においては、さらに、前記コンピュータに、
前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させる。
前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させる。
ソートを実現する他の実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させる。
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させる。
複数項目のソートを実現する実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させる。
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させる。
複数項目のソートを実現する他の実施態様においては、さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させる。
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させる。
また、別の好ましい実施態様においては、さらに、前記コンピュータに、
前記記憶装置中に、前記項目値番号指定配列と同一サイズの第2の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第2の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納するステップと、
前記記憶装置中に、前記値リストと同一サイズの第2の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第2の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を実行させる。
前記記憶装置中に、前記項目値番号指定配列と同一サイズの第2の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第2の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納するステップと、
前記記憶装置中に、前記値リストと同一サイズの第2の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第2の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を実行させる。
さらに別の好ましい実施態様においては、前記コンピュータに、前記項目値の取りうる範囲を対数分割するステップと、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を実行させる。より好ましくは、0からSまでの整数を、N個に対数分割する際の範囲は、
0〜S^(0/(N−1))
S^(0/(N−1)〜S^(1/(N−1))
S^(1/(N−1)〜S^(2/(N−1))
:
S^(N−3/(N−1)〜S^(N−2/(N−1))
S^(N−2/(N−1)〜S^(N−1/(N−1))
となる。
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を実行させる。より好ましくは、0からSまでの整数を、N個に対数分割する際の範囲は、
0〜S^(0/(N−1))
S^(0/(N−1)〜S^(1/(N−1))
S^(1/(N−1)〜S^(2/(N−1))
:
S^(N−3/(N−1)〜S^(N−2/(N−1))
S^(N−2/(N−1)〜S^(N−1/(N−1))
となる。
本発明によれば、レコードの追加に高速に応答可能な情報処理方法、情報処理装置および情報処理プログラムを提供することが可能となる。
[ハードウェア構成]
以下、添付図面を参照して、本発明の実施の形態について説明する。図5は、本発明の実施の形態にかかる情報処理方法を実現するコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。コンピュータシステム10は、いわゆるパーソナルコンピュータであり、種々の情報処理プログラムがインストールされている。情報処理プログラムには、たとえば、任意の表形式データをコンパイルして本実施の形態にしたがった形式のデータをメモリに格納するコンパイルプログラム、本実施の形態にしたがった形式のデータを読み出して所定の項目の表(ビュー)を作成するビュー作成プログラム、検索プログラム、ソートプログラム、データ追加プログラムなどが含まれる。インストールされた情報処理プラグラムはコンピュータシステムにより読み出され、当該プログラムにより、コンピュータシステムに、種々の処理ステップを実行させることができる。
以下、添付図面を参照して、本発明の実施の形態について説明する。図5は、本発明の実施の形態にかかる情報処理方法を実現するコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。コンピュータシステム10は、いわゆるパーソナルコンピュータであり、種々の情報処理プログラムがインストールされている。情報処理プログラムには、たとえば、任意の表形式データをコンパイルして本実施の形態にしたがった形式のデータをメモリに格納するコンパイルプログラム、本実施の形態にしたがった形式のデータを読み出して所定の項目の表(ビュー)を作成するビュー作成プログラム、検索プログラム、ソートプログラム、データ追加プログラムなどが含まれる。インストールされた情報処理プラグラムはコンピュータシステムにより読み出され、当該プログラムにより、コンピュータシステムに、種々の処理ステップを実行させることができる。
図5に示すように、コンピュータシステム10は、システム全体および個々の構成部分を制御するCPU12、処理の過程で生成される種々の配列やリストを記憶するRAM(Random Access Memory)14、プログラム等を記憶するROM(Read Only Memory)16、ハードディスク装置18、CD−ROMやDVD−ROMなど可搬記憶媒体19をアクセスするためのドライバ20、ドライバ20や外部ネットワーク(図示せず)と接続された外部端子との間に設けられたインタフェース(I/F)22、キーボードやマウスからなる入力装置24、および、表示装置26を備えている。CPU12、RAM14、ROM16、ハードディスク装置18、I/F22、入力装置24および表示装置26は、バス28を介して相互に接続されている。
上述したコンパイルプログラム、ビュー作成プログラム、検索プログラム、ソートプログラム、データ追加プログラムなどは、可搬記憶媒体19に収容され、ドライバ20に読み取られ、コンピュータシステム10にインストールされても良い。また、いったん可搬記憶媒体19から読み出されたものを、ハードディスク装置18の所定の領域に記憶しておいても良い。或いは、上記プログラムが、ネットワーク(図示せず)、外部端子およびI/F22を経て、外部のシステム(図示せず)から供給されるものであっても良い。
本発明においては、任意の表形式データをコンパイルして、高速な検索、ソートおよびデータ追加が可能な形式のデータの集合体を構築する。
[データ構造]
図6は、本実施の形態において例として用いる論理的な表形式データのテーブルを示す図である。図6に示すように、例として用いる表形式データのテーブルは、それぞれのレコードが、性別、年齢、身長、体重の項目のそれぞれの項目値を有している。たとえば、レコード番号「0」のレコードは、性別の項目値が「woman」、年齢の項目値が「18」、身長の項目値が「168(cm)」、体重の項目値が「55(kg)」である。
図6は、本実施の形態において例として用いる論理的な表形式データのテーブルを示す図である。図6に示すように、例として用いる表形式データのテーブルは、それぞれのレコードが、性別、年齢、身長、体重の項目のそれぞれの項目値を有している。たとえば、レコード番号「0」のレコードは、性別の項目値が「woman」、年齢の項目値が「18」、身長の項目値が「168(cm)」、体重の項目値が「55(kg)」である。
図7(A)、(B)および図8(A)、(B)は、図6に示す論理的な表形式データのテーブルを、本実施の形態にしたがって変換した配列を示す図である。これらの配列は、RAM14などメモリに記憶され、図6に示すような表形式のビューを生成するときや、検索、ソート、データ追加などの処理を実行するときに、メモリから読み出される。
図7(A)、(B)および図8(A)、(B)に示すように、本実施の形態においては、性別、年齢、身長および体重のそれぞれの項目について情報ブロック700、710、800、810が作られる。たとえば、図7(A)に示すように、性別の項目に関する情報ブロック700は、レコード番号ごとに、項目値を指定する情報(項目値番号)が格納された値リストへのポインタ配列(以下、単に「ポインタ配列」と称する。)AVNo(Appearance order Value No.)と、項目値番号に対応付けて、性別の項目値が格納された値リストAVL(Appearance order Value List)とを有する。本実施の形態においては、後述するように、データ生成の高速さ、および、データ追加の容易さを優先しているため、項目値は、レコードの出現順となっている。したがって、後述する検索処理やソート処理を可能にするために、値リストAVLに格納された項目値の各々が何番目の値であるかを示す値(つまり、項目値の順位を示す値)を格納した値順位番号配列VOrdが設けられる。
さらに、本実施の形態においては、情報ブロック700は、項目値を昇順に取り出すことを可能とする配列VIdx(Value Index)と、同じ位置の項目値を有するレコード番号を、項目値番号ごとに保持したリストRecNoList(Record Number List)とを含む。図7(A)から理解できるように、ポインタ配列は、レコード数と同じ数の要素(項目値番号)を格納できるサイズを有する。配列VOrdおよびVIdxは、値リストAVLの項目値の数と同じ数の要素を格納できるサイズを有する。これに対して、リストRecNoListは、項目値番号ごとに格納すべき値の数が可変となっている。
他の情報ブロック(符号710、800、810)についても、情報ブロック700と同様に、それぞれ、ポインタ配列VNo、値リストAVL、配列VOrd、VIdxおよびリストRecNoListを有する。
[コンパイル処理]
まず、従来の形態で記憶された表形式データに基づき、本実施の形態にかかる複数の情報ブロックを生成する処理(コンパイル処理)について説明する。図9および図10は、本実施の形態にかかるコンパイル処理を示すフローチャートである。
まず、従来の形態で記憶された表形式データに基づき、本実施の形態にかかる複数の情報ブロックを生成する処理(コンパイル処理)について説明する。図9および図10は、本実施の形態にかかるコンパイル処理を示すフローチャートである。
従来の形態の表形式データが、図2(A)に示すように、レコードごとに各項目の値が連続して、ハードディスク装置18に記憶されていると考える。本実施の形態においては、CPU12が、ハードディスク装置18からレコードを読み出して、図9および図10に示す処理を実行して、RAM14などメモリ上に所定の配列を生成する。特に、後述するように、処理対象となるレコードについて処理をしつつ、並行して、ハードディスク装置18からのレコードの読み出しが可能であるため、コンパイルの処理時間を短縮することが可能となる。
以下、図6に示す表形式データのテーブルのうち、性別という項目について情報ブロックを生成する場合について説明する。他の項目(年齢、身長、体重)についても同様に情報ブロックが生成可能であることはいうまでもない。
まず、CPU12は、メモリ中に、初期的にバリューマップの領域を確保する。また、CPU12は、処理で利用する「全行数」および「値の種類」の値を格納する領域を確保し、初期値「0」を格納する。さらに、CPU12は、テーブルに含まれるそれぞれの項目について、配列AVNo、AVL、RecNoListの領域を確保して、それぞれに初期値(たとえば無効値)を格納する(ステップ901)。配列のサイズやRecNoListについては後述する。
CPU12は、ハードディスク装置18から、レコードを読み込む(ステップ902)。図2(A)の例では、初期的には、レコード番号「0」のレコード(性別の項目値:「Woman」、年齢の項目値:18、身長の項目値:168、体重の項目値:55)が読み込まれ、メモリ上に一時的に記憶される。次いで、CPU12は、コンパイル処理の対象となる次のレコードが存在すれば(ステップ903でイエス(Yes))、CPU12は、ハードディスク装置から次のレコードを読み込む(ステップ904)。この次のレコードの読み込みと並列的に、CPU12は、既に読み込んで、メモリ上に一時的に記憶されたレコードに基づいて、以下の処理を実行する。
なお、配列AVNoは、レコード数と同じ数の値を収容するため、領域のサイズは予め知ることができる。その一方、配列AVLは、項目値の種類と同じ数の値を収容すればよい。たとえば、全てのレコードが異なる項目値をもっていれば、配列AVLは、レコード数と同じ数の項目値を収容できるようなサイズとなり、これが、配列AVLの予想される最大サイズである。したがって、本例では、配列AVLの領域は、レコード数と同じ数の項目値を収容できるような大きさとする。
なお、配列AVNoは、レコード数と同じ数の値を収容するため、領域のサイズは予め知ることができる。その一方、配列AVLは、項目値の種類と同じ数の値を収容すればよい。たとえば、全てのレコードが異なる項目値をもっていれば、配列AVLは、レコード数と同じ数の項目値を収容できるようなサイズとなり、これが、配列AVLの予想される最大サイズである。したがって、本例では、配列AVLの領域は、レコード数と同じ数の項目値を収容できるような大きさとする。
また、バリューマップおよびRecNoListは、リンクリストである。このリンクリストについて以下に説明する。一般に、リンクリストは、図11(A)に示すように、リンクリストは、値(たとえば、符号1101参照)と、次のノードを示すネクストポインタ(たとえば、符号1102参照)とを含むノード(たとえば、符号1110、1111参照)を含む、ノードの集合体である。図11(A)の例では、リンクリストにより、値「A」、「B」および「C」が格納されることがあらわされる。上記リンクリストは、1つの値について1つのネクストポインタがあるため、メモリの使用効率が良くないという問題点がある。そこで、1つのノードに複数の値を格納するために、ブロックリンクリストが利用される。
図11(B)はブロックリンクリストの例である。図11(B)の例では、1つのノードに3つの値(「A」、「B」、「C」、および、「D」、「E」、「F」)が格納されている。本実施の形態では、バリューマップ、および、RecNoListとして、図11(B)に示す形式のブロックリンクリストを使用している。たとえば、バリューマップのノードは、後述する値番号と、ネクストポインタとを含む。バリューマップのノードに、値番号、項目値およびネクストポインタを含むように構成することも可能である。しかしながら、項目値は、値番号に基づいて配列AVLを参照することにより取得できるため、本例においては、値番号およびネクストポインタのみを含むようにしている。
また、本実施の形態において、バリューマップは、複数のエントリーを有し、エントリーごとに、項目値の範囲が割り当てられている。図12(A)に示すように、「0」〜「9」という範囲が割り当てられたエントリー、「10」〜「19」という範囲が割り当てられたエントリー、「11」〜「19」という範囲が割り当てられたエントリー、「20」〜「29」という範囲が割り当てられたエントリー、および、「30」〜「39」という範囲が割り当てられたエントリーを有している。しかしながら、上記値の範囲は一例である。好ましい値の範囲の割り当てについては後述する。
図9の処理の説明に戻ると、CPU12は、処理対象とする項目を決定する(ステップ905)。上述したように、年齢の項目を処理対象としたときを具体例として説明を進める。CPU12は、「全行数」の値をインクリメントし(ステップ906)、次いで、バリューマップにおいて、レコード中、処理対象の項目の項目値が属する範囲にノードが存在するか否かを判断する(ステップ907)。図12(A)、(B)は、初期的な配列が生成された状態を示す図である。図12(A)、(B)に示すように、この例では、バリューマップは、項目値の範囲のそれぞれに関連してブロックリンクリストが生成されるようになっている。項目値の範囲は、「0〜9」、「10〜19」、「20〜29」、「30〜39」としている。実際には、値の最高値はわからないため、さらに、「39以上」という値の範囲に関連したブロックリンクリストが生成可能とするのが望ましい。
図13(A)、(B)は、レコード番号「0」のレコードについての処理を説明する図である。レコード番号「0」のレコード中、年齢という項目の項目値は「18」である。したがって、「10〜19」という範囲が特定される(矢印1301参照)。図13(B)の例では、上記特定された範囲に関連付けられたブロックリンクリストのノードは存在しないため(ステップ908でノー(No))、CPU12は、バリューマップにおいて、その範囲に関連付けて先頭に、メモリ中、値番号として、「0」を含むノードを生成する(ステップ909、図13(B)の符号1302参照)。バリューマップにおける値番号とは、初期値から昇順であたえられる番号である。なお、本実施の形態においては、値番号は、初期値が「0」で、その後、値が「1」ずつ増加するようになっており、結果としてその項目値が最初に出現するレコード番号に一致している。
また、図13(B)において、ノードを「0(18)」と表記している。これは、値番号が「0」でかつ対応する項目値が「18」であることを示しているが、実際にノードに格納されるのは、値番号だけである。図14(B)以降においても同様である。
次いで、CPU12は、配列AVNo中、レコード番号に対応する位置に、値番号を格納する。また、CPU12は、配列AVLに項目値を格納する。この配列AVLへの項目値の格納は、値の出現順となる。つまり、配列の先頭から値が出現するたびに、順次、項目値が格納される。上述したように、値番号は、初期値(本実施の形態においては「0」)から昇順(本実施の形態においては、1ずつ増分する)で与えられる値であるため、配列AVLにおいて、値番号に示す格納位置番号に格納された項目値を読み出すことで、値番号に関連した項目値を取得することができる。
さらに、CPU12は、リンクリストRecNoList中、配列AVLの値の格納位置と同じ位置に、レコード番号を含むノードが生成される(以上、ステップ1004)。
図13(B)の例においては、値番号「0」が、配列AVNo中、レコード番号「0」に相当する位置に格納され(符号1303参照)、項目値「18」が、配列AVL中、先頭(格納位置番号=0)に格納される(符号1304参照)。また、リンクリストRecNoList中、格納位置番号「0」の位置に、レコード番号「0」を含むノードが生成される(符号1305参照)。
ステップ1004の処理の後、CPU12は、「値の種類」の値をインクリメントする(ステップ1005)。本実施の形態においては、CPU12は、次いで、同じレコードにおいて、未処理の他の項目があるか否かを判断し(ステップ1006)、未処理の他の項目が存在する場合には(ステップ1006でイエス(Yes))、ステップ904に戻り、他の項目(図13の例では、身長など)について、ステップ904以降の処理を実行する。
同じレコードにおいて他の項目について処理が終了していれば(ステップ1006でノー(No))、CPU12は、未処理のレコードが存在する否かを判断する(ステップ1007)。
図14(A)、(B)は、図13(A)、(B)の処理対象のレコードの次のレコード(レコード番号「1」)に関する処理を説明する図である。図14(A)、(B)の例も、図13(A)、(B)の例と同様に、ステップ908でノー(No)と判断され、バリューマップにおいて、所定の範囲(「20〜29」の範囲)に関連付けて、値番号「1」が格納される(ステップ909)。また、配列AVNo中、レコード番号「1」に対応する位置に、値番号「1」が格納され、かつ、配列AVLの次の位置(つまり格納位置番号「1」の位置)に項目値「21」を格納する。また、リンクリストRecNoList中、配列AVLの値の格納位置と同じ位置に、レコード番号「1」を含むノードが生成される(以上、ステップ1004)。新たな項目値「21」が出現しているため、「値の種類」の値がインクリメントされる(ステップ1005)。
図15(A)、(B)は、レコード番号「5」のレコードが処理対象である場合の処理を説明する図である。この例では、項目値「20」が属する範囲(「20〜29」の範囲)に既にノードが存在するため、ステップ908でイエス(Yes)と判断される。この場合、CPU12は、バリューマップにおいて当該範囲のノードに関して、処理対象のレコードと、同じ項目値に関するノードが存在するか否かを判断する(ステップ1001)。図10においては、「同一の項目値が存在」と記載したが、実際にはCPU12は、バリューマップ中、項目値が属する範囲のノードに格納された値番号に基づいて、配列AVL中、当該値番号が示す位置の項目値を特定することで、同一の項目値の有無を判断することができる。
図15(B)の例では、ステップ1001でノー(No)と判断される。そこで、CPU12は、ノードの挿入位置を特定する(ステップ1002)。より詳細には、ある範囲のノード群は、配列AVL中、その値番号が示す位置の項目値が昇順になるように並べられている。図15(B)の例では、値番号「5」に関連する項目値は「20」であり、既にバリューマップに格納されたノードの値番号のそれぞれに関連する項目値「21」、「24」、「28」より小さい。そこで、ノードの挿入位置は先頭と判断される。
そこで、CPU12は、先頭位置に、値番号「5」を含むノードを生成する(ステップ1003)。なお、このノードにおいては、項目値が次に大きいノード(値番号「1」を格納したノード)へのネクストポインタが格納される。
次いで、配列AVNo中、レコード番号「5」に対応する位置に、値番号「5」が格納されるとともに、配列AVL中、格納位置番号「5」の位置に、項目値「20」が格納される。また、リンクリストRecNoList中、配列AVLの値の格納位置と同じ位置に、レコード番号「5」を含むノードが生成される(以上、ステップ1004、図15(B)の符号1501参照)。その後、新たな項目値が追加されているため、「値の種類」の値がインクリメントされる(ステップ1005)。
図16(A)、(B)は、レコード番号「6」のレコードが処理対象である場合の処理を説明する図である。この例では、項目値「16」が属する範囲(「10〜19」の範囲)に既にノードが存在するため、ステップ908でイエス(Yes)と判断される。次いで、CPU12は、バリューマップにおいて当該範囲のノードに関して、処理対象のレコードと、同じ項目値に関するノードが存在するか否かを判断する(ステップ1001)。図16(B)の例では、既に、項目値「16」に関するノードは存在する(符号1601参照)。したがって、ステップ1001でイエス(Yes)と判断される。また、バリューマップ中、項目値「16」に関するノードの値番号は「3」であることがわかる。バリューマップに、項目値に関するノードが既に存在すれば、新たにノードを生成する必要はない。同様に、配列AVLにも既に同一の項目値が格納されているため、配列AVLへの値の格納も実行されない。
CPU12は、配列AVNo中、レコード番号「6」に対応する位置に、値番号「3」を格納する。また、CPU12は、リンクリストRecNoList中、配列AVLにおいてレコード中の項目値が格納されている位置(図16(B)の例では、格納位置番号「3」の位置)と同じ位置に、レコード番号「6」を含むノードを生成する(ステップ1008、および、図16(B)の符号1602参照)。また、この場合には、新たな項目値が出現されていないため、「値の種類」の値はインクリメントされない。
このような処理を、処理対象となる全てのレコードについて実行することにより、図17(B)に示すような、配列AVNo、AVL、および、リンクリストRecNoListおよびバリューリストを生成することができる。
本実施の形態においては、ハードディスク装置18に記憶された従来の表形式データが、図2(A)に示すように、レコードごとに各項目の値が連続して記憶されている場合について説明した。本発明にかかるコンパイル処理はこれに限定されず、図2(B)に示すように、項目ごとに、各レコードの項目値が連続して記憶されているような表形式データにも適用することができる。この場合には、項目ごとの、全てのレコードについて情報ブロックを生成する処理を繰り返し実行すればよい。この場合にも、特定の項目についてあるレコードの項目値について、配列AVNo、AVL、および、リンクリストへ値を格納する処理を実行するのに並列して、当該同じ項目について次のレコードの項目値のハードディスク装置18からの読み出し処理を実行することができる。
配列AVNoおよびAVLを生成することで、レコード番号、AVNoの値、および、AVLの項目値という順でたどっていくことにより、レコード番号に関連する項目値を特定することは可能である。すなわち、配列AVNoおよびAVLを生成すれば、これら配列に基づいて、レコードごとに、各項目の項目値が配置されたようなビューを作成し、表示装置26に表示することもできる。しかしながら、本実施の形態においては、後に、検索、集計、ソート、データ更新の処理を実行する。したがって、これらの処理をより高速に実現するために、配列VOrdおよびVIdxを生成する。
[配列VOrdおよびVIdxの生成]
図18は、本実施の形態にかかる配列VOrdの生成処理を示すフローチャートである。図18に示すように、CPU12は、メモリ中に配列VOrdのための領域を確保する(ステップ1801)。なお、配列VOrdは、配列AVLの項目値の数と同じだけの要素を格納できるサイズを有する。
図18は、本実施の形態にかかる配列VOrdの生成処理を示すフローチャートである。図18に示すように、CPU12は、メモリ中に配列VOrdのための領域を確保する(ステップ1801)。なお、配列VOrdは、配列AVLの項目値の数と同じだけの要素を格納できるサイズを有する。
次いで、CPU12は、バリューマップ中、もっとも若いノードの値番号を取り出す(ステップ1802)。図17の例では、CPU12は、バリューマップ中、範囲が「10代(10〜19)」の先頭のノードの値番号「3」を取り出す(図19の符号1901参照)。CPU12は、配列VOrd中、取り出された値番号が示す位置に、VOrdの格納値を格納する(ステップ1803)。図19の例では、配列VOrd中、値番号「3」の位置に格納値「0」が格納される。
全てのノードについて処理が終了していなければ(ステップ1804でノー(No))、CPU12は、VOrdの格納値をインクリメントし(ステップ1805)、かつ、バリューマップ中、先に処理対象となったノードのネクストポインタを参照して、次のノードを特定し、その値番号を取得する(ステップ1806)。その後、ステップ1803に戻る。
このような処理を繰り返すことにより、図20(A)〜(G)に示すように、配列VOrdに格納値が格納されていく。
次に、配列VIdxの生成について説明する。図21は、本実施の形態にかかる配列VIdxの生成処理を示すフローチャートである。図21に示すように、CPU12は、メモリ中に配列VIdxのための領域を確保し(ステップ2101)、値の格納位置を示すための格納位置番号を「0」に初期化する(ステップ2102)。配列VIdxも、配列AVLの項目値の数と同じだけの要素を格納できるサイズを有する。
次いで、CPU12は、もっとも若いノードの値番号を取り出す(ステップ2103)。図17の例では、CPU12は、バリューマップ中、範囲が「10代(10〜19)」の先頭のノードの値番号「3」を取り出す(図22の符号2201参照)。CPU12は、配列VIdx中、格納位置番号が示す位置に、値番号を格納する(ステップ2104)。図22の例では、配列VOrd中、格納位置番号「0」の位置に、値番号「3」が格納される。
全てのノードについて処理が終了していなければ(ステップ2105でノー(No))、CPU12は、VIdxの格納位置番号をインクリメントし(ステップ2106)、かつ、バリューマップ中、先に処理対象となったノードのネクストポインタを参照して、次のノードを特定し、その値番号を取得する(ステップ2107)。その後、ステップ2104に戻る。
このような処理を繰り返すことにより、図23(A)〜(G)に示すように、配列VIdxに格納値が格納されていく。図24(B)は、年齢という項目について従来の表形式データ(図24(A))を、本実施の形態にしたがった情報ブロックの形態で表した図である。
図24(B)は、年齢という項目についての情報ブロックを示しているが、他の項目(性別、身長、体重)についても、同様に、配列AVNo、VOrd、AVL、VIdx、RecNoListおよびバリューマップが生成される。これら配列を利用した検索、ソートなどの各処理について以下に説明する。
なお、CPU12は、配列VOrdから配列VIdxは即座に作ることができ、同様に、配列VIdxから配列VOrdは即座に作ることができる。配列VOrdの値は、配列VIdxの格納位置番号に相当し、配列VOrdの格納位置番号は、配列VIdxの値に対応する。図20(G)に示す配列VOrdと、図23(G)に示す配列VIdxを比較すると、配列VOrdの格納位置番号「0」の値は「3」であり、その一方、配列VIdxの格納位置番号「3」の値は「0」である。したがって、本実施の形態において、CPU12は、何れか一方を生成しておけば、一方の配列の値を、他方の配列の格納位置番号として、かつ、一方の配列の格納位置番号を、他方の配列の値として、他方の配列を生成することができる。
[検索処理]
各項目について情報ブロックを構成する配列がメモリに記憶された状態で実行される検索処理について以下に説明する。本実施の形態では、バリューマップを利用した検索と、配列VIdxを利用した検索とを考えることができる。
各項目について情報ブロックを構成する配列がメモリに記憶された状態で実行される検索処理について以下に説明する。本実施の形態では、バリューマップを利用した検索と、配列VIdxを利用した検索とを考えることができる。
まず、バリューマップを利用した検索について説明する。図25は、本実施の形態においてバリューマップを利用した検索処理を示すフローチャートである。オペレータが入力装置24を操作して、検索対象となる項目(キー項目)について、検索条件を入力する。たとえば、年齢という項目であれば、単一の年齢(項目値)や年齢の範囲(項目値の範囲)が検索条件となる。CPU12は、検索条件を受け付けると(ステップ2501)、バリューマップのノードを順次読み込み、当該ノードが、検索条件に合致する項目値に関連しているか否かを判断する。
より詳細には、CPU12は、まず、バリューマップの先頭のノードから順にノードを読み込む。配列AVL中、読み込まれたノード中の値番号が示す位置の値(項目値)が、検索条件に合致するまでノードは順に読み込まれる。検索条件に合致するノードが出現すると、CPU12は、当該ノード中の値番号をメモリに一時的に記憶する(ステップ2502)。
次いで、CPU12は、ノード中のネクストポインタを参照して、次のノードを読み込む(ステップ2503)。CPU12は、読み込まれたノード中の値番号が示す位置の項目値が検索条件に合致するか否かを判断し(ステップ2504)、検索条件に合致する場合には、CPU12は、ノード中の値番号をメモリに一時的に記憶する(ステップ2505)。
本実施の形態においては、「最小値<(或いは≦)検索範囲<(或いは≦)最大値」で表される検索範囲は、バリューマップにおいて連続して出現する。したがって、ひとたび検索条件に合致するノードが出現した後は、検索条件に合致しなくなるまで(ステップ2504でノー(No))、ネクストポインタをたぐってノードを特定し、ノード中の値番号をメモリ中に一時的に記憶すればよい。
バリューマップのノードの値番号の一時的な記憶が終了すると、CPU12は、メモリ中に記憶された値番号を取得し(ステップ2506)、RecNoList中、値番号が示す位置の1以上のノードのそれぞれのレコード番号を取得し、当該レコード番号を、たとえば、メモリ中に生成した配列に格納する(ステップ2507)。この処理を、一時的に記憶された全ての値番号について実行する(ステップ2508)。ステップ2507で取得され、たとえば、配列に格納された一連のレコード番号が検索結果を示すものとなる。さらに、CPU12は、取得されたレコード番号に基づいて、各項目の情報ブロック中、レコード番号が示すAVLの項目値を取り出して、取得されたレコード番号ごとに、各項目の項目値が整列された形式のビューを作成し、表示装置26の画面上に表示する(ステップ2509)。
図26(A)、(B)を参照して、年齢の項目について、「18〜22」という検索条件が与えられた場合の処理について説明する。図26(B)において、CPU12がバリューマップのノードを順次参照すると、値番号「0」を含むノード(符号2601参照)が、項目値「18」に関するものであることがわかる。最終的には、値番号「0」を含むノード、値番号「5」を含むノード、および、値番号「1」を含むノードが、検索条件に合致するため、(0,5,1)という値番号がメモリに一時的に記憶される。
CPU12は、次いで、RecNoList中、「0」の位置に格納されたノード中のレコード番号「0」、「9」を取り出す(図27(B)参照)。その後、CPU12は、RecNoList中、「5」の位置に格納されたノード中のレコード番号「5」と、「1」の位置に格納されたノード中のレコード番号「1」とを取り出す(図27(B)参照)。これにより、検索結果として、(0,9,5,1)という複数のレコード番号を取得することができる。
次に、配列VIdxを利用した検索について説明する。図28は、本実施の形態において配列VIdxを利用した検索処理を示すフローチャートである。図25の処理と同様にCPU12が検索条件を受け付けると(ステップ2801)、CPU12は、配列VIdxを参照して、VIdxに格納された値番号が示す位置のAVLの値(項目値)が検索条件に合致するような、VIdxの要素の範囲を特定し、当該範囲に含まれる値番号をメモリ中に一時的に記憶する(ステップ2802)。配列VIdxの値の参照先は昇順となっている(図29(B)参照)。つまり、VIdxの先頭(格納位置番号「0」)の要素(値番号)「3」が示す位置の、配列AVLの項目値は「16」、次の位置(格納位置番号「1」の要素(値番号)「0」が示す位置の、配列AVLの項目値は「18」である。以後、VIdxの格納位置番号が大きくなるにしたがって、参照される配列AVLの項目値は大きくなっている。したがって、ステップ2802においては、いわゆるバイセクション法を利用して、VIdxの要素の範囲を特定することで、処理を高速化することが可能である。
次いで、CPU12は、メモリ中に記憶された値番号を取得し(ステップ2803)、RecNoList中、値番号が示す位置の1以上のノードのそれぞれのレコード番号を取得し、当該レコード番号を、たとえば、メモリ中に生成した配列に格納する(ステップ2804)。この処理を、一時的に記憶された全ての値番号について実行する(ステップ2805)。ステップ2804で取得され、たとえば、配列に格納された一連のレコード番号が検索結果を示すものとなる。さらに、CPU12は、取得されたレコード番号に基づいて、各項目の情報ブロック中、レコード番号が示すAVLの項目値を取り出して、取得されたレコード番号ごとに、各項目の項目値が整列された形式のビューを作成し、表示装置26の画面上に表示する(ステップ2806)。
図29(A)、(B)を参照して、年齢の項目について、「18〜22」という検索条件が与えられた場合の処理について説明する。図29(B)において、検索条件に合致するVIdxの要素の範囲は、格納位置番号「1〜3」の範囲であると判断される。したがって、その範囲に含まれるVIdxの値番号(0,5,1)がメモリ中に一時的に記憶される。
CPU12は、次いで、RecNoList中、「0」の位置に格納されたノード中のレコード番号「0」、「9」を取り出す(図30(B)参照)。その後、CPU12は、RecNoList中、「5」の位置に格納されたノード中のレコード番号「5」と、「1」の位置に格納されたノード中のレコード番号「1」とを取り出す(図30(B)参照)。これにより、検索結果として、(0,9,5,1)という複数のレコード番号を取得することができる。
このようにして、本実施の形態にかかる情報ブロックを利用した検索を実現することができる。
[ソート処理(単一のソートキー)]
次に、本実施の形態にかかる情報ブロックを利用してソート処理について以下に説明する。まず、レコードの全体集合を対象に単一の項目(ソートキー)でソートする場合に実行される処理について説明する。本実施の形態では、バリューマップを利用したソートと、配列VIdxを利用したソートとを考えることができる。
次に、本実施の形態にかかる情報ブロックを利用してソート処理について以下に説明する。まず、レコードの全体集合を対象に単一の項目(ソートキー)でソートする場合に実行される処理について説明する。本実施の形態では、バリューマップを利用したソートと、配列VIdxを利用したソートとを考えることができる。
まず、バリューマップを使用したソートについて説明する。図31(A)は、本実施の形態においてバリューマップを利用したソート処理を示すフローチャートである。オペレータが入力装置24を操作して、ソートキーを入力すると、CPU12は、当該ソートキーを受け付ける(ステップ3101)。CPU12は、バリューマップのノードを読み込み、各ノードに含まれる値番号を参照し、RecNoList中、当該値番号の位置にあるノードに含まれるレコード番号を取得して、これをメモリ中に一時的に記憶する(ステップ3102)。CPU12は、上記ステップ3102の処理を先頭のノードから開始し、ノード中にネクストポインタがある場合には、当該ネクストポインタをたぐって次のノードを特定し、同様の処理を実行する(ステップ3103、3104参照)。
図32に示す例では、まず、CPU12は、バリューマップの先頭のノード中の値番号「3」に基づいて、RecNoList中、値番号「3」の位置のノードを参照する。値番号「3」の位置の2つのノードには、それぞれ、レコード番号「3」および「6」が含まれるため、CPU12は、メモリ中に(3,6)を一時的に記憶する。全てのバリューマップのノードの値番号にしたがって、RecNoList中のノードのレコード番号を取得すると、メモリ中には、(3,6,0,9,5,1,2,8,4,7)という順序でレコード番号が一時的に記憶される。
CPU12は、取得されたレコード番号の順に、各項目の情報ブロック中、レコード番号が示すAVLの項目値を取り出して、取得されたレコード番号ごとに、各項目の項目値が整列された形式のビューを作成し、表示装置26の画面上に表示する(ステップ3105)。これにより、ソートキーでソートされたビューを取得することができる。図32の例では、(3,6,0,9,5,1,2,8,4,7)というレコード番号の順序で、AVLの項目値を取り出して、ビューを作成すればよい。
次に、配列VIdxを利用したソートについて説明する。図31(B)は、本実施の形態において配列VIdxを利用したソート処理を示すフローチャートである。図31(A)の例と同様に、CPU12は、ソートキーを受け付けると(ステップ3111)、CPU12は、配列VIdxの要素(値番号)を参照し、RecNoList中、当該値番号の位置にあるノードに含まれるレコード番号を取得して、これをメモリ中に一時的に記憶する(ステップ3112)。CPU12は、上記ステップ3112の処理を、配列VIdxの先頭(格納位置番号「0」)の要素から開始し、配列VIdxの全ての要素について処理が施されるまで、処理を繰り返す(ステップ3113、3114参照)。次いで、実行するビュー作成処理(ステップ3115)は、図31(A)のステップ3105と同様である。
図33に示す例では、まず、CPU12は、配列VIdxの先頭(格納位置番号「0」)の要素(値番号)「3」に基づいて、RecNoList中、値番号「3」の位置のノードを参照する。値番号「3」の位置の2つのノードには、それぞれ、レコード番号「3」および「6」が含まれるため、CPU12は、メモリ中に(3,6)を一時的に記憶する。全ての配列VIdx中の要素にしたがって、RecNoList中のノードのレコード番号を取得すると、メモリ中には、(3,6,0,9,5,1,2,8,4,7)という順序でレコード番号が一時的に記憶される。
このように、全てのレコードを対象として単一のソートキーでソートする場合には、バリューマップ或いは配列VIdxを利用することで、非常に簡単にソートされたビューを得ることができる。
[ソート処理(複数のソートキー)]
次に、ソートキーが複数の場合の処理について説明する。本実施の形態においては、優先度の大きなソートキーおよび優先度の小さなソートキーをオペレータが入力し、これにもとづいて、システムのCPU12により処理が実行される。
次に、ソートキーが複数の場合の処理について説明する。本実施の形態においては、優先度の大きなソートキーおよび優先度の小さなソートキーをオペレータが入力し、これにもとづいて、システムのCPU12により処理が実行される。
図34および図35は、複数のソートキーが与えられた場合のソート処理を示すフローチャートである。オペレータが入力装置24を操作して、優先度の低いソートキーおよび優先度の高いソートキーを入力し、その情報をCPU12が受け付けると(ステップ3401)、CPU12は、優先度の低いソートキーについて、ソートされたレコード番号のリストを取得する(ステップ3402)。このレコード番号のリストは、上記ソートキーとなった項目に関して、図31(A)のステップ3102〜3104の処理、或いは、図31(B)のステップ3112〜3114の処理を実行すればよい。
たとえば、論理的に表形式として図36(A)で示されるような例を考えると、詳細な説明は省略するが、図31(A)のステップ3102〜3104の処理或いは図31(B)のステップ3112〜3114の処理を実行することにより、図36(B)に示すようなレコード番号の配列OrdSetを、メモリ上に生成することができる。なお、配列OrdSetは、ソートキーによるソート順が反映されたレコード番号の配列であるため、順序集合配列ということができる。
以下、図34のステップ3403以降のステップは、優先度の高いソートキーに関する処理となる。CPU12は、優先度の高いソートキーの情報ブロック中の配列AVLと同一サイズのカウント配列Countの領域をメモリ中に確保し、カウント配列のそれぞれの要素に初期値「0」を格納する(ステップ3403)。また、CPU12は、配列OrdSetの値の取得位置を特定するための格納位置番号を「0」に初期化する(ステップ3404)。
次いで、CPU12は、配列OrdSet中、格納位置番号が示す位置のレコード番号を取り出し、ソートキーの情報ブロックの配列AVNo中、当該レコード番号が示す位置の値を特定し、さらに、配列VOrd中、先に特定された配列AVNoの値が示す位置の値を取得する。CPU12は、カウント配列中、取得されたVOrdの値の位置の値をインクリメントする(ステップ3405)。CPU12は、配列OrdSetの全ての値について、ステップ3405の処理を実行する(ステップ3406、3407参照)。
図37(A)に示すように、上記例において、配列OrdSet中、格納位置番号「0」の値(レコード番号)は「2」である。この値に基づいて、配列AVNoおよび配列VOrdの値をたどっていくと、配列VOrdの値「4」を得ることができる。そこで、カウント配列において、格納位置番号「4」の位置の値を、「0」から「1」に増大させる。配列OrdSet中の他の値(レコード番号)についても同様の処理を実行することにより、図37(B)に示すようなカウント配列を得ることができる。
カウント配列が完成すると、CPU12は、カウント配列の値を累計数化して累計数配列Aggrをメモリ中に生成する(ステップ3408)。この累計数配列Aggrの値は、その値が格納された格納位置番号より前の、全ての格納位置番号の位置のカウント配列のカウント値の総和に相当する。
図35に示すように、CPU12は、配列OrdSetと同一サイズの第2の順序集合配列OrdSet2をメモリ中に生成する(ステップ3501)。また、CPU12は、配列OrdSetの値の取得位置を特定するための格納位置番号を「0」に初期化する(ステップ3502)。
CPU12は、配列OrdSet中、格納位置番号が示す位置の値を取得し、これを一時的に記憶しておく(ステップ3503)。次いで、CPU12は、配列AVNo中、ステップ3503で取得した配列OrdSetの値の示す位置の値を取得し、その後、配列VOrd中、取得された配列AVNoの値が示す位置の値を取得する。さらに、CPU12は、配列Aggr中、取得された配列VOrdの値の示す位置の値(累計数)を取得する(ステップ3504)。
CPU12は、第2の順序集合配列OrdSet2中、ステップ3504で取得された配列Aggrの値(累計数)が示す位置に、ステップ3503で取得され、一時的に記憶された、配列OrdSetの値を格納する(ステップ3505)。また、CPU12は、ステップ3504で値(累計数)を取得した、Aggr配列中の値をインクリメントする(ステップ3506)。CPU12は、ステップ3503〜ステップ3506に示す処理を、配列OrdSetに格納された全ての値について実行する(ステップ3507、3508参照)。
図39(A)に示すように、配列OrdSetの格納位置番号「0」の値は「2」であり、この値が一時的に記憶される(ステップ3503参照)。また、配列OrdSetの値に基づいて、配列AVNo、VOrdを順にたぐっていくと、Aggr配列中、格納位置番号「4」の値「6」が取得される。したがって、第2の順序集合配列OrdSet2中、格納位置番号「6」の位置に、一時的に記憶された配列OrdSetの値「2」が格納される。また、配列Aggr中、格納位置番号「4」の値「6」がインクリメントされて「7」となる。図39(B)、図40(A)、図40(B)は、それぞれ、配列OrdSetの格納位置番号「1」、「2」および「3」の場合の、図35のステップ3503〜ステップ3506に示す処理を具体的に示す図である。全ては図示しないが、同様の処理を繰り返すことにより、図41に示すような、第2の順序集合配列OrdSet2を得ることができる。
CPU12は、第2の順序集合配列OrdSet2が完成すると、当該OrdSet2に格納されたレコード番号の順に、各項目における情報ブロックのAVLの項目値と取り出して、OrdSet2に格納されたレコード番号の順に、各項目の項目値が整列された形式期のビューを作成し、表示装置26の画面上に表示する(ステップ3509)。このようにして、複数のソートキーでソートされたビューを取得することができる。図42(A)に示すように表される表を、年齢の優先度を高くして、体重および年齢をソートキーとして、図34および図35に示す処理を実行すると、図42(B)に示すビューを得ることが可能である。
[部分集合の場合]
レコードの全体集合ではなく部分集合を対象としたソート処理も実現可能である。たとえば、部分集合をソートする場合には、部分集合に該当するレコードに「1」、それ以外のレコードに「0」を与えたビットマップを作成しておき、ソート後のレコード番号を得る際に、ビットマップを参照して、当該レコード番号が部分集合に属する場合に、当該レコード番号を、結果を示す配列に格納すればよい。図32(B)或いは図33(B)で示した例において、年齢という項目が「21以下」であるようなレコード番号からなる部分集合を対象としてソートを実行することを考える。
レコードの全体集合ではなく部分集合を対象としたソート処理も実現可能である。たとえば、部分集合をソートする場合には、部分集合に該当するレコードに「1」、それ以外のレコードに「0」を与えたビットマップを作成しておき、ソート後のレコード番号を得る際に、ビットマップを参照して、当該レコード番号が部分集合に属する場合に、当該レコード番号を、結果を示す配列に格納すればよい。図32(B)或いは図33(B)で示した例において、年齢という項目が「21以下」であるようなレコード番号からなる部分集合を対象としてソートを実行することを考える。
ここでは、CPU12は、検索処理(図25参照)などを実行して、レコード番号ごとに部分集合に該当する場合には「1」、それ以外の場合には「0」が格納されたビットマップをメモリ上に生成する(図43(A)の符号4301参照)。CPU12は、ソートされたレコード番号の配列OrdSetの値(レコード番号)を参照して、ビットマップ中、OrdSetの値が示す位置のビットが「1」であれば、当該OrdSetの値(レコード番号)を、最終的な配列に格納する。このようにして、図43(B)に示すように、最終的な配列OrdSetを得ることができる。
また、ソート対象となるOrdSetが既に部分集合となっている場合は、複数のソートキーのソート処理で説明した方法を用いる事もできる。
[データ追加処理]
ウェブサーバにおいて、アクセスログを収集するためには、リアルタイムで、多数のレコードが追加される。本実施の形態は、上述したコンパイル処理の一部を実行することにより、レコードの追加を高速に実現することが可能である。実際には、レコードの追加は、N個のレコードのうち、(N−1)個のコンパイル処理が終了した後に、N番目のレコードのコンパイル処理を実行することと同様である。つまり、最後の1つのレコードについてのコンパイル処理を独立して実行すれば、これがデータ追加処理となる。
ウェブサーバにおいて、アクセスログを収集するためには、リアルタイムで、多数のレコードが追加される。本実施の形態は、上述したコンパイル処理の一部を実行することにより、レコードの追加を高速に実現することが可能である。実際には、レコードの追加は、N個のレコードのうち、(N−1)個のコンパイル処理が終了した後に、N番目のレコードのコンパイル処理を実行することと同様である。つまり、最後の1つのレコードについてのコンパイル処理を独立して実行すれば、これがデータ追加処理となる。
図44は、データ追加の際の処理を示すフローチャートである。図44において、ステップ4401は、図9のステップ905に、ステップ4402〜4405は、それぞれ、図9のステップ906〜909に対応する。また、ステップ4406〜ステップ4411は、それぞれ、図10のステップ1001〜1006に対応し、ステップ4412は、図10のステップ1008に対応する。このように、データ追加処理は、単一のレコードについて、項目ごとに、バリューマップのノードを生成すればよい。これにより、高速にレコードを追加し、当該レコードが追加された状態の配列AVNo、AVL、バリューマップを得ることが可能となる。
なお、レコードが追加されると、検索処理やソート処理にて参照され得る配列VOrdおよびVIdxは、再度、図18および図21に示す処理を実行することで、再度生成される必要がある。しかしながら、上述したように、頻繁にレコードが追加される場合には、レコードの追加に伴って、図44に示すデータ追加処理を実行し、上記配列AVNo、AVL、バリューマップを最新の状態にすることができる。これにより、頻繁にレコードが追加された場合にも、レコードが追加された状態でビューを作成し、表示装置26の画面上に作成したビューを表示することが可能となる。また、図18や図21に示す処理は、適当な数のレコードの追加が終了した後に、バッチ処理にて実行し、これにより、新たに配列VOrdおよびVIdxを生成するように構成すれば良い。
[第2のコンパイル処理]
本実施の形態においては、情報ブロックには、配列AVNo、VOrd、AVLおよびVIdx、リンクリストRecNoListおよびバリューマップが含まれる。このような本実施の形態にかかる情報ブロックの配列に基づいて、特許文献1(特許第3581831号)に記載された情報ブロック、特に、昇順の値リストVLを有する情報ブロックを得ることが可能である。本実施の形態にかかる情報ブロックに基づいて、昇順の値リストVLおよび値リストへのポインタ配列VNoを得る処理を、本明細書において第2のコンパイル処理と称する。
本実施の形態においては、情報ブロックには、配列AVNo、VOrd、AVLおよびVIdx、リンクリストRecNoListおよびバリューマップが含まれる。このような本実施の形態にかかる情報ブロックの配列に基づいて、特許文献1(特許第3581831号)に記載された情報ブロック、特に、昇順の値リストVLを有する情報ブロックを得ることが可能である。本実施の形態にかかる情報ブロックに基づいて、昇順の値リストVLおよび値リストへのポインタ配列VNoを得る処理を、本明細書において第2のコンパイル処理と称する。
第2のコンパイル処理においては、配列AVNoに基づく配列VNoへの変換処理と、配列AVLに基づく配列VLへの変換処理とが含まれる。図45は、第2のコンパイル処理におけるVNoへの変換処理を示すフローチャートである。図45に示すように、CPU12は、配列AVNoと同一サイズの配列VNoをメモリ中に生成する(ステップ4501)。図7(B)や図24(B)に示した情報ブロックを例とすると、CPU12は、AVNoと同じサイズ、つまり、10個の値を格納することができるサイズの配列が、メモリ中に生成される。
CPU12は、配列AVNoの値の位置を指定するための格納位置番号を「0」に初期化し(ステップ4502)、配列AVNo中、格納位置番号が示す位置の値を取得し、当該取得した値をメモリ中に一時的に記憶する(ステップ4503)。また、CPU12は、配列VOrd中、一時的に記憶されたAVNoの値が示す位置の値を取得する(ステップ4504)。次いで、CPU12は、配列VNo中、格納位置番号が示す位置に、ステップ4504で取得したVOrdの値を格納する(ステップ4505)。CPU12は、配列AVNoの全ての値について同様の処理を実行する(ステップ4506、4507参照)。図46(A)、(B)〜(D)は、それぞれ、図24(B)に示す情報ブロックについて、格納位置番号「0」、「1」、「8」、「9」の場合の、ステップ4503〜4505の処理を説明する図である。
図47は、第2のコンパイル処理におけるVLへの変換処理を示すフローチャートである。図47に示すように、CPU12は、配列AVLと同一サイズの配列VLをメモリ中に生成する(ステップ4702)。図7(B)や図24(B)の例では、AVLと同じサイズ、つまり、7個の値(項目値)を格納することができるサイズの配列が、メモリ中に生成される。
CPU12は、配列AVLの値の位置を指定するための格納位置番号を「0」に初期化し(ステップ4702)、配列AVL中、格納位置番号が示す位置の値を取得し、当該取得した値をメモリ中に一時的に記憶する(ステップ4703)。また、CPU12は、配列VOrd中、格納位置番号が示す位置の値を取得する(ステップ4704)。次いで、CPU
12は、配列VL中、ステップ4704で取得した配列VOrdの値が示す位置に、ステップ4702で取得されメモリに一時的に記憶された配列AVNoの値を格納する(ステップ4705)。図48(A)〜(D)は、それぞれ、図24(B)に示す情報ブロックについて、格納位置番号「0」、「1」、「5」、「6」の場合の、ステップ4703〜4705の処理を説明する図である。
12は、配列VL中、ステップ4704で取得した配列VOrdの値が示す位置に、ステップ4702で取得されメモリに一時的に記憶された配列AVNoの値を格納する(ステップ4705)。図48(A)〜(D)は、それぞれ、図24(B)に示す情報ブロックについて、格納位置番号「0」、「1」、「5」、「6」の場合の、ステップ4703〜4705の処理を説明する図である。
図7(A)、(B)、および、図8(A)、(B)に示す情報ブロックのそれぞれについて、図45および図47に示す処理を実行することにより、図49(A)〜(D)に示すように、性別、年齢、身長および体重の項目のそれぞれについて、項目値が昇順に格納された値リストVL、および、レコードの順番に、当該値リストの項目値を指定する番号(項目値番号)が格納されたポインタ配列VNoがメモリ中に生成される。たとえば、図49(B)から理解できるように、レコード番号から、当該レコード番号が示す位置のポインタ配列VNoの値を特定し、かつ、値リストVL中、ポインタ配列VNoの値が示す位置の項目値を取得する。これにより、レコード番号と、当該レコード番号と関連付けられた項目値との組を得ることでき、図6に示すような論理的な表(ビュー)を表示装置26の画面上に表示することもできる。
たとえば、レコードが頻繁に追加されるような状況下では、コンピュータシステムは、本実施の形態にかかる、配列AVNoおよびAVLを含む情報ブロック(「第1の情報ブロック」とも称する。)を生成し、レコードの追加にも高速に応答できるようにしておく。その一方、夜間などにバッチ処理により、昇順の値リストVLおよびポインタ配列VNoを有する情報ブロック(「第2の情報ブロック」とも称する。)を生成して、第2の情報ブロックを利用して、検索、集計、ジョインなどの情報処理を実行しても良い。
[バリューマップ]
本実施の形態において、バリューマップは、それぞれ項目値の範囲が与えられた複数のエントリーを有する。各エントリーへの項目値の範囲の割り当てについて以下に説明する。本実施の形態においては、32ビット整数を、対数分割して16ビットの範囲に割り当てる。この場合には、それぞれの範囲の上界を、「S^(n/(N−1))」とする。
本実施の形態において、バリューマップは、それぞれ項目値の範囲が与えられた複数のエントリーを有する。各エントリーへの項目値の範囲の割り当てについて以下に説明する。本実施の形態においては、32ビット整数を、対数分割して16ビットの範囲に割り当てる。この場合には、それぞれの範囲の上界を、「S^(n/(N−1))」とする。
つまり、それぞれの項目値の範囲(以下、「区間0」、「区間1」、・・・と称する。)は以下のように設定される。
区間0:0〜S^(0/(N−1))
区間1:S^(0/(N−1))〜S^(1/(N−1))
区間2:S^(1/(N−1))〜S^(2/(N−1))
:
区間(N−2):S^(N−3/(N−1))〜S^(N−2/(N−1))
区間(N−1):S^(N−2/(N−1))〜S^(N−1/(N−1))
項目値に正負があると考えると、一方の符号側については、15ビットの範囲を割り当てることになる。
区間1:S^(0/(N−1))〜S^(1/(N−1))
区間2:S^(1/(N−1))〜S^(2/(N−1))
:
区間(N−2):S^(N−3/(N−1))〜S^(N−2/(N−1))
区間(N−1):S^(N−2/(N−1))〜S^(N−1/(N−1))
項目値に正負があると考えると、一方の符号側については、15ビットの範囲を割り当てることになる。
以下、S=128=2^7、N=8=2^3という例を考える。
この場合には、区間0〜区間7は、以下のように表される。
区間0:0〜2^0
区間1:2^0〜2^1
区間2:2^1〜2^2
:
区間6:2^5〜2^6
区間7:2^6〜2^7
S=2^31(つまり、符号付きの32ビット整数)の場合には、N=2^15=32768とすればよい。
区間1:2^0〜2^1
区間2:2^1〜2^2
:
区間6:2^5〜2^6
区間7:2^6〜2^7
S=2^31(つまり、符号付きの32ビット整数)の場合には、N=2^15=32768とすればよい。
浮動小数点の分割については、以下のように考える。
正の数と負の数の側に分け、さらに、それぞれの側において、1を中心に絶対値が大きくなる方向と小さくなる方向のそれぞれを対数分割する。つまり、上記区間の考え方を、正の数で絶対値が1より小さい(但し0を含む)、正の数で絶対値が1以上、負の数で絶対値が1より小さい、負の数で絶対値が1以上の4つに適用すればよい。
実際の処理においては、CPU12は、バリューマップをメモリ中に生成する際に、演算を実行して、区間ごとの項目値の範囲を算出して、エントリーごとに項目値の範囲を割り当てても良い。或いは、整数、小数のそれぞれ、考えられるビット数ごとに予め、項目値の範囲をテーブルとしてメモリ中に保持していても良い。
[機能ブロック図]
図50は、本実施の形態にかかるコンピュータシステムの機能ブロック図ある。図50に示すように、コンピュータシステムは、それぞれ、コンパイルプログラム、検索プログラム、ソートプログラム、第2のコンパイルプログラムにより、コンパイル処理を実行するコンパイル処理部4001、検索処理を実行する検索処理部5002、ソート処理を実行するソート処理部5003、および、第2のコンパイル処理を実行する第2のコンパイル処理部5005として機能する。また、コンパイル処理部5001は、データ追加処理を実行するデータ追加処理部5004としても機能する。
図50は、本実施の形態にかかるコンピュータシステムの機能ブロック図ある。図50に示すように、コンピュータシステムは、それぞれ、コンパイルプログラム、検索プログラム、ソートプログラム、第2のコンパイルプログラムにより、コンパイル処理を実行するコンパイル処理部4001、検索処理を実行する検索処理部5002、ソート処理を実行するソート処理部5003、および、第2のコンパイル処理を実行する第2のコンパイル処理部5005として機能する。また、コンパイル処理部5001は、データ追加処理を実行するデータ追加処理部5004としても機能する。
図50に示すように、コンパイル処理部5001は、ハードディスク装置18から、従来の形態で記憶された表形式データを読み込み、図9および図10に示す処理を実行して、配列AVNo、AVLおよびリンクリストをメモリ中に生成し、また、図18および図21に示す処理を実行して、配列VOrdおよびVIdxをメモリ中に生成する。つまり、図50に示すように、コンパイル処理部5001は、従来の形態で記憶された表形式データ5010から第1の情報ブロック5020を生成して、メモリ中に格納する。
検索処理部5002は、メモリから第1の情報ブロック5020を読み出して、図25に示す処理或いは図28に示す処理を実行し、表形式のビューを生成して、表示装置26に表示し、また、当該ビューをメモリなどに記憶する。また、ソート処理部は、メモリから第1の情報ブロック5020を読み出して、図31(A)或いは図31(B)に示す処理を実行して、表形式のビューを生成して、表示装置26に表示し、また、当該ビューをメモリなどに記憶する。
コンパイル処理部がデータ追加部として機能するときには、メモリから第1の情報ブロックを読み出して、配列およびリンクリストを更新して、メモリに戻す。また、第2のコンパイル処理部5005は、メモリから第1の情報ブロック5020を読み出して、第2の情報ブロック5030を生成して、メモリ中に格納する。
[試験結果]
以下、本実施の形態にかかる情報処理方法を用いて、M件(M=10、100、1000、10000、100000、1000000、10000000)の異なる整数を読み込んだ(CSVインポート)ときの処理時間と、量販店などで入手可能な汎用のパーソナルコンピュータ用DBで、同様に、異なる整数を読み込んだとき(比較例)の処理時間を比較した。なお、比較例においてはインデックス構築を行っていない。
以下、本実施の形態にかかる情報処理方法を用いて、M件(M=10、100、1000、10000、100000、1000000、10000000)の異なる整数を読み込んだ(CSVインポート)ときの処理時間と、量販店などで入手可能な汎用のパーソナルコンピュータ用DBで、同様に、異なる整数を読み込んだとき(比較例)の処理時間を比較した。なお、比較例においてはインデックス構築を行っていない。
処理時間の算出のため、コンピュータは以下のような構成とした。
CPU:インテル社 Pentinum(登録商標) 4
クロック:1.59MHz
RAM:1GB
L1キャッシュ:8KB、4 ways associative、64バイト ラインサイズ
L2キャッシュ:256バイト、8 ways associative、64バイト ラインサイズ
図51は、CSVインポートに要した時間を示す図であり、処理時間の単位はミリ秒である。本実施の形態にかかる情報処理方式によれば、実施的にインデックスが構築される。本実施の形態によれば、インデックス構築を含む手法であっても、たとえば、1,000,000個の整数をCSVインポートするために、約2.67秒しか要さない。これは、約21.72秒を要する比較例の8倍の速度である。
クロック:1.59MHz
RAM:1GB
L1キャッシュ:8KB、4 ways associative、64バイト ラインサイズ
L2キャッシュ:256バイト、8 ways associative、64バイト ラインサイズ
図51は、CSVインポートに要した時間を示す図であり、処理時間の単位はミリ秒である。本実施の形態にかかる情報処理方式によれば、実施的にインデックスが構築される。本実施の形態によれば、インデックス構築を含む手法であっても、たとえば、1,000,000個の整数をCSVインポートするために、約2.67秒しか要さない。これは、約21.72秒を要する比較例の8倍の速度である。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
10 コンピュータシステム
12 CPU
14 RAM
16 ROM
18 固定記憶装置
20 ドライバ
22 I/F
24 入力装置
26 表示装置
5001 コンパイル処理部
5002 検索処理部
5003 ソート処理部
5004 データ追加処理部
5005 第2のコンパイル処理部
12 CPU
14 RAM
16 ROM
18 固定記憶装置
20 ドライバ
22 I/F
24 入力装置
26 表示装置
5001 コンパイル処理部
5002 検索処理部
5003 ソート処理部
5004 データ追加処理部
5005 第2のコンパイル処理部
Claims (48)
- 複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理方法であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を備えたことを特徴とする情報処理方法。 - 前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストであることを特徴とする請求項1に記載の情報処理方法。
- 前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを有することを特徴とする請求項2に記載の情報処理方法。 - さらに、前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加するステップを備えたことを特徴とする請求項1ないし3の何れか一項に記載の情報処理方法。
- さらに、各項目に関する項目値を含む単一のレコードを受け付けるステップを備えたことを特徴とする請求項1ないし4の何れか一項に記載の情報処理方法。
- さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップを備えたことを特徴とする請求項1ないし5の何れか一項に記載の情報処理方法。
- さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップを備えたことを特徴とする請求項1ないし6の何れか一項に記載の情報処理方法。
- さらに、検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えたことを特徴とする請求項4に記載の情報処理方法。 - さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を備えたことを特徴とする請求項4に記載の情報処理方法。 - さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えたことを特徴とする請求項4に記載の情報処理方法。 - さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を備えたことを特徴とする請求項4に記載の情報処理方法。 - さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えたことを特徴とする請求項4に記載の情報処理方法。 - さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を備えたことを特徴とする請求項4に記載の情報処理方法。 - さらに、前記記憶装置中に、前記項目値番号指定配列と同一サイズの第2の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第2の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納するステップと、
前記記憶装置中に、前記値リストと同一サイズの第2の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第2の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を備えたことを特徴とする請求項1に記載の情報処理方法。 - 前記項目値の取りうる範囲を対数分割するステップと、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を備えたことを特徴とする請求項3に記載の情報処理方法。 - 0からSまでの整数を、N個に対数分割する際の範囲が、
0〜S^(0/(N−1))
S^(0/(N−1)〜S^(1/(N−1))
S^(1/(N−1)〜S^(2/(N−1))
:
S^(N−3/(N−1)〜S^(N−2/(N−1))
S^(N−2/(N−1)〜S^(N−1/(N−1))
であることを特徴とする請求項15に記載の情報処理方法。 - 複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成する情報処理装置であって、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加する値リスト更新手段と、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納する項目値番号格納手段と、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するバリューマップ・ノード追加手段と、を備えたことを特徴とする情報処理装置。 - 前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストであることを特徴とする請求項17に記載の情報処理装置。
- 前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記バリューマップ・ノード追加手段が、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成することを特徴とする請求項18に記載の情報処理装置。 - さらに、前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加する、レコード番号リスト・ノード追加手段を備えたことを特徴とする請求項17ないし19の何れか一項に記載の情報処理装置。
- さらに、各項目に関する項目値を含む単一のレコードを受け付けるレコード受付手段を備えたことを特徴とする請求項17ないし20の何れか一項に記載の情報処理装置。
- さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段を備えたことを特徴とする請求項17ないし21の何れか一項に記載の情報処理装置。
- さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段を備えたことを特徴とする請求項17ないし22の何れか一項に記載の情報処理装置。
- さらに、検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定する値番号特定手段と、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えたことを特徴とする請求項20に記載の情報処理装置。 - さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記検索条件を示す項目値或いは項目値の範囲を受け付ける検索条件受付手段と、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定する値番号特定手段と、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成する検索結果格納配列生成手段と、を備えたことを特徴とする請求項20に記載の情報処理装置。 - さらに、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えたことを特徴とする請求項20に記載の情報処理装置。 - さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するソート結果格納配列生成手段と、を備えたことを特徴とする請求項20に記載の情報処理装置。 - さらに、前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第1のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第2のソート結果格納配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えたことを特徴とする請求項20に記載の情報処理装置。 - さらに、前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納する値インデックス配列生成手段と、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納する値順序配列生成手段と、
ソートキーとなる項目の情報およびその優先度を受け付けるソートキー情報受付手段と、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するレコード番号リスト・ノード特定手段と、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成する第1のソート結果格納配列生成手段と、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するカウント配列生成手段と、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成する累計数配列生成手段と、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納する第2のソート結果配列生成手段と、
前記特定された累計数配列の値をインクリメントする累計数配列調整手段と、を備えたことを特徴とする請求項20に記載の情報処理装置。 - さらに、前記記憶装置中に、前記項目値番号指定配列と同一サイズの第2の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第2の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納する第2の項目値番号配列生成手段と、
前記記憶装置中に、前記値リストと同一サイズの第2の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第2の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納する第2の値リスト生成手段と、を備えたことを特徴とする請求項17に記載の情報処理装置。 - 前記項目値の取りうる範囲を対数分割する範囲決定手段と、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てる範囲割り当て手段と、を備えたことを特徴とする請求項19に記載の情報処理装置。 - 0からSまでの整数を、N個に対数分割する際の範囲が、
0〜S^(0/(N−1))
S^(0/(N−1)〜S^(1/(N−1))
S^(1/(N−1)〜S^(2/(N−1))
:
S^(N−3/(N−1)〜S^(N−2/(N−1))
S^(N−2/(N−1)〜S^(N−1/(N−1))
であることを特徴とする請求項31に記載の情報処理装置。 - 複数の項目において、各項目に関連する項目値を含むレコードの配列として記憶装置に記憶された表形式データから、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納される値リストであって、前記項目値が、レコードの出現順に格納された値リストと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値指定情報配列と、を前記記憶装置中に生成するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
前記記憶装置に記憶された表形式データを読み出し、処理対象となる項目について、レコードに、新たな項目値が出現するごとに、前記値リストの末尾に、前記新たな項目値を追加するステップと、
前記項目値番号指定配列中、前記レコードに対応する位置に、当該レコードに含まれる項目値が格納された項目値番号を格納するステップと、
項目値の出現順に、その出現順位を表す値番号、および、値番号を順番にたどるための情報を有するノードを含むリンク構造を備えたバリューマップを参照して、前記新たな項目値が出現するごとに、前記バリューマップ中に、前記ノードを追加するステップと、を実行させることを特徴とするコンピュータプログラム。 - 前記ノードが、項目値の出現順位を表す値番号、および、次の大きさの項目値に関するノードへのネクストポインタを有するようなリンクリストであることを特徴とする請求項33に記載のプログラム。
- 前記バリューマップが、項目値の所定の範囲が割り当てられた複数のエントリーを有し、
前記コンピュータに、前記新たな項目値が出現するごとに、前記項目値が属するエントリーに、新たなノードを生成するステップを実行させることを特徴とする請求項34に記載のプログラム。 - さらに、前記コンピュータに、
前記項目値番号ごとに、当該項目値番号に対応する項目値を有するレコード番号、および、同一の項目値を有する他のレコード番号を格納したノードへのネクストポインタを有するレコード番号リストを参照して、同一の項目値が複数回出現したときに、前記レコード番号リスト中に、新たなノードを追加するステップを実行させることを特徴とする請求項33ないし35の何れか一項に記載のプログラム。 - さらに、前記コンピュータに、
各項目に関する項目値を含む単一のレコードを受け付けるステップを実行させることを特徴とする請求項33ないし36の何れか一項に記載のプログラム。 - さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップを実行させることを特徴とする請求項33ないし37の何れか一項に記載のプログラム。 - さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップを実行させることを特徴とする請求項33ないし38の何れか一項に記載のプログラム。 - さらに、前記コンピュータに、
検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記バリューマップのノードを順次参照して、検索条件に合致する値番号を特定するステップと、
前記レコード番号リストのノード中、前記値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させることを特徴とする請求項36に記載のプログラム。 - さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記検索条件を示す項目値或いは項目値の範囲を受け付けるステップと、
前記値インデックス配列を参照して、前記検索条件に合致する値番号の範囲を特定するステップと、
前記値インデックス配列中、前記値番号の範囲に属する値番号に基づいて、前記レコード番号リストのノード中、前記値番号を有するノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する検索結果格納配列を生成するステップと、を実行させることを特徴とする請求項36に記載のプログラム。 - さらに、前記コンピュータに、
前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させることを特徴とする請求項36に記載のプログラム。 - さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納するソート結果格納配列を生成するステップと、を実行させることを特徴とする請求項36に記載のプログラム。 - さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記バリューマップのノードを順次参照して、前記レコード番号リスト中、当該バリューマップのノード中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させることを特徴とする請求項36に記載のプログラム。 - さらに、前記コンピュータに、
前記記憶装置に生成された、前記値リストと同じサイズの値インデックス配列中、前記バリューマップのノードの出現順に、当該ノード中の値番号を格納するステップと、
前記記憶装置に生成された、前記値リストと同じサイズの値順序配列中、前記バリューマップのノード中の値番号が示す位置に、前記バリューマップのノードの出現順を示す値を格納するステップと、
ソートキーとなる項目の情報およびその優先度を受け付けるステップと、
優先度の低いソートキーについて、前記値インデックス配列を参照して、前記レコード番号リスト中、前記値インデックス配列中の値番号が示す位置のノードを特定するステップと、
前記記憶装置中に、前記レコード番号リストにおいて特定されたノード中のレコード番号を、その出現順に格納する一次的なソート結果格納配列を生成するステップと、
前記優先度の高いソートキーについて、前記一次的なソート結果格納配列中の値を参照して、前記記憶装置中に、値番号ごとに、その出現回数を示すカウント値を格納したカウント配列を生成するステップと、
前記記憶装置中に、前記カウント配列中のカウント値を累計数化した累計数を格納した累計数配列を生成するステップと、
前記記憶装置中に、前記一時的なソート結果格納配列と同一サイズのソート結果格納配列を生成し、前記ソート結果格納配列中、前記一次的なソート結果格納配列中の値を、当該ソート結果格納配列中の値から、項目値番号指定配列、値順序配列および累計数配列を順次たどって特定された、前記累計数配列の値が示す位置に格納するステップと、
前記特定された累計数配列の値をインクリメントするステップと、を実行させることを特徴とする請求項36に記載のプログラム。 - さらに、前記コンピュータに、
前記記憶装置中に、前記項目値番号指定配列と同一サイズの第2の項目値番号指定配列を生成し、前記項目値番号指定配列中の項目値番号を順次参照して、前記値順序配列中の、前記項目値番号の位置の値を、前記第2の項目値番号配列中、前記項目値番号指定配列における値の参照位置と同じ位置に格納するステップと、
前記記憶装置中に、前記値リストと同一サイズの第2の値リストを生成し、前記値リスト中の項目値を順次参照して、前記値順序配列中の、前記値リストの項目値の参照位置の項目値番号を取得し、前記第2の値リスト中、前記取得した項目値番号の位置に、前記値リスト中の項目値を格納するステップと、を実行させることを特徴とする請求項33に記載のプログラム。 - 前記コンピュータに、前記項目値の取りうる範囲を対数分割するステップと、
前記バリューマップのエントリーのそれぞれに、前記対数分割された範囲を割り当てるステップと、を実行させることを特徴とする請求項35に記載のプログラム。 - 0からSまでの整数を、N個に対数分割する際の範囲が、
0〜S^(0/(N−1))
S^(0/(N−1)〜S^(1/(N−1))
S^(1/(N−1)〜S^(2/(N−1))
:
S^(N−3/(N−1)〜S^(N−2/(N−1))
S^(N−2/(N−1)〜S^(N−1/(N−1))
であることを特徴とする請求項47に記載のプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005220054A JP2007034878A (ja) | 2005-07-29 | 2005-07-29 | 情報処理方法、情報処理装置および情報処理プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005220054A JP2007034878A (ja) | 2005-07-29 | 2005-07-29 | 情報処理方法、情報処理装置および情報処理プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2007034878A true JP2007034878A (ja) | 2007-02-08 |
JP2007034878A5 JP2007034878A5 (ja) | 2007-11-15 |
Family
ID=37794033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005220054A Pending JP2007034878A (ja) | 2005-07-29 | 2005-07-29 | 情報処理方法、情報処理装置および情報処理プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007034878A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011099114A1 (ja) * | 2010-02-09 | 2011-08-18 | 株式会社ターボデータラボラトリー | ハイブリッド型データベースシステム及びその動作方法 |
JP4881435B2 (ja) * | 2007-06-21 | 2012-02-22 | 株式会社ターボデータラボラトリー | メモリ共有型並列処理システムにおいて表形式データを集計する方法及び装置 |
WO2014002161A1 (ja) * | 2012-06-25 | 2014-01-03 | 富士通株式会社 | 情報処理装置、ファイル管理方法、及びファイル管理プログラム |
WO2018066329A1 (ja) * | 2016-10-03 | 2018-04-12 | 日立オートモティブシステムズ株式会社 | 車載電子制御装置 |
CN113051009A (zh) * | 2019-12-27 | 2021-06-29 | 西安诺瓦星云科技股份有限公司 | 设备排序方法、装置和系统以及计算机可读存储介质 |
WO2022201354A1 (ja) * | 2021-03-24 | 2022-09-29 | 晋二 古庄 | 情報処理システム及び情報処理方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63298626A (ja) * | 1987-05-29 | 1988-12-06 | Matsushita Electric Ind Co Ltd | デ−タベ−ス管理方法 |
WO2000010103A1 (fr) * | 1998-08-11 | 2000-02-24 | Shinji Furusho | Procede et dispositif de recuperation, de stockage et de triage de donnees formatees en tableaux |
JP2001028001A (ja) * | 1999-07-15 | 2001-01-30 | Nec Corp | 複数テーブルにわたるキーワード検索方法 |
WO2005041067A1 (ja) * | 2003-10-27 | 2005-05-06 | Shinji Furusho | 分散メモリ型情報処理システム |
-
2005
- 2005-07-29 JP JP2005220054A patent/JP2007034878A/ja active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63298626A (ja) * | 1987-05-29 | 1988-12-06 | Matsushita Electric Ind Co Ltd | デ−タベ−ス管理方法 |
WO2000010103A1 (fr) * | 1998-08-11 | 2000-02-24 | Shinji Furusho | Procede et dispositif de recuperation, de stockage et de triage de donnees formatees en tableaux |
JP2001028001A (ja) * | 1999-07-15 | 2001-01-30 | Nec Corp | 複数テーブルにわたるキーワード検索方法 |
WO2005041067A1 (ja) * | 2003-10-27 | 2005-05-06 | Shinji Furusho | 分散メモリ型情報処理システム |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4881435B2 (ja) * | 2007-06-21 | 2012-02-22 | 株式会社ターボデータラボラトリー | メモリ共有型並列処理システムにおいて表形式データを集計する方法及び装置 |
WO2011099114A1 (ja) * | 2010-02-09 | 2011-08-18 | 株式会社ターボデータラボラトリー | ハイブリッド型データベースシステム及びその動作方法 |
JPWO2011099114A1 (ja) * | 2010-02-09 | 2013-06-13 | 株式会社ターボデータラボラトリー | ハイブリッド型データベースシステム及びその動作方法 |
WO2014002161A1 (ja) * | 2012-06-25 | 2014-01-03 | 富士通株式会社 | 情報処理装置、ファイル管理方法、及びファイル管理プログラム |
JPWO2014002161A1 (ja) * | 2012-06-25 | 2016-05-26 | 富士通株式会社 | 情報処理装置、ファイル管理方法、及びファイル管理プログラム |
US10339104B2 (en) | 2012-06-25 | 2019-07-02 | Fujitsu Limited | Information processing apparatus, file management method, and computer-readable recording medium having stored therein file management program |
CN109789878A (zh) * | 2016-10-03 | 2019-05-21 | 日立汽车系统株式会社 | 车载电子控制装置 |
JPWO2018066329A1 (ja) * | 2016-10-03 | 2019-06-24 | 日立オートモティブシステムズ株式会社 | 車載電子制御装置 |
WO2018066329A1 (ja) * | 2016-10-03 | 2018-04-12 | 日立オートモティブシステムズ株式会社 | 車載電子制御装置 |
US11130500B2 (en) | 2016-10-03 | 2021-09-28 | Hitachi Automotive Systems, Ltd. | In-vehicle electronic control apparatus |
CN109789878B (zh) * | 2016-10-03 | 2022-04-29 | 日立安斯泰莫株式会社 | 车载电子控制装置 |
CN113051009A (zh) * | 2019-12-27 | 2021-06-29 | 西安诺瓦星云科技股份有限公司 | 设备排序方法、装置和系统以及计算机可读存储介质 |
CN113051009B (zh) * | 2019-12-27 | 2024-01-09 | 西安诺瓦星云科技股份有限公司 | 设备排序方法、装置和系统以及计算机可读存储介质 |
WO2022201354A1 (ja) * | 2021-03-24 | 2022-09-29 | 晋二 古庄 | 情報処理システム及び情報処理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4848317B2 (ja) | データベースのインデックス作成システム、方法及びプログラム | |
Yagoubi et al. | Massively distributed time series indexing and querying | |
US7818303B2 (en) | Web graph compression through scalable pattern mining | |
JPH11212980A (ja) | インデクス作成方法および検索方法 | |
WO2007085187A1 (fr) | Procédé d'extraction de données, procédé de production de fichiers d'index et moteur de recherche | |
CN108399213B (zh) | 一种面向用户个人文件的聚类方法及系统 | |
JP2007034878A (ja) | 情報処理方法、情報処理装置および情報処理プログラム | |
US10545960B1 (en) | System and method for set overlap searching of data lakes | |
JP4758429B2 (ja) | 共有メモリ型マルチプロセッサシステム及びその情報処理方法 | |
JPH09245043A (ja) | 情報検索装置 | |
CN106599122B (zh) | 一种基于垂直分解的并行频繁闭序列挖掘方法 | |
JP4511469B2 (ja) | 情報処理方法及び情報処理システム | |
JP6705764B2 (ja) | 生成装置、生成方法、及び生成プログラム | |
Li et al. | On mining webclick streams for path traversal patterns | |
KR100538451B1 (ko) | 분산 컴퓨팅 환경에서의 유전자 및 단백질 유사서열 검색시스템 및 그 방법 | |
de Armas et al. | K-mer Mapping and de Bruijn graphs: the case for velvet fragment assembly | |
JP3859044B2 (ja) | インデクス作成方法および検索方法 | |
CN113641705A (zh) | 一种基于计算引擎的营销处置规则引擎方法 | |
CN110309367B (zh) | 信息分类的方法、信息处理的方法和装置 | |
CN112328630A (zh) | 数据查询方法、装置、设备及存储介质 | |
JP2001022766A (ja) | 多次元データベースの高速処理方法および装置 | |
JP2020135530A (ja) | データ管理装置、データ検索方法及びプログラム | |
CN115168661B (zh) | 原生图数据处理方法、装置、设备及存储介质 | |
JP7260934B2 (ja) | 生物学的配列に基づく負の配列パターンの類似性分析方法、その実装システム及び媒体 | |
JP4772506B2 (ja) | 情報処理方法、情報処理システムおよびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070927 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070927 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100511 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20101026 |