(57)【特許請求の範囲】
【請求項１】
同一識別子を有する行集合が隣接するセグメントに配置されている表である重複ＩＤ連続配置表の重複ＩＤ連続配置表名と管理番号を管理し、列の値が重複する重複ＩＤを持つデータが連続配置となるように配置管理する対象である表を登録する重複ＩＤ連続配置表識別表、および前記重複ＩＤ連続配置表名と重複キー列名を管理する重複ＩＤ連続配置表ＩＤ管理表をデータ列として読み書きする情報処理装置に、データベースの管理処理を実行させるデータベース管理プログラムであって、
前記重複ＩＤ連続配置表に基づき、単一もしくは複数の列からなるキー列の値が重複する行をストレージ上の連続した領域に配置するステップと、
前記重複ＩＤ連続配置表識別表と前記重複ＩＤ連続配置表ＩＤ管理表に従い前記重複ＩＤ連続配置表と重複キー列を認識するステップと、
前記ストレージ上の重複キー列の値が等しい行が配置された領域の連続した空きの有無を判定するステップと、
前記ストレージ上の重複キー列の値が等しい行が配置された領域の連続した空きの有無を判定するステップにおいて、前記連続した空きが無いと判定された場合に、前記重複キー列の値が等しい行全体よりも容量の大きい連続した空き領域を探索するステップと、
探索によって空き領域が見つかった場合に前記重複キー列の値が等しい行全体を空き領域に移動させるステップとを前記情報処理装置に実行させることを特徴とするデータベース管理プログラム。
【請求項２】
同一識別子を有する行集合が隣接するセグメントに配置されている表である重複ＩＤ連続配置表の重複ＩＤ連続配置表名と管理番号を管理し、列の値が重複する重複ＩＤを持つデータが連続配置となるように配置管理する対象である表を登録する重複ＩＤ連続配置表識別表、前記重複ＩＤ連続配置表名と重複キー列名を管理する重複ＩＤ連続配置表ＩＤ管理表、および前記重複ＩＤ連続配置表名と前記重複キー列名とキー次数を管理する重複ＩＤ連続配置表親子関係管理表をデータ列として読み書きする情報処理装置に、データベースの管理処理を実行させるデータベース管理プログラムであって、
前記重複ＩＤ連続配置表に基づき、前記重複ＩＤ連続配置表親子関係管理表に従い単一もしくは複数の列からなる１次キー列の値が重複する行をストレージ上の連続した領域に配置するステップと、
前記重複ＩＤ連続配置表親子関係管理表に従い昇順に高次キー列の値が重複する行もストレージ上の連続した領域に配置するステップと、
前記重複ＩＤ連続配置表識別表と前記重複ＩＤ連続配置表ＩＤ管理表と前記重複ＩＤ連続配置表親子関係管理表に従い重複ＩＤ連続配置表を認識するステップと、
前記ストレージ上の１次若しくは高次の重複キー列の値が等しい行が配置された領域の連続した空きの有無を判定するステップと、
前記ストレージ上の１次若しくは高次の重複キー列の値が等しい行が配置された領域の連続した空きの有無を判定するステップにおいて、前記連続した空きが無いと判定された場合に、各次数の重複キー列の値が等しい行全体よりも容量の大きい連続した空き領域を探索するステップと、
探索によってある次数の重複キー列の値が等しい行全体よりも容量の大きい空き領域が見つかった場合に、もっとも高い次数の重複キー列の値が等しい行全体を１次のキー列の値を用いて昇順に空き領域に移動させるステップとを前記情報処理装置に実行させることを特徴とするデータベース管理プログラム。
【請求項３】
請求項２記載のデータベース管理プログラムにおいて、
前記重複ＩＤ連続配置表親子関係管理表に基づき、重複ＩＤ連続配置表名と重複キー列名と親子関係の条件とキー次数を管理するステップと、
前記重複ＩＤ連続配置表を構成する単一の列の中に親子関係の条件を用いて、キー次数の上下関係をもたせるステップとを前記情報処理装置に実行させることを特徴とするデータベース管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ領域を細分化したデータベース管理システム（ＤＢＭＳ）に関するものであり、特に組込み機器向けのＤＢＭＳのデータベース管理プログラムに関するものである。
【背景技術】
【０００２】
大容量ストレージを持つ組込み機器に関して、カーナビゲーションシステム／ミュージックプレイヤー／ＨＤＤレコーダといった多くの応用においてリスト取得が多用される。【０００３】
特にカーナビではＣＤ／ＤＶＤといったシークが極端に遅いＩ／Ｏデバイスを用いてリスト取得をリアルタイム処理することに重点を置いた専用ファイルシステムを用いており、リスト表示されるデータがディスク上の連続領域に位置するように工夫されている。しかし、この専用ファイルシステムは更新操作のないデバイス向けに設計されており、ＨＤＤに代表される更新可能なデバイスを用いて更新を行った場合、更新処理の度に全データの並び替えが発生する。【０００４】
また、ＤＢＭＳにもデータを連続領域に配置させる機能として、表を構成する特定のクラスタキー列に関して物理的にデータがソートされていることを保障するクラスタ表がある。これは、例えば非特許文献１に示されている。【０００５】
ここで従来の図４に示すページとセグメントからなるストレージ領域管理を前提としたＤＢＭＳにおけるクラスタ表の実施例を以下に説明する。【０００６】
ここでは、ページ（５００２）はストレージ領域（５００１）へのデータ入出力の最小単位を表す物理的な単位であり、セグメント（５００３、５００４）は表やインデックスに領域を割り当てる際の最小単位を表す物理的な単位である。セグメントは複数のページによって構成される。クラスタ表とストレージ領域の関係は図５のようになる。クラスタ表（６００１）は通番列（６００２）をクラスタキー列とするクラスタ表であり、ストレージ領域（６００７）上のセグメントが割り当てられている。クラスタ表（６００１）のうち列（６００３、６００４、６００５）はストレージ領域（６００７）上のセグメント（６０１４）に格納されており、列（６００６）は別のセグメント（６０１５）が割り当てられている。このように、通番列をクラスタキー列とした場合には通番列に関して物理的にデータがソートされる。セグメント（６０１４、６０１５）には将来の挿入操作に備えてそれぞれ空き領域（６０１２、６０１３）  が確保されている。【０００７】
クラスタ表へ挿入操作を行う場合には、物理的にデータがソートされた状態を維持する事が要求されるため、通常の表とは異なる方法で挿入を行う。クラスタ表へ挿入操作を行う方法を図６に示すフローチャートを用いて説明する。挿入操作を実行するｉｎｓｅｒｔ処理（７００１）では、まず挿入する行のサイズとストレージ領域の空き領域のサイズを比較し、挿入可能か否か判断（７００２）を行う。ここで挿入可能でない場合はエラー（７０１２）としてｉｎｓｅｒｔ処理を終了（７００９）する。挿入可能である場合は、ストレージ領域内でクラスタキーの値が等しいか小さい行の中で最大のものが含まれるセグメントを探索（７００３）し、そのセグメント内に行を挿入する空きがあるか否か判断（７００４）を行う。空きがあった場合にはＡ（７０１３）の手順をたどる。ここではまず該当表に関するインデックスの排他を取得（７００５）し、その後セグメント内の空き領域に行を挿入（７００６）し、インデックスを更新（７００７）し、インデックスの排他を開放（７００８）し、ｉｎｓｅｒｔ処理を終了（７００９）する。  Ａ（７０１３）の手順に従いクラスタキーが１２の行を挿入する場合の動作例を図７に示す。ここではクラスタキーが等しい行（８００４）を含むセグメント（８００２）にまだ空き領域（８００５）があるため、同一セグメントの空き領域にクラスタキーが１２の行（８００６）を挿入している。【０００８】
一方、同一セグメント内に行を挿入する空きがあるか否か判断（７００４）において空き領域がなかった場合にはＢ（７０１４）の手順をたどる。  ここではまず該当表に関するインデックスの排他を取得（７０１０）し、その後新規セグメントに行を挿入（７０１１）し、インデックスの排他を開放（７００７）し、ｉｎｓｅｒｔ処理を終了（７００９）する。  Ｂ（８０１４）の手順に従いクラスタキーが１２の行を挿入する場合の動作例を図８に示す。ここではクラスタキーが等しい行（９００４）を含むセグメント（９００２）にもう空き領域がないため、新規セグメント（９００５）を確保し、そこにクラスタキーが１２の行（９００６）を挿入している。【０００９】
クラスタ表を用いることで、クラスタキー値の範囲を指定した検索を行う際にストレージ入出力がシーケンシャル化されるため、検索が高速化される。しかし、その一方で表作成時の空き領域以上の更新および挿入操作によって図８のように物理的にデータがソートされた状態が破壊されるため、定期的なメンテナンスが必要となる。このメンテナンスも先の専用ファイルシステムにおける更新操作と同じく全データの並び替えとなる。【００１０】
組み込み用途向けＤＢＭＳ上で、従来方式の更新不可能な専用ファイルシステムと比較して遜色のないデータ入出力性能を達成するためには、同じく物理的な連続領域にデータを配置する必要がある。しかし、組み込み用途においてはメンテナンスフリーかつ長期にわたる性能安定性が重視されるため、既存のクラスタ表をそのまま用いることはできない。  そこで組み込み用途におけるリスト取得と呼ばれるパターンのデータ取得に特化して入出力性能を改善する表構造が望まれる。【００１１】
ここで、カーナビ用途を例にリスト取得の特徴を、図９を用いて説明する。カーナビでは地図情報の１つとして交差点データを扱う。交差点データはユニークな識別子を持つ区画（１０００１）に分割して管理される。カーナビ用途では交差点データのリスト取得が最もリアルタイム性を要求される。これは経路探索時に行われ、以下の２つのパターンがある。
１．自車を含む区画（１０００２）内の交差点リスト取得
２．自車を中心とした近傍９区画（１０００３）内の交差点リスト取得。【００１２】
ここで、カーナビ専用ファイルシステムを用いた場合に全てのデータが連続領域に配置されているのは１．のパターンであり、２．のパターンも含めて全データを連続領域に配置することは不可能である。そのため、組み込み用途に特化したＤＢＭＳにおいても１．のパターンが連続領域に配置されることを保証すれば十分である。【００１３】
また、２つのパターンに共通する特徴として、検索条件が区画番号の等号条件であり、検索対象データ中に同一区画番号を持つ複数の交差点が存在することが挙げられる。この特徴をＤＢＭＳの用語で言い換えると、重複キーを含む列に関する等号条件の検索になる。【００１４】
なお、カーナビ用途以外においても同様のリスト取得は頻繁に現れる。例えばミュージックプレイヤー用途では「同一アーティストの曲一覧」や「同一アルバム収録曲一覧」が、ＨＤＤレコーダ用途では「＊月＊日の番組一覧」や「＊ｃｈの番組一覧」といったリスト取得が現れる。
【非特許文献１】［製品マニュアル］スケーラブルデータベースサーバ  ＨｉＲＤＢ  Ｖｅｒｓｉｏｎ７  システム導入・設計ガイド（ＵＮＩＸ（ｒ）用）３０００−６−２７２，１２．９  クラスタキーの指定，ｐｐ．３４２〜３４３
【発明の開示】
【発明が解決しようとする課題】
【００１５】
しかしながら、関係データベースを用いて単一もしくは複数の列Ａの値が重複する行集合を管理する場合において、列Ａを条件とする検索を高速化する目的で初期状態として列Ａの値が重複する行を連続領域に配置した場合においても、行の挿入や削除および更新を繰り返すと、列Ａの値が重複する行が連続領域に配置された状態が破壊され、列Ａを条件とする検索の所要時間が長くなり、従来手法を用いてこの問題を解決する場合に、全ての行の再整列が必要となり、長時間を要していた。【００１６】
そこで、本発明の目的は、列Ａを条件とする検索を高速化する目的で初期状態として列Ａの値が重複する行を連続領域に配置した場合においても、行の挿入や削除および更新を繰り返しても列Ａを条件とする検索の所要時間が長くならず、かつ従来手法を用いてこの問題を解決する場合のような長時間を要する再整列を必要としないデータベース管理プログラムを提供する。
【課題を解決するための手段】
【００１７】
本発明のデータベース管理プログラムは、行の挿入や削除および更新を行う場合に、ストレージ上の列Ａの値が等しい行が配置された領域に連続した空きが見つからなかった際に、列Ａの値が等しい行全体よりも容量の大きい連続した空き領域を探索する手順と、探索によって空き領域が見つかった場合に列Ａの値が等しい行全体を空き領域に移動させる手順を含むことを特徴とするアルゴリズムを用いて列Ａの値が重複する行集合のみを連続領域に配置する。
【発明の効果】
【００１８】
本発明によれば、関係データベースを用いて単一もしくは複数の列Ａの値が重複する行集合を管理する場合において、列Ａを条件とする検索を高速化する目的で初期状態として列Ａの値が重複する行を連続領域に配置した場合、行の挿入や削除および更新を繰り返しても列Ａを条件とする検索の所要時間が長くならず、かつ従来手法を用いてこの問題を解決する場合のような長時間を要する再整列を必要としない。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施例１のデータベース管理システムの構成を示したブロック図である。
【図２】本発明の実施例１の重複ＩＤ連続配置表識別表を示すデータ構成図である。
【図３】本発明の実施例１の重複ＩＤ連続配置表ＩＤ管理表を示す構成図である。
【図４】従来方式であるクラスタ表の実施例におけるページとセグメントからなるストレージ領域管理方法を示した説明図である。
【図５】従来方式であるクラスタ表の実施例におけるクラスタ表とストレージ領域の関係を示した説明図である。
【図６】従来方式であるクラスタ表の実施例におけるクラスタ表への挿入操作のフローチャートを示した説明図である。
【図７】従来方式であるクラスタ表の実施例におけるクラスタ表への挿入操作のフローチャート内の手順Ａの例を示した説明図である。
【図８】従来方式であるクラスタ表の実施例におけるクラスタ表への挿入操作のフローチャート内の手順Ｂの例を示した説明図である。
【図９】カーナビ用途を例に従来方式のリスト取得の特徴を示した説明図である。
【図１０】本発明の実施例１における重複キーを含む表の構成の例を示した説明図である。
【図１１】本発明の実施例１における重複ＩＤ連続配置表のストレージ領域上での構成を示した説明図である。
【図１２】本発明の実施例１における重複ＩＤ連続配置表のストレージ領域上での構成の略図の例を示した説明図である。
【図１３】本発明の実施例１における重複ＩＤ連続配置表への挿入操作のフローチャートを示した説明図である。
【図１４】本発明の実施例１における重複ＩＤ連続配置表への挿入操作のフローチャート内の手順Ａの例を示した説明図である。
【図１５】本発明の実施例１における重複ＩＤ連続配置表への挿入操作のフローチャート内の手順Ｂの例を示した説明図である。
【図１６】本発明の実施例１における重複ＩＤ連続配置表への挿入操作のフローチャート内の手順Ｃの例を示した説明図である。
【図１７】本発明の実施例１における重複ＩＤ連続配置表への挿入操作のフローチャート内の手順Ｄの例を示した説明図である。
【図１８】本発明の実施例１における重複ＩＤ連続配置表への挿入操作のフローチャート内の手順Ｅの例を示した説明図である。
【図１９】本発明の実施例２における１次および２次の重複キーを含む表の構成の例と、そのストレージ領域上での構成を示した説明図である。
【図２０】本発明の実施例２における重複ＩＤ連続配置表への挿入操作のフローチャートを示した説明図である。
【図２１】本発明の実施例２における重複ＩＤ連続配置表への挿入操作のフローチャート内の手順Ａの例を示した説明図である。
【図２２】本発明の実施例２における重複ＩＤ連続配置表への挿入操作のフローチャート内の手順Ｂの例を示した説明図である。
【図２３】本発明の実施例２における重複ＩＤ連続配置表への挿入操作のフローチャート内の手順Ｃの例を示した説明図である。
【図２４】本発明の実施例２における重複ＩＤ連続配置表への挿入操作のフローチャート内の手順Ｄの例を示した説明図である。
【図２５】本発明の実施例２における重複ＩＤ連続配置表の運用に適した重複ＩＤ連続配置表識別表と重複ＩＤ連続配置表ＩＤ管理表および重複ＩＤ連続配置表親子関係管理表の構成方法を示した説明図である。
【図２６】本発明の実施例３におけるＺオーダー格納法の例を示した図である。
【図２７】本発明の実施例３におけるＺオーダー格納法の例を示した図である。
【図２８】本発明の実施例３におけるＺオーダー格納方法に基づく重複キーを含む表の構成の例と、そのストレージ領域上での構成を示した説明図である。
【図２９】本発明の実施例３における重複ＩＤ連続配置表の運用に適した重複ＩＤ連続配置表識別表と重複ＩＤ連続配置表ＩＤ管理表および重複ＩＤ連続配置表親子関係管理表の構成方法を示した説明図である。
【発明を実施するための最良の形態】
【００２０】
【実施例１】
【００２１】
図１〜図３および図１０〜図１８を参照して本発明の実施例１を説明する。【００２２】
図１は実施例１のデータベース管理システムの全体構成を示す。ここでは、ネットワーク（１０１６）を介してデータベースサーバ（１００１）と更新クライアント（１０１２）および検索クライアント（１０１４）が接続されている。【００２３】
データベースサーバ（１００１）は、データベース管理プログラム（１００２）を実行し、またストレージ装置（１００８）を有する。【００２４】
データベース管理プログラム（１００２）は、データ更新モジュール（１００３）とデータ検索モジュール（１００４）を含み、また重複ＩＤ連続配置表識別表（１００５）と重複ＩＤ連続配置表ＩＤ管理表（１００６）と重複ＩＤ連続配置表親子関係管理表（１００７）を有する。【００２５】
ストレージ装置（１００８）は、ストレージ領域（１００９）を格納し、ストレージ領域（１００９）には重複ＩＤ連続配置表（１０１０）とインデックス（１０１１）が保存される。【００２６】
データ更新モジュール（１００３）とデータ検索モジュール（１００４）は、重複ＩＤ連続配置表識別表（１００５）と重複ＩＤ連続配置表ＩＤ管理表（１００６）と重複ＩＤ連続配置表親子関係管理表（１００７）を参照し、重複ＩＤ連続配置表（１０１０）とインデックス（１０１１）を識別する。【００２７】
なお、システム全体構成は、後に示す実施例２、実施例３も変わりがない。重複ＩＤ連続配置表親子関係管理表（１００７）は、実施例２、及び実施例３にて主に活用される表である。以下につづく実施例１の説明には重複ＩＤ連続配置表親子関係管理表（１００７）は登場しない。【００２８】
重複ＩＤ連続配置表識別表の構成を図２に示す。重複ＩＤ連続配置表識別表（１００５）は、重複ＩＤを持つデータが連続配置となるように配置管理する対象である表を登録する表であり、管理番号列（２００２）と表名列（２００３）で構成される。図の例では、交差点表と名づけられた表が配置管理の対象として管理番号１で登録されていることを示す。【００２９】
次に、重複ＩＤ連続配置表ＩＤ管理表の構成を図３に示す。重複ＩＤ連続配置表ＩＤ管理表１００６は表名列（３００２）と列名列（３００３）を持ち、連続配置の基準となる列名が配置管理対象の表名に対応して登録される。【００３０】
図１０は上記の交差点表の実例を示す。交差点表（１１００１）は、図９に示した区画に区切られた交差点データを格納する表である。ここで、ＩＤと名づけられた列（１１００２）は区画識別子を表す。上記した重複ＩＤ連続配置表ＩＤ管理表（１００６）の登録内容にしたがい、つまり、ここではＩＤ列の値をキーとして、交差点表（１１００１）のデータが配置管理される。具体的にはＩＤ列の値が重複する行のデータが連続位置に配置されるように重複ＩＤ連続配置表（１０１０）に格納する。【００３１】
重複ＩＤ連続配置表（１０１０）のストレージ領域上での構成の一部を図１１に示す。重複ＩＤ連続配置表はストレージ領域（１００９）上に同一ＩＤを持つ行集合（１２００２）を隣接するセグメント（１２００４）に配置する（１２００５）ことを特徴とする表である。また、クラスタ表の場合と同じく、将来の挿入操作に備えてそれぞれ空き領域（１２００６）が確保されている。【００３２】
なお、隣接セグメントに配置された同一ＩＤを持つ行集合（１２００２）を構成する複数のセグメントを、以降の説明では図１２に示すセグメント集合からなる同一ＩＤの行集合（１３００１）のように略記する。あわせて使用領域（１２００５）および空き領域（１２００６）もそれぞれ使用領域（１３００２）および空き領域（１３００３）のように略記する。【００３３】
重複ＩＤ連続配置表へ挿入操作を行う場合には、物理的に同一ＩＤを持つ行が隣接するセグメントに配置された状態を維持する事が要求されるため、通常の表とは異なる方法で挿入を行う。重複ＩＤ連続配置表へ挿入操作を行う方法を図１３に示すフローチャートを用いて説明する。【００３４】
挿入操作を実行するｉｎｓｅｒｔ処理（１４００１）では、まず挿入する行のサイズとストレージ領域の空き領域のサイズを比較し、挿入可能か否か判断（１４００２）を行う。ここで挿入可能でない場合はエラー（１４０２１）としてｉｎｓｅｒｔ処理を終了（１４０１０）する。挿入可能である場合は、ストレージ領域内で等しいＩＤを持つ行集合が含まれるセグメント集合の位置を探索（１４００３）する。クラスタ表の場合とは異なり、この探索（１４００３）は等号条件であり、セグメント集合が見つからない場合もある。そのため、セグメント集合が見つかったか否か判断（１４００４）を行う。【００３５】
セグメント集合が見つかった場合にはセグメント集合の１つ目の部分集合に行を挿入する空きがあるか否か判断（１４００５）を行う。空きがあった場合にはＡ（１４０２２）の手順をたどる。Ａ（１４０２２）の手順では、まず該当表に関するインデックスの排他を取得（１４００６）し、その後セグメント集合の１つ目の部分集合の空き領域に行を挿入（１４００７）し、インデックスを更新（１４００８）し、インデックスの排他を開放（１４００９）し、ｉｎｓｅｒｔ処理を終了（１４０１０）する。  Ａ（１４０２２）の手順に従い、ＩＤ＝１３の行を挿入する場合の動作例を図１４に示す。ここでは、ＩＤ＝１３の行集合を含むセグメント集合（１５００１）に空き領域があるため、同一セグメント集合の空き領域に行を挿入（１５００２）している。【００３６】
一方、判断（１４００５）において空きがなかった場合には、挿入する行と等しいＩＤを持つ行集合全体のサイズよりも大きい連続した空き領域をストレージ領域内で探索（１４０１１）し、見つかったか否か判断（１４０１２）を行う。判断（１４０１２）において見つかった場合にはＢ（１４０２３）の手順をたどる。  Ｂ（１４０２３）の手順では、まず該当表に関する排他を取得（１４０１３）し、その後既存の挿入する行と等しいＩＤを持つ行集合全体を探索（１４０１１）で見つけた空き領域内に確保する新規セグメント集合に移動（１４０１４）させ、同一セグメント集合の空き領域に行を挿入（１４０１５）し、インデックスの更新（１４００８）とインデックスの排他の開放（１４００９）を行い、ｉｎｓｅｒｔ処理を終了（１４０１０）する。  Ｂ（１４０２３）の手順に従い、ＩＤ＝１３の行を挿入する場合の動作例を図１５に示す。ここでは、ＩＤ＝１３の行集合を含むセグメント集合（１６００１）に空き領域がないため、新規セグメント集合に既存のＩＤ＝１３の行集合を移動（１６００２）させ、同一セグメント集合の空き領域に行を挿入（１６００３）している。【００３７】
判断（１４０１２）において挿入する行と等しいＩＤを持つ行集合全体のサイズよりも大きい連続した空き領域が見つからなかった場合には、挿入する行と等しいＩＤを持つセグメント集合の部分集合の中に空き領域を持つ部分集合があるか否か判断（１４０１６）を行う。  判断（１４０１６）において、空き領域を持つセグメント集合の部分集合が見つかった場合にはＣ（１４０２４）の手順をたどる。Ｃ（１４０２４）の手順では、まず該当表に関する排他を取得（１４０１３）し、その後空き領域を持つセグメント集合の部分集合に行を挿入（１４０１８）し、インデックスの更新（１４００８）とインデックスの排他の開放（１４００９）を行い、ｉｎｓｅｒｔ処理を終了（１４０１０）する。  Ｃ（１４０２４）の手順に従い、ＩＤ＝１３の行を挿入する場合の動作例を図１６に示す。ここでは、ＩＤ＝１３の行集合を含むセグメント集合が２つの部分集合（１７００１，  １７００２）から構成されており、さらにＩＤ＝１３の行集合全体のサイズよりも空き領域（１７００３）が小さいため、行を２つ目の部分集合（１７００２）に挿入（１７００４）している。【００３８】
一方、判断（１４０１６）において空き領域を持つセグメントの部分集合が見つからなかった場合には、Ｄ（１４０２５）の手順をたどる。Ｄ（１４０２５）では、まず該当表に関する排他を取得（１４０１９）し、その後セグメント集合の新規部分集合に行を挿入（１４０２０）し、インデックスの更新（１４００８）とインデックスの排他の開放（１４００９）を行い、ｉｎｓｅｒｔ処理を終了（１４０１０）する。  Ｄ（１４０２５）の手順に従い、ＩＤ＝１３の行を挿入する場合の動作例を図１７に示す。ここでは、ＩＤ＝１３の行集合を含むセグメント集合（１８００１）に空き領域がなく、さらに空き領域（１８００２）も十分に大きくないため、空き領域（１８００２）内に新規部分集合（１８００３）を確保し、ＩＤ＝１３の行を挿入（１８００４）する。【００３９】
また、判断（１４００４）において挿入する行と等しいＩＤを持つ行集合が含まれるセグメント集合が見つからなかった場合にはＥ（１４０２６）の手順をたどる。Ｅ（１４０２６）の手順では、まず該当表に関する排他を取得（１４０１９）し、その後セグメント集合の新規部分集合に行を挿入（１４０２０）し、インデックスの更新（１４００８）とインデックスの排他の開放（１４００９）を行い、ｉｎｓｅｒｔ処理を終了（１４０１０）する。  Ｅ（１４０２５）の手順に従い、ＩＤ＝１３の行を挿入する場合の動作例を図１８に示す。ここでは、ＩＤ＝１３の行集合を含むセグメント集合が存在しないため、空き領域（１９００１）内に新規部分集合（１９００２）を確保し、ＩＤ＝１３の行を挿入（１９００３）する。【００４０】
本実施例においては、Ｃ（１４０２４）の手順をたどることで重複ＩＤを持つ行が非連続な領域に格納される。しかし、後の挿入動作の際にＢ（１４０２３）の手順をたどることで連続領域に再配置される。
【実施例２】
【００４１】
表を構成する列のうち、複数の列についてストレージ上の物理近傍に配置することで、ストレージデバイスへの入出力を高速化できる場合がある。図１９は交差点表（２１００１）を構成する列のうち、ＩＤ列（２１００３）および道路種別列（２１００２）について、ストレージ領域（２１００４）上の物理近傍に配置（２１００５、２１００６）した例である。【００４２】
本実施例では、物理近傍に配置するように指定する複数の列を順にｎ次のキー列と呼び、より支配的な列ほどｎの値を大きくすることとする。この例では、２次のキー列であるＩＤ列（２１００３）の等号条件検索の場合は全てのデータを一括取得できる。例えば、「ＩＤが２に等しい」を検索条件とする等号条件検索については、ＩＤ＝２であるセグメント集合（２１０１３）を一括取得でき、「ＩＤが３に等しい」を検索条件とする等号条件検索については、ＩＤ＝３であるセグメント集合（２１０１４）を一括取得できる。【００４３】
また、１次のキー列である道路種別列（２１００２）の等号条件検索の場合でも条件にマッチする行がある程度まとまっているため、データを高速に取得できる。例えば「道路種別が高速に等しい」を検索条件とする等号条件検索については、道路種別＝高速である複数のセグメント集合（２１００７、２１０１０）を取得し、同じく「道路種別が国道に等しい」場合には道路種別＝国道である複数のセグメント集合（２１００８、２１０１１）を取得し、「道路種別が県道に等しい」場合には道路種別＝県道である複数のセグメント集合（２１００９、２１０１２）を取得する。このような表は、重複ＩＤ連続配置表を複数列に対応するよう拡張したものである。【００４４】
複数列に拡張した重複ＩＤ連続配置表へ挿入操作を行う場合には、複数列に亘って物理的に同一ＩＤを持つ行が隣接するセグメントに配置された状態を維持する事が要求されるため、通常の表とは異なる方法で挿入を行う。【００４５】
複数列に拡張した重複ＩＤ連続配置表へ挿入操作を行う方法を図２０に示すフローチャートを用いて説明する。【００４６】
挿入操作を実行するｉｎｓｅｒｔ処理（２２００１）では、まず挿入する行のサイズとストレージ領域の空き領域のサイズを比較し、挿入可能か否か判断（２２００２）を行う。ここで挿入可能でない場合はエラー（２２０２７）としてｉｎｓｅｒｔ処理を終了（２２０１４）する。挿入可能である場合は、ストレージ領域内で挿入箇所を探索する。例えば、図１９の例において、ＩＤ＝２かつ道路種別＝国道である行の挿入箇所は、道路種別＝国道である複数のセグメント集合（２１００８、２１０１１）のうち、ＩＤ＝２のセグメント集合に含まれるもの（２１００８）である。ここではカウンタ変数ｉを用いてｉ＝１（２２００３）から順に挿入箇所となるｉ次セグメント集合の位置を探索（２２００４）する。その後、見つかったか否か判断（２２００５）を行い、見つからなかった場合にはｉに１を加え（２２００６）、探索（２２００４）を繰り返す。ここで、ｉが最高次数に達してしまった場合には判断（２２００５）において先に進む。【００４７】
次に、判断（２２００５）で見つかったｉ次セグメント集合の１つ目の部分集合に空きがある、もしくはｉが最高次数であるか否か判断（２２００７）を行い、どちらか１つの条件を満たす場合には該当表に関するインデックスの排他を取得（２２００８）し、その後ｉ＝１であるか否か判断（２２００９）を行う。判断（２２００９）においてｉ＝１であった場合にはＡ（２２０２８）の手順をたどる。  Ａ（２２０２８）の手順では、まず１次セグメント集合の空き領域に行を挿入（２２０１１）し、その後インデックスを更新（２２０１２）し、インデックスの排他を開放（２２０１３）し、挿入操作を完了（２２０１４）する。  Ａ（２２０２８）の手順に従い、ＩＤ＝２かつ道路種別＝国道の行を挿入する場合の動作例を図２１に示す。ここではＩＤ＝２かつ道路種別＝国道の行集合を含むセグメント集合（２３００１）に空き領域があるため、同一セグメント集合の空き領域に行を挿入（２３００２）している。【００４８】
一方、判断（２２００９）においてｉ＝１ではなかった場合にはＢ（２２０２９）の手順をたどる。Ｂ（２２０２９）の手順では、探索（２２００４）において行を挿入する１次のセグメント集合が見つからなかった場合であるため、まず、１次のセグメント集合用に空き領域を確保（２２０１０）する。その後、１次セグメント集合の空き領域に行を挿入（２２０１１）し、インデックスを更新（２２０１２）し、インデックスの排他を開放（２２０１３）し、挿入操作を完了（２２０１４）する。  Ｂ（２２０２９）の手順に従い、ＩＤ＝２かつ道路種別＝国道の行を挿入する場合の動作例を図２２に示す。ここでは、ＩＤ＝２かつ道路種別＝国道の行集合を含むセグメント集合は存在しないが、ＩＤ＝２の行集合を含むセグメント集合（２４００１）の直後に連続した空き領域（２４００２）が存在するため、ＩＤ＝２の行集合を含むセグメント集合（２４００１）の直後に１次セグメント集合用の領域を確保し、行を挿入（２４００３）している。【００４９】
判断（２２００７）において、どちらの条件も満たさなかった場合には、２次以上のセグメント集合を別の空き領域に移動させる動作を行う。ここでは、カウンタ変数ｊを用いてｊ＝最高次数（２２０１５）から順にｊ次セグメント集合よりも大きい連続した空き領域を探索（２２０１６）する。その後、見つかったか否か判断（２２０１７）を行い、見つからなかった場合にはｊから１を引き（２２０１８）、探索（２２０１６）を繰り返す。【００５０】
ここで、ｊが０に達してしまった場合には、判断（２２０１７）において先に進む。その後、該当表に関連するインデックスの排他を取得（２２０１９）する。【００５１】
次に、ｊ＝０であるか否か判断（２２０２０）を行う。判断（２２０２０）において、ｊ＝０であった場合にはＣ（２２０３０）の手順をたどる。Ｃ（２２０３０）の手順では、判断（２２０１７）においてｊ＝０であった、つまり、１次のセグメント集合よりも大きい連続した空き領域が確保できなかったため、１次のセグメント集合が分割される。まず、１次のセグメント集合用に空き領域を確保（２２０２１）し、その後１次セグメント集合の空き領域に行を挿入（２２０２２）し、インデックスを更新（２２０１２）し、インデックスの排他を開放（２２０１３）し、挿入操作を完了（２２０１４）する。  Ｃ（２２０３０）の手順に従い、ＩＤ＝２かつ道路種別＝国道の行を挿入する場合の動作例を図２３に示す。ここでは、ＩＤ＝２かつ道路種別＝国道の行集合を含む１次セグメント集合（２５００１）に空き領域がなく、かつ空き領域（２５００２）のサイズが１次のセグメント集合（２５００１）よりも小さかったため、空き領域（２５００２）に１次のセグメント集合用に空き領域を確保し、その後、１次セグメント集合の空き領域に行を挿入（２５００３）する。【００５２】
判断（２２０２０）において、ｊ＝０ではなかった場合にはＤ（２２０３１）の手順をたどる。Ｄ（２２０３１）の手順では、判断（２２０１７）において１次以上のｊ次セグメント集合よりも大きい連続した空き領域が見つかったと判断しているため、ｊ次セグメント集合を連続領域に再配置する。【００５３】
まず、探索（２２０１６）において見つかった空き領域にｊ次のセグメント集合よりも大きい連続した空き領域を確保（２２０２３）し、その後１次のセグメント集合を挿入行であるｎまで昇順に移動（２２０２４）し、１次セグメント集合の空き領域に行を挿入（２２０２５）し、１次セグメント集合を挿入行以降のｎから昇順に移動（２２０２６）し、インデックスを更新（２２０１２）し、インデックスの排他を開放（２２０１３）し、挿入操作を完了（２２０１４）する。  Ｄ（２２０３１）の手順に従い、ＩＤ＝２かつ道路種別＝国道の行を挿入した場合、ｊ＝２であった場合の動作例を図２４に示す。ここでは、ＩＤ＝２かつ道路種別＝国道の行集合を含む１次のセグメント集合（２６００１）に空き領域がなく、かつ空き領域（２６００３）のサイズが２次のセグメント集合（２６００２）よりも大きかったため、２次のセグメント集合をまとめて連続領域に再配置（２６００４）している。【００５４】
最後に、本実施例における重複ＩＤ連続配置表識別表と重複ＩＤ連続配置表ＩＤ管理表および重複ＩＤ連続配置表親子関係管理表を図２５に示す。重複ＩＤ連続配置表識別表（２７００１）は管理番号（２７００２）列と表名（２７００３）列からなり、図２に示す実施例１の重複ＩＤ連続配置表識別表１００５と同じである。重複ＩＤ連続配置表ＩＤ管理表（２７００４）は表名（２７００５）列と列名（２７００６）列からなり、重複ＩＤ連続配置表親子関係管理表は表名（２７００８）列と列名（２７００９）列と次数（２７０１０）列からなる。【００５５】
ここでは、図１９の道路種別列（２１００２）を１次のキー列、ＩＤ列（２１００３）を２次のキー列と指定して交差点表（２１００１）を重複ＩＤ連続配置表として格納するため、重複ＩＤ連続配置表識別表（２７００１）には交差点表を示す行（２７０１１）が含まれ、重複ＩＤ連続配置表ＩＤ管理表（２７００４）には交差点表の道路種別列を表す行（２７０１２）とＩＤ列を示す行（２７０１３）が含まれ、また、重複ＩＤ連続配置表親子関係管理表（２７００７）には道路種別列の次数が１であることを示す行（２７０１４）とＩＤ列の次数が２であることを示す行（２７０１５）が含まれる。
【実施例３】
【００５６】
図９に示した区画（１０００１）に分けられた地図データの効果的な格納方法として、Ｚオーダー格納法がある。Ｚオーダー格納法の例を図２６に示す。Ｚオーダー格納法は区画の識別番号をＺ字の順に割り当て、区画番号順に格納する方法である。【００５７】
識別番号の割り当て方の例として、図２６中では左上の隣接４区画組み（２８００１、２８００２、２８００３、２８００４）にＺ字（２８００５）順に１から４の識別番号を割り当てている。Ｚオーダー格納法を用いることで、Ａ（２８００６）と記した自車を中心とした近傍９区画内の交差点リスト取得を行う場合に、ａ（２８００７）と記した隣接４区画の交差点データを一括取得できる。【００５８】
Ｚオーダー格納法は隣接４区画以上の領域にも拡張可能である。その一例として、図２７に隣接１６区画を扱う２次のＺオーダー格納の例を示す。隣接１６区画組みは４つの隣接４区画組みをＺ字順に割り当てることで構成される。図２７では４つの隣接４区画組み（２９００１、２９００２、２９００３、２９００４）にＺ字（２９００５）に識別番号を割り当てる。ここでは、隣接４区画組み（２９００１、２９００２、２９００３、２９００４）は１次のＺ字、隣接１６区画組み（２９００５）を２次のＺ字と呼ぶ。【００５９】
２次のＺ字順に識別番号を割り当てることで１（２９００６）から１６（２９００７）までの区画を一括取得できるように格納できる。また、同様にＺ字を大きくすることで隣接６４区画組みからなる３次のＺ字や隣接２５６区画からなる４次のＺ字といった拡張も行える。【００６０】
同じ１次のＺ字に含まれる４区画には、（区画番号−１）を４で割った商が等しいという特徴がある。この商に１を加えたものを１次のＺ字の識別子と定義する。１次のＺ字の識別子（２８００８、２８００９、２８０１０、２８０１１、２８０１２、２８０１３、２８０１４、２８０１５、２８０１６、２８０１７、２８０１８、２８０１９、２８０２０、２８０２１、２８０２２、２８０２３）は上記の定義に従って振った識別子である。【００６１】
同様に２次のＺ字についても（１次のＺ字の識別子−１）を４で割った商に１を加えたものを２次のＺの識別子とする。図２７に符号２９００８〜２９０１１で示す数字１，２，３，４は上述の定義に従って順次付した２次のＺ字の識別子である。【００６２】
本実施例で扱うＺオーダー格納法は、格納次数によらず実施例２に示した複数列に拡張した重複ＩＤ連続配置表の特別な例として実施できる。【００６３】
図２８に、１次のＺオーダー格納法を複数列に拡張した例を示す。ここでは、交差点表（３０００１）を構成する列のうち、ＩＤ列（３０００２）に関して１次のＺ字順に隣接した４区画をストレージ領域（３０００３）上の物理近傍に配置（３００１４、３００１５）した例である。ここでは、図２６に示した１次のＺ字順に隣接した４区画のうち、４番目の隣接４区画（２８０１１）および５番目の隣接４区画（２８０１２）を配置している。４番目の隣接４区画（２８０１１）は１次のＺ字順識別子＝４のセグメント集合（３００１４）であり、これを構成する４つの区画（３０００６、３０００７、３０００８、３０００９）がストレージ領域上の１次のキー列（３０００４）として連続領域に配置される。【００６４】
また、５番目の隣接４区画（２８０１２）は１次のＺ字順識別子＝５のセグメント集合（３００１５）であり、これを構成する４つの区画（３００１０、３００１１、３００１２、３００１３）も同じく１次のキー列（３０００４）としてストレージ領域（３０００３）上で連続領域に配置される。このように、１次のＺ字識別子を２次のキー列とみなすことで、２列に拡張した重複ＩＤ連続配置表の特別な例として実施できる。再帰的に、ｎ次のＺ字識別子をｎ＋１次のキー列とみなすことで、ｎ＋１列に拡張した重複ＩＤ連続配置表の特別な例として実施できる。【００６５】
本実施例で用いる重複ＩＤ連続配置識別表、重複ＩＤ連続配置ＩＤ管理表、重複ＩＤ連続配置表親子関係管理表を図２９により説明する。本実施例では、実施例２の場合と比べ、重複ＩＤ連続配置表親子関係管理表で管理すべき情報が異なる。【００６６】
本実施例で用いる重複ＩＤ連続配置親子関係管理表（３１００７）では表名（３１００８）列と列名（３１００９）列と次数（３１０１１）列に加えて条件列（３１０１０）列を持ち、Ｚオーダー格納法に従う列か否かを識別可能としている。重複ＩＤ連続配置表識別表（３１００１）は実施例２の場合と同じく管理番号（３１００２）列と表名（３１００３）列からなり、重複ＩＤ連続配置表ＩＤ管理表（３１００４）も実施例２の場合と同じく表名（３１００５）列と列名（３１００６）列からなる。【００６７】
ここでは、図２８の交差点表（３０００１）のＩＤ列（３０００２）について１次のＺ字順に隣接した４近傍を隣接配置するために、重複ＩＤ連続配置表識別表（３１００１）には交差点表を示す行（３１０１２）が含まれ、重複ＩＤ連続配置表ＩＤ管理表（３１００４）には交差点表のＩＤ列を表す行（３１０１３）が含まれ、また重複ＩＤ連続配置表親子関係管理表（３１００７）にはＩＤ列の次数が１でありＺオーダー格納法が適用されていることを示す行（３１０１４）と同じくＩＤ列の次数が２でありＺオーダー格納法が適用されていることを示す行（３１０１５）が含まれる。【００６８】
なお、本実施例ではＺオーダー格納方法を例に挙げたが、同様にＮ字順４近傍を整列させるＮオーダー格納方法や、時計回りに４近傍を整列させる時計オーダー格納方法も容易に類推可能である。本実施例における重複ＩＤ連続配置表親子関係管理表（３１００７）においても、条件列（３１０１０）にＮオーダー格納方法や時計オーダー格納方法を指定することで、Ｎオーダー格納方法や時計オーダー格納方法を実現可能である。
【産業上の利用可能性】
【００６９】
組込み用途では使用可能なメモリサイズの制約が厳しく、サーバ向けＤＢＭＳのように大きいバッファを割り当てることができないため、ストレージデバイスの入出力性能がトータルの検索性能に直接影響する。特にカーナビゲーションシステム用途においては、従来のカーナビが光ディスクデバイスのシーケンシャルアクセスを有効利用できるように最適化されたファイル構造が利用されているため、より高速なハードディスクデバイスを導入してもランダムアクセスを発生させてしまうと光ディスクに対して性能面でデグレードになってしまう。よって本発明を用いてランダムアクセスを抑えるような制御を行う必要がある。
【図１】
0004699469.tif 000002
【図２】
0004699469.tif 000003
【図３】
0004699469.tif 000004
【図４】
0004699469.tif 000005
【図５】
0004699469.tif 000006
【図６】
0004699469.tif 000007
【図７】
0004699469.tif 000008
【図８】
0004699469.tif 000009
【図９】
0004699469.tif 000010
【図１０】
0004699469.tif 000011
【図１１】
0004699469.tif 000012
【図１２】
0004699469.tif 000013
【図１３】
0004699469.tif 000014
【図１４】
0004699469.tif 000015
【図１５】
0004699469.tif 000016
【図１６】
0004699469.tif 000017
【図１７】
0004699469.tif 000018
【図１８】
0004699469.tif 000019
【図１９】
0004699469.tif 000020
【図２０】
0004699469.tif 000021
【図２１】
0004699469.tif 000022
【図２２】
0004699469.tif 000023
【図２３】
0004699469.tif 000024
【図２４】
0004699469.tif 000025
【図２５】
0004699469.tif 000026
【図２６】
0004699469.tif 000027
【図２７】
0004699469.tif 000028
【図２８】
0004699469.tif 000029
【図２９】
0004699469.tif 000030