以下、図面を参照して、本発明の実施の形態を説明する。
(第1の実施の形態)
図1は、本発明の第1の実施の形態の計算機システムの構成を示すブロック図である。
本発明の実施の形態の計算機システムは、データベースサーバ100、格納用外部記憶装置150及び作業用外部記憶装置160を含む。データベースサーバ100は、データベース管理システムが動作する。格納用外部記憶装置150は、データベース管理システムによって管理されるデータを格納する。作業用外部記憶装置160は、データベース管理システムによる処理の過程で生成されるデータを一時的に格納する。
データベースサーバ100、格納用外部記憶装置150及び作業用外部記憶装置160は、ネットワーク170を介して互いに接続される。ネットワーク170は、例えば、ファイバーチャネル(FC)プロトコルが適用されるストレージエリアネットワーク(SAN)であるが、その他の任意の形態のネットワークであってもよい。例えば、ネットワーク170がインターネットプロトコル(IP)ネットワークであり、データベースサーバ100、格納用外部記憶装置150及び作業用外部記憶装置160がiSCSIプロトコルによって互いに通信するように構成してもよい。
格納用外部記憶装置150は、インターフェース151、制御装置152、及び記憶装置155を備える。格納用外部記憶装置150は、データベースサーバ100から受け付けたI/O要求に従って、記憶装置155に格納されたデータを読み書きする。
インターフェース151は、ネットワーク170に接続する。制御装置152は、データベースサーバ100から送信されたI/O要求を処理する。
記憶装置155は、データベースサーバ100によって読み書きされるデータを格納する。具体的には、HDD、光ディスクドライブ、半導体記憶装置又はその他の記憶装置である。また、記憶装置155には、データベースサーバ100が処理対象とするデータである表154及びインデックス153が格納される。
なお、図1には3つの記憶装置155が示されているが、格納用外部記憶装置150に備えられる記憶装置155の数は、任意の数である。また、複数の記憶装置155によってディスクアレイを構成してもよい。
また、格納用外部記憶装置150には、HDDの読出しヘッドの位置及び読出し要求対象データが格納位置を考慮して、シーク時間及び回転待ち時間が短くなるように、データのI/O要求をスケジューリングする機能が搭載されている。
作業用外部記憶装置160も、格納用外部記憶装置150と同様に、インターフェース161、制御装置162及び記憶装置163を備える。インターフェース161及び制御装置162の機能は、格納用外部記憶装置150のインターフェース151及び制御装置152と同様である。記憶装置163には、データベースサーバ100における処理に必要なデータが一時的に格納される。
データベースサーバ100は、メモリ101、プロセッサ102、及びインターフェース103を備える。
メモリ101は、プロセッサ102によって実行されるプログラム及び当該プログラムの実行に必要なデータを格納する。メモリ101に格納されるプログラム及びデータについては後述する。
プロセッサ102は、メモリ101に記憶されたプログラムを実行する。インターフェース103は、ネットワーク170に接続するインターフェースである。例えば、ネットワーク170がストレージエリアネットワーク(SAN)である場合には、ホストバスアダプタ(HBA)となる。
メモリ101には、アプリケーションプログラム104、データベース管理システム105及びオペレーティングシステム106が格納される。アプリケーションプログラム104は、データベース管理システム105にデータの問合せを発行し、問合せ結果を受信する。
データベース管理システム105は、アプリケーションプログラム104からのデータの問合せ要求を処理し、問合せ結果を応答する。具体的には、受け付けた問合せ要求に基づいて、必要に応じてオペレーティングシステム106を介して格納用外部記憶装置150又は作業用外部記憶装置160に格納されたデータを読み書きする。
オペレーティングシステム106は、データベース管理システム105からの要求を受け付け、格納用外部記憶装置150又は作業用外部記憶装置160に対してデータの読み書きを要求する。また、オペレーティングシステム106は、データベースサーバ100のプロセッサ102及びメモリ101を管理する。
本発明の第1の実施の形態では、アプリケーションプログラム104が、データベース管理システム105と同一の計算機で実行されているが、ネットワークを介して接続された別の計算機で実行されてもよい。
データベース管理システム105は、格納用外部記憶装置150に格納されたデータを、与えられた問合せ要求に従ってデータを抽出及び加工し、問合せ結果を応答する。関係モデルをベースとした関係データベース管理システム(RDBMS)では、レコードと呼ばれるデータを表154に格納し、少量のI/O要求でレコードにアクセスするためのデータ構造であるインデックス153を有する。インデックス153のデータ構造は、B木又はハッシュなどである。データの問合せはSQL(Structured Query Language)によって記述される。
本発明の第1の実施の形態では、データベース管理システム105は、ネットワーク170を介して接続された格納用外部記憶装置150に、表154及びインデックス153を格納しているが、データベースサーバ100に備えられた記憶装置に格納するようにしてもよい。
データベース管理システム105は、問合せ実行制御部110及び部分インデックス作成部120を備える。問合せ実行制御部110は、アプリケーションプログラム104から要求された問合せを受け付け、問合せを処理して結果を応答する。部分インデックス作成部120は、データの格納位置に基づいて、局所性を有するデータの集合に対応する部分インデックスを作成する。局所性とは、後述するように、データが記憶装置の所定の範囲内に格納されていることである。所定の範囲は、物理アドレスに基づいて設定されてもよいしトラック又はセクタ単位で設定されてもよい。
部分インデックス作成部120は、インデックスデータ取得部121、インデックス情報ファイル保存領域122、インデックス作成部123、及び部分インデックス作成管理部130を備える。
インデックスデータ取得部121は、表に格納されたレコード集合から、インデックスを作成するために必要なデータを取得する。インデックス情報ファイル保存領域122は、取得したデータをファイルとして保存するための領域である。
インデックス作成部123は、インデックスデータ取得部121などによって取得されたデータに基づいてインデックスを作成する。また、インデックスを作成する過程で生成されるデータを一時的に保持するインデックス作成用作業領域124を備える。
部分インデックス作成管理部130は、外部記憶装置構成情報取得部131及び局所性判定基準指定受付部132を備える。外部記憶装置構成情報取得部131は、表154及びインデックス153を格納する格納用外部記憶装置150の構成情報を取得し、取得された構成情報を保持する。局所性判定基準指定受付部132は、ユーザによって指定された局所性判定基準の入力を受け付ける。
なお、本発明の第1の実施の形態では、局所性判定基準はユーザによって入力されるが、メモリ101の容量などのシステム環境に基づいて自動的に設定されるようにしてもよい。局所性判定基準を自動的に設定する方法については第4の実施の形態にて説明する。
なお、インデックス情報ファイル保存領域122及びインデックス作成用作業領域124に格納されるデータの容量がメモリ101に格納可能な容量を超えた場合には、作業用外部記憶装置160に一時的に当該データを格納し、必要に応じて、再度メモリ101に読み出すようにする。
問合せ実行制御部110は、問合せ受付部111、問合せ実行プラン生成部112、問合せ実行部113、DBバッファ114、及び実行タスク管理部115を備える。
問合せ受付部111は、アプリケーションプログラム104から要求された問合せを受け付ける。
問合せ実行プラン生成部112は、受け付けた問合せを処理する手順(問合せ実行プラン)を作成する。問合せ実行プランとは、問合せ結果を作成するために必要なデータベースオペレーションを組み合わせた処理手順である。
問合せ実行部113は、作成された問合せ実行プランに従って動的にタスクを生成し、生成された複数のタスクを並行して実行する。問合せ実行部113は、問合せ結果を生成するための基本的なデータベースオペレーションを備えている。
DBバッファ114は、問合せ処理を高速化するために、処理の過程で利用されたデータが一時的に格納される。
実行タスク管理部115は、問合せ実行部113によって実行されたタスクを管理する。また、実行タスク管理部115は、部分インデックス検索制御部116を備える。部分インデックス検索制御部116は、部分インデックスによる検索処理を制御する。
このように、本発明の第1の実施の形態では、複数のタスクを生成し、生成されたタスクを並列して実行することによって、要求された問合せを高速に処理することができる。また、各タスクで独立してデータの入出力(I/O)が要求される。このとき、入出力されるデータの格納位置が局所的にデータのI/O要求が発行されるように制御することによって、記憶装置に備えられたスケジューリング機能をより効果的に機能させることができる。
以下、本発明の第1の実施の形態のデータベース管理システムにおける処理手順について説明する。図2A及び図2Bには、部分インデックスを作成するための手順を示し、図3には、部分インデックスを利用した検索手順を示す。図4には、部分インデックスを作成するために必要な局所性を判定するための格納用外部記憶装置150の構成情報の一例を示す。図5には、部分インデックスを作成する手順を説明するためのデータの一例である商品販売履歴表500を示す。図6には、作成されたインデックス情報ファイル600の一例を示す。まず、本発明の第1の実施の形態による部分インデックスの作成元となる商品販売履歴表500について説明する。
図5は、本発明の第1の実施の形態の部分インデックスを作成する商品販売履歴表500の一例を示す図である。
商品販売履歴表500は、店舗における商品販売履歴の例であり、格納用外部記憶装置150に格納された表154の一例である。商品販売履歴表500は、販売ID501、購入者ID502、商品ID503及び個数504を含む。
販売ID501は、商品の販売履歴を識別する識別子である。購入者ID502は、商品を購入した客の識別子である。商品ID503は、購入された商品の識別子である。個数504は、商品ID503によって識別される商品が購入された数である。
以下、図5に示した商品販売履歴表500の商品ID503に部分インデックスを作成する手順を説明する。
図2Aは、本発明の第1の実施の形態のインデックスを作成する手順を示すフローチャートである。
本処理は、データベースサーバ100のプロセッサ102が部分インデックス作成部120を処理することによって実行される。
プロセッサ102は、まず、外部記憶装置構成情報取得部131を実行することによって、格納用外部記憶装置150の構成情報を取得する(ステップ201)。図4にステップ201の処理で取得された構成情報の一例を示す。
図4は、本発明の第1の実施の形態の格納用外部記憶装置150の構成情報の一例である論理アドレスと物理アドレスとの対応表400を示す図である。
本発明の第1の実施の形態では、格納用外部記憶装置150には3つのHDDが備えられており、各HDDによって提供される記憶領域の先頭から1KBずつストライピングされている。なお、ここに示す構成に限らず、記憶領域は1つ又は複数の記憶装置によって構成されていればよい。
対応表400は、データベースサーバ100によって認識される論理アドレス401と、当該論理アドレス401に対応する物理アドレス402によって構成される。物理アドレス402は、HDDの識別情報であるHDD番号と、当該HDDのCHS(Cylinder/Head/Sector)で構成される。
構成情報は、外部記憶装置構成情報取得部131を実行することによって、格納用外部記憶装置150から取得されるようにしてもよいが、格納用外部記憶装置150が当該情報を出力する管理用コマンドを備えていれば、当該コマンドを利用するようにしてもよい。また、格納用外部記憶装置150を設定したデータベース設計者が、対応表400を含むファイルをあらかじめ作成し、外部記憶装置構成情報取得部131が当該ファイルを読み出すようにしてもよい。さらに、管理者がGUIなどのユーザインターフェースを介して外部記憶装置構成情報取得部131に入力するようにしてもよい。また、該構成情報を任意のタイミングで再取得し、対応表400を再作成しても良い。
ここで、図2Aの部分インデックスを作成する手順の説明に戻る。
プロセッサ102は、次に、商品販売履歴表500のレコードを1ページ分読み出す。そして、インデックスデータ取得部121を実行することによって、インデックスを作成するために必要な各レコードの商品ID及び当該レコードのポインタの組によって構成されるインデックス情報を抽出する(ステップ203)。
なお、本発明の第1の実施の形態では、記憶装置155に格納された表154に対してインデックス153を生成する方法について説明するが、表154にデータを挿入する処理と並行してインデックス153を作成するようにしてもよい。この場合には、表154にデータを挿入する処理と並行してインデックス情報を抽出する。
プロセッサ102は、読み出したページが商品販売履歴表500の最終ページであるか否かを判定する(ステップ204)。読み出したページが商品販売履歴表500の最終ページでない場合には(ステップ204の結果が「No」)、インデックス情報ファイルに含まれるレコード集合に対してインデックス情報が抽出されたレコードが、格納用外部記憶装置150において局所性を有するか否かを判定する(ステップ205)。
レコード集合とインデックス情報が抽出されたレコードが局所性を有しているか否かを判定する基準は、局所性判定基準指定受付部132によってユーザから受け付けた指示に基づく。本発明の第1の実施の形態では、記憶装置155において、指定された範囲の領域に格納されたレコードが局所性を有するとしている。ステップ205の処理では、インデックス情報が抽出されたレコードが格納された位置が、インデックス情報ファイルに含まれるレコード集合に対応する領域に含まれるか否かを判定する。作成中のインデックス情報ファイルに対応するレコード集合に、インデックス情報が抽出されたレコードを追加した後の領域が指定された範囲内であるか否かを判定してもよい。
具体的に説明すると、外部記憶装置構成情報取得部131に保存されている対応表400によって、データベース管理システム105によって認識されるレコードの論理アドレスと、記憶装置155の物理アドレスとを対応させることで判定する。すなわち、物理的に近い位置に格納されているか否かを判定する。なお、局所性の判定基準は、アドレス以外にも、前述のように、各HDDのヘッドの移動距離が所定の閾値以下の範囲としてもよく、任意の基準を指定してよい。また、レコード格納位置のLBA(Logical Block Addressing)に基づいて局所性判定を行ってもよく、その場合は、対応表400の物理アドレス402はLBA形式としても良い。
図2Bは、本発明の第1の実施の形態の局所性を判定する手順を示すフローチャートである。
本処理は、図2Aに示したフローチャートのステップ205の処理で実行される処理である。
プロセッサ102は、インデックス情報が抽出されたレコードの格納位置を特定する。そして、図4に示した対応表400に基づいて、インデックス情報が抽出されたレコードが追加されたレコード集合が指定されたサイズの領域内に格納されているか否かを判定する(ステップ251)。
プロセッサ102は、レコード集合が指定されたサイズの領域内に格納されている場合には(ステップ251の結果が「Yes」)、インデックス情報が追加された後のレコード集合が局所性を有すると判定する(ステップ252)。
一方、プロセッサ102は、レコード集合が指定されたサイズの領域内に格納されていない場合には(ステップ251の結果が「No」)、インデックス情報追加後のレコード集合が局所性を有していないと判定する(ステップ253)。
ここで、図2Aの部分インデックスを作成する手順の説明に戻る。
プロセッサ102は、インデックス情報ファイルに含まれるレコード集合に対してインデックス情報が抽出されたレコードが局所性を有している場合には(ステップ205の結果が「Yes」)、抽出したインデックス情報をインデックス情報ファイル600に追記する(ステップ211)。
プロセッサ102は、インデックス情報ファイルに含まれるレコード集合とインデックス情報が抽出されたレコードが局所性を有していない場合には(ステップ205の結果が「No」)、新たに別のインデックス情報ファイルをインデックス情報の出力先とし、抽出されたインデックス情報を出力する(ステップ206)。
さらに、プロセッサ102は、インデックス作成を実行するスレッドを新たに生成し、切り替えられたインデックス情報ファイルに基づいて部分インデックスを作成する(ステップ207)。本発明の第1の実施の形態では、インデックス作成時間を短縮するために、部分インデックスを作成するためのスレッドを新たに生成し、インデックス情報ファイル作成処理と部分インデックス作成処理を並列実行している。なお、すべての処理を1スレッドで順番に実行するようにしてもよい。
プロセッサ102は、ステップ207の処理が終了すると、次のレコードについてステップ203以降の処理を実行する。
プロセッサ102は、読み出したページが商品販売履歴表500の最終ページであった場合には(ステップ204の結果が「Yes」)、抽出したインデックス情報をインデックス情報ファイル600に追記する(ステップ208)。さらに、インデックス情報を抽出する処理とは別スレッドで、部分インデックスを作成する処理を実行する(ステップ209)。
以上の処理によって、局所性を有するインデックス情報ファイルが作成され、対応する部分インデックスが作成される。図6には、局所性を有するレコードのインデックス情報が格納されたインデックス情報ファイルの一例が示されている。
図6は、本発明の第1の実施の形態のインデックス情報ファイル600の一例を示す図である。
図6に示すインデックス情報ファイル600には、局所性を有するレコード集合ごとに生成された3つのファイルが示されている。本発明の第1の実施の形態では、前述のように、所定の範囲に格納されているレコードが局所性を有するレコード集合に対応してインデックス情報ファイルが作成される。また、各インデックス情報ファイルは、格納されるインデックス情報が他のインデックス情報ファイルに格納されるインデックス情報と重複しないように作成される。
ここで、作成された部分インデックスと、作成元となった商品販売履歴表500との関係をさらに説明する。
図7は、本発明の第1の実施の形態のインデックス700と商品販売履歴表500との関係を説明する図である。
本発明の第1の実施の形態では、図2A及び図2Bに示した手順によって、図6に示した3つのインデックス情報ファイルが作成され、対応する部分インデックス001〜003(702〜704)を含むインデックス700が生成される。前述のように、部分インデックス001〜003(702〜704)は、レコードが重複することなく作成される。また、各部分インデックスには、インデックスの対象となる項目(商品ID)でソートされて格納される。
最後に、複数の部分インデックスを含むインデックス700を利用した検索処理の手順について説明する。
検索処理は、前述のように、プロセッサ102が問合せ実行制御部110を処理することによって実行される。
前述のように、プロセッサ102は、検索処理を実行すると、動的に複数のタスクを生成する。生成されたタスクは、実行タスク管理部115によって管理される。生成されたタスクがそれぞれI/O要求を発行することによって、データベースサーバ100から格納用外部記憶装置150にI/O要求が多重に発行される。このとき、インデックス700を利用して検索する手順を図3を参照しながら説明する。
図3は、本発明の第1の実施の形態のインデックス検索の手順を示すフローチャートである。
プロセッサ102は、まず、検索対象の部分インデックスを示すカウンタNの値を初期化する。具体的には、カウンタNの値を1に設定する(ステップ301)。
プロセッサ102は、続いて、部分インデックス検索制御部116によって、インデックス700に含まれるN番目の部分インデックスを利用して検索を実行する(ステップ302)。このとき、当該部分インデックスに対応するデータを取得するタスクを複数生成し、集中的に並列して検索を実行する。
プロセッサ102は、N番目の部分インデックスによる検索が終了すると、N番目の部分インデックスが最後の部分インデックスであるか否かを判定する(ステップ303)。N番目の部分インデックスが最後の部分インデックスである場合には(ステップ303の結果が「Yes」)、検索処理を終了する。
一方、N番目の部分インデックスが最後の部分インデックスでない場合には(ステップ303の結果が「No」)、カウンタの値をNからN+1に更新し(ステップ304)、N+1番目の部分インデックスについて同様に検索を実行する。
以上のように、本発明の第1の実施の形態によれば、局所性を有するレコード集合に対応する部分インデックスごとに検索を実行することによって、記憶装置上で局所的な場所に格納されたデータに対するI/O要求が集中的に発行される。したがって、記憶装置に備えられたI/O要求のスケジューリング機能によって、I/O要求処理時間を短縮させることができる。
また、本発明の第1の実施の形態によれば、インデックスを作成する場合にも、部分インデックスごとに並列して作成することが可能となるため、インデックスの作成時間を短縮させることができる。
(第2の実施の形態)
本発明の第1の実施の形態では、表154が連続した記憶領域に格納されていたが、第2の実施の形態では、表154が連続した記憶領域に格納されていない場合について説明する。
なお、第2の実施の形態以降の説明では、第1の実施の形態との相違点を中心に説明し、第1の実施の形態と共通する構成及び処理については、同一の符号を付与して説明を省略する。
図8は、本発明の第2の実施の形態の計算機システムの構成を示すブロック図である。
本発明の第2の実施の形態では、第1の実施の形態と部分インデックス作成部120が相違する。具体的には、第2の実施の形態の部分インデックス作成部120には、第1の実施の形態の構成に加え、ディスク別最終アドレス保存部833が備えられる。
ディスク別最終アドレス保存部833は、インデックス情報ファイルに書き込まれたインデックスに対応するレコードの最終アドレスをHDDごとに保存する。ディスク別最終アドレス保存部833は、最後に読み出されたデータのアドレスがディスクごとに記録されるディスク別最終アドレス保存表1100を含む。ディスク別最終アドレス保存表1100の詳細については、図11にて後述する。
その他の構成については、第1の実施の形態と同様であり、インデックスを作成する手順及び局所性を判定する手順が相違する。図9A及び図9Bを参照しながら各手順について説明する。
図9Aは、本発明の第2の実施の形態のインデックスを作成する手順を示すフローチャートである。
本処理は、データベースサーバ100のプロセッサ102が部分インデックス作成部120を処理することによって実行される。
プロセッサ102は、まず、第1の実施の形態と同様に、外部記憶装置構成情報取得部131を実行することによって、格納用外部記憶装置150の構成情報を取得する(ステップ201)。図10にステップ201の処理で取得された構成情報を示す。
図10は、本発明の第2の実施の形態の格納用外部記憶装置150の構成情報の一例である論理アドレスと物理アドレスとの対応表1000を示す図である。対応表1000の構成は、第1の実施の形態の対応表400の構成と同じである。
本発明の第2の実施の形態では、第1の実施の形態と同様に、格納用外部記憶装置150には3個のHDDが備えられている。しかし、第1の実施の形態のように、連続した領域にレコードが格納されているとは限らず、図10を参照すると、HDD番号が「01」のHDDでは、アドレスが「000000〜0000ff」」の領域にレコードが記録され、続いて「005000〜0050ff」の領域にレコードが記録される。
ここで、図9Aの部分インデックスを作成する手順の説明に戻る。
プロセッサ102は、次に、第1の実施の形態と同様に、商品販売履歴表500のレコードを1ページ分読み出す。そして、インデックスデータ取得部121を実行することによって、インデックスを作成するために必要な各レコードの商品ID及び当該レコードのアドレスの組で構成されるインデックス情報を抽出する(ステップ203)。
プロセッサ102は、読み出したページが商品販売履歴表500の最終ページであるか否かを判定する(ステップ204)。読み出したページが商品販売履歴表500の最終ページでない場合には(ステップ204の結果が「No」)、インデックス情報ファイルに含まれるレコード集合に対してインデックス情報が抽出されたレコードが、格納用外部記憶装置150において局所性を有するか否かを判定する(ステップ205)。
本発明の第2の実施の形態では、レコード集合が記憶装置155において指定された範囲の領域内に格納されていることに加え、さらに、隣接するレコードの格納位置が指定された値以上離れていない場合に、レコード集合が局所性を有すると判定する。
図9Bは、本発明の第2の実施の形態の局所性を判定する手順を示すフローチャートである。
プロセッサ102は、インデックス情報が抽出されたレコードの格納位置を特定し、インデックス情報が抽出されたレコードが追加されたレコード集合が指定されたサイズの領域内に格納されているか否かを判定する(ステップ251)。
プロセッサ102は、レコード集合が指定されたサイズの領域内に格納されている場合には(ステップ251の結果が「Yes」)、さらに、表データの物理アドレスとディスクごとに管理している最終アドレスが指定された値以上離れていないか否かを判定する(ステップ953)。図11には、ディスクごとに管理している最終アドレスを格納するディスク別最終アドレス保存表1100の一例が示されている。
図11は、本発明の第2の実施の形態のディスク別最終アドレス保存表1100の一例を示す図である。
ディスク別最終アドレス保存表1100には、HDDごとに最後に読み出されたレコードのアドレスが記録される。ディスク別最終アドレス保存表1100は、HDDを識別するHDD番号1101及び最後に読み出されたレコードに対応するアドレスが記録される最終アドレス1102を含む。
プロセッサ102は、表データの物理アドレスとディスクごとに管理している最終アドレスが指定された値以上離れていない場合には(ステップ953の結果が「No」)、インデックス情報追加後のレコード集合が局所性を有すると判定する(ステップ252)。
一方、プロセッサ102は、レコード集合が指定されたサイズの領域内に格納されていない場合(ステップ251の結果が「No」)、又は表データの物理アドレスとディスクごとに管理している最終アドレスが指定された値以上離れている場合には(ステップ953の結果が「Yes」)、インデックス情報追加後のレコード集合が局所性を有していないと判定する(ステップ253)。
ここで、図9Aの部分インデックスを作成する手順の説明に戻る。
プロセッサ102は、インデックス情報ファイルに含まれるレコード集合に対してインデックス情報が抽出されたレコードが局所性を有している場合には(ステップ205の結果が「Yes」)、抽出したインデックス情報をインデックス情報ファイル600に追記する。さらに、追記対象のインデックスに対応するレコードの論理アドレスから図10に示した対応表1000に基づいてHDD上の物理アドレスを取得し、ディスク別最終アドレス保存表1100を更新する(ステップ912)。
プロセッサ102は、インデックス情報ファイルに含まれるレコード集合とインデックス情報が抽出されたレコードが局所性を有していない場合には(ステップ205の結果が「No」)、新たに別のインデックス情報ファイルをインデックス情報の出力先とし、抽出されたインデックス情報を出力する(ステップ206)。
さらに、プロセッサ102は、追記対象のインデックスに対応するレコードの論理アドレスから図10に示した対応表1000に基づいてHDD上の物理アドレスを取得し、ディスク別最終アドレス保存表1100を更新する(ステップ907)。続いて、インデックス作成を実行するスレッドを新たに生成し、切り替えられたインデックス情報ファイルに基づいて部分インデックスを作成する(ステップ207)。
プロセッサ102は、ステップ207の処理が終了すると、次のレコードについてステップ203以降の処理を実行する。
プロセッサ102は、読み出したページが商品販売履歴表500の最終ページであった場合には(ステップ204の結果が「Yes」)、抽出したインデックス情報をインデックス情報ファイル600に追記する(ステップ208)。さらに、インデックス情報を抽出する処理とは別スレッドで、部分インデックスを作成する処理を実行する(ステップ209)。
本発明の第2の実施の形態によれば、表を格納するHDDの記憶領域が、図10に示すように、「000000〜0000ff」と「005000〜0050ff」のように連続していない場合に、その境界で別の部分インデックスを作成することが可能となる。したがって、表データが連続した領域に格納されていない場合であっても、第1の実施の形態と同様の効果を得られ、記憶装置に備えられたI/O要求のスケジューリング機能によって、I/O要求を処理する時間を短縮することができる。
(第3の実施の形態)
本発明の第3の実施の形態では、外部記憶装置の構成情報に加え、部分インデックス作成処理が計算機のメモリ上で処理可能な場合に局所性を有すると判定する。こうすることによって、インデックス作成時に作業用外部記憶装置160にアクセスする必要がなくなるため、インデックスを作成する時間を短縮することができる。
本発明の第3の実施の形態の計算機システムは、第1の実施の形態の計算機システムの構成から作業用外部記憶装置160を除いた構成となっている。なお、作業用外部記憶装置160が不要なのはインデックス作成時であるため、検索実行時など、他の処理で作業用外部記憶装置160が必要な場合が想定される場合には、第1の実施の形態の計算機システムと同じ構成としてもよい。
また、インデックスを作成する手順についても、基本的な手順は第1の実施の形態と同じであり、局所性を判定する処理が相違する。インデックスの作成手順を簡単に説明しながら局所性を判定する処理について説明する。
本発明の第3の実施の形態のインデックスを作成する手順は、第1の実施の形態と同様である。そこで、図2Aに示した第1の実施の形態のインデックス作成手順を示すフローチャートを参照しながら第3の実施の形態のインデックス作成手順について説明する。
プロセッサ102は、まず、外部記憶装置構成情報取得部131によって、格納用外部記憶装置150の構成情報を取得する(ステップ201)。次に、商品販売履歴表500のレコードを1ページ分読み出し、インデックス情報を抽出する(ステップ203)。
プロセッサ102は、読み出したページが商品販売履歴表500の最終ページであるか否かを判定する(ステップ204)。読み出したページが商品販売履歴表500の最終ページでない場合には(ステップ204の結果が「No」)、インデックス情報が抽出されたレコードが局所性を有するか否かを判定する(ステップ205)。ここで、図12を参照しながら局所性を判定する手順について説明する。
図12は、本発明の第3の実施の形態の局所性を判定する手順を示すフローチャートである。
プロセッサ102は、インデックス情報が抽出されたレコードの格納位置を特定し、インデックス情報が抽出されたレコードが追加されたレコード集合が指定されたサイズの領域内に格納されているか否かを判定する(ステップ251)。
大規模データベースシステムでは、表154に格納されるレコード数が非常に多い場合、インデックス情報を保持するインデックス情報ファイルのサイズがインデックス情報ファイル保存領域122よりも大きくなってしまう可能性がある。
このとき、第1の実施の形態では、適宜溢れた分を作業用外部記憶装置160に保存する。しかし、メモリ上に記憶されたデータにのみアクセスして処理を実行する場合と比較して、外部記憶装置に記憶されたデータにアクセスしながら処理を実行する場合には多くの処理時間を要する。そこで、第3の実施の形態では、インデックス情報ファイルがインデックス情報ファイル保存領域122に格納できなくなった時点で、レコード集合が局所性を有していないと判定する。
プロセッサ102は、レコード集合が指定されたサイズの領域内に格納されている場合には(ステップ251の結果が「Yes」)、さらに、インデックス情報ファイルをメモリ101に格納できるか否かを判定する(ステップ1453)。すなわち、インデックス情報ファイルのサイズがインデックス情報ファイル保存領域122のサイズよりも小さいか否かを判定する。インデックス情報ファイルをメモリ101に格納できる場合には(ステップ1453の結果が「Yes」)、インデックス情報が抽出されたレコードが追加された後のレコード集合が局所性を有すると判定する(ステップ252)。
一方、プロセッサ102は、レコード集合が指定されたサイズの領域内に格納されていない場合(ステップ251の結果が「No」)、又はインデックス情報ファイルに新たにインデックス情報を追記することによってメモリ101に保持できないサイズになった場合には(ステップ1453の結果が「No」)、インデックス情報追加後のレコード集合が局所性を有していないと判定する(ステップ253)。
ここで、図2Aの部分インデックスを作成する手順の説明に戻る。
プロセッサ102は、インデックス情報が抽出されたレコードが局所性を有している場合には(ステップ205の結果が「Yes」)、抽出したインデックス情報をインデックス情報ファイル600に追記する(ステップ211)。
また、インデックス情報が抽出されたレコードが局所性を有していない場合には(ステップ205の結果が「No」)、新たに別のインデックス情報ファイルをインデックス情報の出力先とし、抽出されたインデックス情報を出力する(ステップ206)。その後、部分インデックスを作成するスレッドを新たに生成し、切り替えられたインデックス情報ファイルに基づいて部分インデックスを作成する(ステップ207)。
プロセッサ102は、ステップ207の処理が終了すると、次のレコードについてステップ203以降の処理を実行する。
プロセッサ102は、読み出したページが商品販売履歴表500の最終ページであった場合には(ステップ204の結果が「Yes」)、抽出したインデックス情報をインデックス情報ファイル600に追記する(ステップ208)。さらに、インデックス情報を抽出する処理とは別スレッドで、部分インデックスを作成する(ステップ209)。
以上の手順によって部分インデックスを作成することによって、作業用外部記憶装置160にメモリ101に格納しきれなかったデータを格納する必要がなくなる。したがって、外部記憶装置にアクセスする必要がなくなるため、部分インデックスの作成に要する時間を短縮することができる。
インデックスを作成する処理には、インデックス情報ファイルに含まれるデータをキー値順にソートする処理が含まれる。ソート処理を実行する際に、一時データをメモリ101に格納する必要がある。このとき、メモリ101の容量が不足すると、ソート処理を実行するために、作業用外部記憶装置160にデータを入出力する必要が生じるため、出力される一時データのサイズも考慮して、局所性を判定するためのインデックス情報ファイルのサイズを設定する。
本発明の第3の実施の形態によれば、インデックス情報ファイルがメモリ101に格納可能であり、作業用外部記憶装置160にデータを入出力せずに、部分インデックスを作成することが可能である。すなわち、インデックス情報ファイルのサイズをオンメモリで部分インデックスを作成可能な大きさにすることによって、作業用外部記憶装置へのデータの入出力によるオーバヘッドを削減し、インデックスの作成に要する時間を短縮することができる。
(第4の実施の形態)
本発明の第1から第3の実施の形態では、レコード集合の局所性判定基準をユーザの指定によって設定していたが、第4の実施の形態では、システム環境などに基づいて、レコード集合の局所性判定基準を、データベース管理システム105が自動的に決定する。
本発明の第4の実施の形態では、第1の実施の形態の部分インデックス作成管理部130に、局所性判定基準指定受付部132の替わりに局所性判定基準作成部を備える。
局所性判定基準作成部は、格納用外部記憶装置150の構成情報、ネットワーク170及びインターフェース103の負荷情報、オペレーティングシステム106によって取得可能な情報などを参照して、局所性の判定基準を生成する。作成された基準に基づいて、第1の実施の形態に示した手順と同様に、部分インデックスを作成する。
局所性の判定基準を生成する一例としては、ストライピングされている記憶領域のサイズに基づいて決定してもよい。
また、インデックス情報ファイルを作成するために作業用外部記憶装置160にアクセスする必要のないサイズを取得し、局所性の判定基準としてもよい。このとき、取得されるサイズは、オペレーティングシステム106などから取得される利用可能なメモリ量に基づいて算出してもよいし、インデックス情報ファイル保存領域122のサイズとしてもよい。取得されたサイズを、レコード集合を格納する領域のサイズとすることによって、本発明の第3の実施の形態と同様の効果を得ることができる。
また、論理アドレスと物理アドレスの対応表に基づいて、同一HDD番号を有する領域が連続しているか否かを判定し、連続していない場合には、領域間の物理アドレスの間隔を取得する。取得された領域間の間隔に基づいて、例えば、第2の実施の形態の図9Bのステップ953の処理で指定されている値を設定することによって、第2の実施の形態の効果を得ることができる。
本発明の第4の実施の形態によれば、ユーザの指定によらずに局所性の判定基準を自動的に設定することができる。したがって、ユーザの手間を減らすだけでなく、長期間の運用によって、外部記憶装置が拡張された場合など、環境の変化に応じた局所性判定基準を適用することができる。
(第5の実施の形態)
本発明の第5の実施の形態では、表154が複数の外部記憶装置に分割して格納されている場合にインデックス検索を実行する方法について説明する。
図13は、本発明の第5の実施の形態の計算機システム構成を示すブロック図である。
本発明の第5の実施の形態では、第1の実施の形態の実行タスク管理部115に、部分インデックス格納場所管理部1517を備えている。その他の構成については第1の実施の形態と同様である。
部分インデックス格納場所管理部1517は、各部分インデックスに含まれるレコード集合が格納されている記憶装置155の番号を保持する部分インデックス格納場所管理表を含む。部分インデックス格納場所管理部1517は、部分インデックス格納場所管理表の作成及び更新などを行う。部分インデックス格納場所管理表の詳細については、図18にて後述する。
本発明の第5の実施の形態の対応表の構成は、第1の実施の形態の対応表400と同じである。図4に示すように、3つのHDDによって表154が格納される。
図14は、本発明の第5の実施の形態のインデックス1700と商品販売履歴表500との関係を説明する図である。
図4を参照すると、論理アドレスが0x00000000から0x00000fffの記憶領域は、HDD番号が01の記憶装置によって提供され、論理アドレスが0x00001000から0x00001fffの記憶領域は、HDD番号が02の記憶装置によって提供される。したがって、部分インデックス003に対応するレコードに対応するデータは、HDD番号が01及び02の記憶装置に記憶される。
図17は、本発明の第5の実施の形態の部分インデックス格納場所管理部1517に保持される部分インデックス格納場所管理表1900の一例を示す図である。
部分インデックス格納場所管理表1900は、部分インデックスとHDDとの対応を含み、部分インデックスが格納されているHDDの識別子が記録される。部分インデックス格納場所管理表1900は、部分インデックス番号1901及びHDD番号1902を含む。部分インデックス番号1901は、部分インデックスを識別する番号である。HDD番号1902は、HDDを識別する番号である。
本発明の第5の実施の形態では、問合せが実行されると、問合せ実行制御部110によって動的に複数のタスクが生成される。また、生成されたタスクは、実行タスク管理部115によって管理される。そして、各タスクがそれぞれI/O要求を発行することによって、データベースサーバ100から格納用外部記憶装置150にI/O要求が多重に発行される。
図15は、本発明の第5の実施の形態のインデックス検索の手順を示すフローチャートである。
プロセッサ102は、まず、部分インデックス格納場所管理表1900が作成済みか否かを判定する(ステップ1806)。部分インデックス格納場所管理表1900が作成済みでない場合には(ステップ1806の結果が「Yes」)、新たに部分インデックス格納場所管理表1900を作成する(ステップ1807)。
プロセッサ102は、次に、部分インデックス格納場所管理表1900を参照し、各記憶装置について、格納されているレコードを含む部分インデックスを1つずつ選択する(ステップ1801)。図17に示した部分インデックス格納場所管理表1900では、HDD番号1902が01であるHDDに格納されているレコードを含む部分インデックス001と、02であるHDDに格納されているレコードを含む部分インデックス003が選択される。
プロセッサ102は、選択された各部分インデックスについて、複数のタスクを生成し、生成されたタスクによって検索を開始する(ステップ1802)。
その後、プロセッサ102は、すべての部分インデックスについて検索を開始したか否かを判定する(ステップ1803)。すべての部分インデックスについて検索を開始した場合には(ステップ1803の結果が「Yes」)、インデックス検索を終了する。
プロセッサ102は、未検索の部分インデックスが残っている場合には(ステップ1803の結果が「No」)、各記憶装置について、格納されているレコードを含む部分インデックスであって、かつ、検索が開始されていない部分インデックスを選択する(ステップ1804)。そして、選択された部分インデックスについて、複数のタスクを生成し、生成されたタスクによって検索を開始する(ステップ1802)。図17に示した部分インデックス格納場所管理表1900では、HDD番号1902が01であるHDDに格納されているレコードを含む部分インデックスであって、かつ、検索が開始されていない部分インデックス002が選択され、検索が開始される。以上の処理をすべての部分インデックスの検索が開始されるまで繰り返す。
続いて、部分インデックス格納場所管理表1900を作成する処理について説明する。
図16は、本発明の第5の実施の形態の部分インデックス格納場所管理表1900を作成する手順を示すフローチャートである。
本処理は、部分インデックス格納場所管理部1517を処理することによって実行される。
プロセッサ102は、まず、処理対象の部分インデックスを示すカウンタを初期化する。具体的には、カウンタNの値を1に設定する(ステップ1851)。
プロセッサ102は、N番目の部分インデックスについて、対応するレコードを格納している記憶装置番号を取得する。具体的には、部分インデックスに対応するレコードポインタに基づいて格納場所の論理アドレスを特定し、さらに、図4に示した外部記憶装置構成情報取得部131によって取得された対応表400を参照して、当該部分インデックスに含まれるレコード集合が格納されているHDDを識別する番号を取得する。そして、取得されたHDDを識別する番号と部分インデックスを識別する番号とを部分インデックス格納場所管理表1900に保存する(ステップ1852)。
プロセッサ102は、N番目の部分インデックスに対する処理が終了すると、N番目の部分インデックスが最後の部分インデックスであるか否かを判定する(ステップ1853)。N番目の部分インデックスが最後の部分インデックスである場合には(ステップ1853の結果が「Yes」)、部分インデックス格納場所管理表作成処理を終了する。
一方、N番目の部分インデックスが最後の部分インデックスでない場合には(ステップ1853の結果が「No」)、カウンタをNからN+1に更新し(ステップ1854)、N+1番目の部分インデックスについて同様に処理する。
なお、本発明の第5の実施の形態では、作成済の部分インデックスに対して部分インデックス格納場所管理表1900を作成する手順を説明したが、部分インデックス作成処理と並行して部分インデックス格納場所管理表1900を作成するようにしてもよい。
本発明の第5の実施の形態によれば、各部分インデックスごとに検索を実行し、各記憶装置で格納場所が局所的になるようにI/O要求を集中して発行することに加え、複数の記憶装置にまたがって表154が格納されている場合には、各記憶装置にそれぞれI/O要求が並列して発行される。したがって、各記憶装置においてI/O要求が並列して処理されるため、さらに、I/O要求を処理する時間を短縮することができる。
(第6の実施の形態)
本発明の第6の実施の形態では、表にデータを追加した際に、追加したデータに対応するインデックスを作成する処理について説明する。なお、以下の説明では、表にデータを追加した後に、追加したデータに対するインデックスを作成する方法を説明しているが、表に追加データを挿入する処理と並列して追加データに対応するインデックス作成処理を実行してもよい。
本発明の第6の実施の形態の計算機システムの構成は、図1に示した第1の実施の形態と同様である。また、インデックスの構成などについても第1の実施の形態と同様である。以下、表にデータを追加した際に、追加したデータに対応するインデックスを作成する処理について説明する。
プロセッサ102は、まず、格納用外部記憶装置150に、追加データを格納する領域が存在するかを判定する。追加データを格納する領域が不足している場合には、記憶装置を追加するなどして領域を拡張し、外部記憶装置構成情報取得部131によって、追加した領域を含む格納用外部記憶装置150の構成情報を取得し、保存する。
次に、プロセッサ102は、表にデータを追加した際に、追加したデータに対応するインデックスを新たな部分インデックスとして作成するか、もしくは、追加したデータの一部に対応するインデックスを既存の最新部分インデックスに追加し、残りのデータに対応するインデックスを新たな部分インデックスとして作成するかを決定する。この決定は、最新の部分インデックスのサイズなどの情報に基づいて、部分インデックス作成管理部130が自動的に決定してもよく、また、ユーザが部分インデックス作成管理部130に指示してもよい。
追加したデータのインデックスを新たな部分インデックスとして作成する場合は、図2に示す部分インデックス作成手順に従って、インデックスデータ取得部121によって追加したデータのインデックス情報を取得し、部分インデックスを作成する。
追加したデータの一部に対応するインデックスを既存の最新の部分インデックスに追加し、残りのデータに対応するインデックスを新たな部分インデックスとして作成する場合には、以下に示す手順に従ってインデックスを作成する。以下に示す手順は、追加したデータのインデックス情報、既存の部分インデックスに含まれるデータのインデックス情報、外部記憶装置構成情報取得部131に保存されている対応表400、及び局所性判定基準指定受付部132にて受け付けた局所性判定基準に基づいて実行される。
プロセッサ102は、まず、既存の部分インデックスに含まれるデータのインデックス情報を、インデックス情報ファイルとしてインデックス情報ファイル保存領域122に保存する。
次に、プロセッサ102は、図2Aに示した部分インデックスを作成する手順に従って、インデックスを作成する。
プロセッサ102は、追加したデータを1ページ分読み出し、インデックスデータ取得部121によって、インデックスの作成に必要なインデックス情報を抽出する(ステップ203)。
プロセッサ102は、読み出したページが追加したデータの最終ページであるか否かを判定する(ステップ204)。読み出したページが追加したデータの最終ページでない場合には(ステップ204の結果が「No」)、インデックス情報ファイルに含まれるレコード集合に対してインデックス情報が抽出されたレコードが、格納用外部記憶装置150において局所性を有するか否かを判定する(ステップ205)。
プロセッサ102は、インデックス情報ファイルに含まれるレコード集合に対してインデックス情報が抽出されたレコードが局所性を有している場合には(ステップ205の結果が「Yes」)、抽出したインデックス情報をインデックス情報ファイル600に追記する(ステップ211)。
プロセッサ102は、インデックス情報ファイルに含まれるレコード集合とインデックス情報が抽出されたレコードが局所性を有していない場合には(ステップ205の結果が「No」)、新たに別のインデックス情報ファイルをインデックス情報の出力先とし、抽出されたインデックス情報を出力する(ステップ206)。
さらに、プロセッサ102は、インデックスを作成するスレッドを新たに生成し、切り替えられたインデックス情報ファイルに基づいて部分インデックスを作成する(ステップ207)。
プロセッサ102は、ステップ207の処理が終了すると、次のレコードについてステップ203以降の処理を実行する。
プロセッサ102は、読み出したページが追加したデータの最終ページであった場合には(ステップ204の結果が「Yes」)、抽出したインデックス情報をインデックス情報ファイル600に追記する(ステップ208)。さらに、インデックス情報を抽出する処理とは別スレッドで、部分インデックスを作成する処理を実行する(ステップ209)。
本発明の第6の実施の形態によれば、外部記憶装置において格納位置が局所性を有するレコード集合ごとに部分インデックスを作成することができる。また、既存の部分インデックスに対する修正を最小限に抑えて追加されたデータのインデックスを高速に作成することができる。
(第7の実施の形態)
本発明の第7の実施の形態では、複数の記憶装置又は格納用外部記憶装置によって分散して提供された領域を統合し、当該統合された領域に表のデータを格納する場合について説明する。
図18は、本発明の第7の実施の形態の計算機システムの構成を示すブロック図である。
本発明の第7の実施の形態のデータベースサーバ100は、ネットワーク170を介して1つ又は複数の格納用外部記憶装置150と接続されている。また、外部記憶装置構成情報取得部131は、接続されている1つ又は複数の格納用外部記憶装置150のそれぞれの構成情報を取得する。さらに、接続されている1つ又は複数の格納用外部記憶装置150に作成された領域相互の構成情報を取得する格納領域間構成情報取得部2033を備えている。
図19は、本発明の第7の実施の形態の格納用外部記憶装置150の構成情報の一例である論理アドレスと物理アドレスとの対応表2100を示す図である。
対応表2100は、データベースサーバ100によって認識される論理アドレス2101と、当該論理アドレス2101に対応する物理アドレス2102によって構成される。論理アドレス2101については、第1の実施の形態の対応表400の論理アドレス401と同じである。物理アドレス2102は、第1の実施の形態の物理アドレス402の構成に加えて、外部記憶装置の識別情報である外部記憶装置番号が追加されている。
図20は、本発明の第7の実施の形態のインデックス2200と商品販売履歴表2201との関係を説明する図である。
以下、第7の実施の形態のインデックス作成処理の手順について説明する。
プロセッサ102は、まず、外部記憶装置構成情報取得部131によって、データベースサーバ100に接続されている1つ又は複数の格納用外部記憶装置150のそれぞれの構成情報を取得する。さらに、格納領域間構成情報取得部2033によって、データベースサーバ100に接続されている1つ又は複数の格納用外部記憶装置150によって提供されている記憶領域の構成情報を取得し、対応表2100を作成する。
例えば、接続されている1つ又は複数の格納用外部記憶装置150に作成された複数のLU(Logical Unit)を、データベースサーバ100のオペレーティングシステム106によってLVM(Logical Volume Manager)を利用して1つの論理ボリュームを作成する場合には、各格納用外部記憶装置150から取得した各LUの構成情報と、オペレーティングシステム106から取得したLVM構成情報に基づいて、対応表2100を作成する。
データベースサーバ100に接続されている1つ又は複数の格納用外部記憶装置150によって提供される記憶領域の構成情報は、オペレーティングシステム106によって管理用コマンドが提供されている場合には、当該コマンドを利用して取得してもよい。また、データベースサーバ100に接続されている1つ又は複数の格納用外部記憶装置150を設計したデータベース設計者が対応表2100を記載したファイルを作成し、格納領域間構成情報取得部2033に通知してもよい。さらに、GUIを利用したインターフェースによって格納領域間構成情報取得部2033に必要な情報を通知してもよい。
以降、プロセッサ102は、図2Aに示した第1の実施の形態のインデックス作成手順にしたがって部分インデックスを作成する。局所性の判断は、例えば、対応表2100に基づいて、外部記憶装置番号及びHDD番号が一致する領域に格納されているレコードが局所性を有しているとすればよい。
本発明の第7の実施の形態によれば、複数の外部記憶装置に格納されたデータに対して、各記憶装置において局所的な位置に格納されるレコード集合ごとに部分インデックスが作成されるため、複数の外部記憶装置によって構成されるデータベース処理システムにおいても、検索時のI/O処理時間短縮が可能である。
(第8の実施の形態)
本発明の第8の実施の形態では、部分インデックスを利用したインデックス検索を実行する際に、検索対象の部分インデックスを絞り込むための情報を保持するメタインデックスを作成することによって、インデックス検索を高速化する。
図21は、本発明の第8の実施の形態の計算機システムの構成を示すブロック図である。
本発明の第8の実施の形態の計算機システムでは、第1の実施の形態の構成に加え、実行タスク管理部115にメタインデックス管理部2417が備えられる。メタインデックス管理部2417は、部分インデックスを利用したインデックス検索を実行する際に、検索対象の部分インデックスを絞り込むためのメタインデックスを作成及び管理する。具体的な手順については、図23及び図26にて後述する。
図22は、本発明の第8の実施の形態のメタインデックス2506及びインデックス2500と、商品販売履歴表2501との関係を説明する図である。
メタインデックス2506は、インデックスの対象となる商品IDと、当該商品IDに対応するレコードが格納されたレコードのインデックスが格納されている部分インデックスの識別情報が格納されている。具体的には、商品ID「Item001」に対応するレコードのインデックスが格納されている部分インデックスが「001」及び「004」であることがわかる。
本発明の第8の実施の形態では、インデックス検索の実行時に、まず、メタインデックス2506を検索し、検索対象のレコードに対応する部分インデックスを特定してからレコードを取得する。こうすることによって、すべての部分インデックスを検索する必要がなくなり、インデックス検索を高速化することができる。以下、本発明の第8の実施の形態のインデックス検索処理の手順について説明する。
図23は、本発明の第8の実施の形態のインデックス検索の手順を示すフローチャートである。
プロセッサ102は、まず、メタインデックスが作成済みか否かを判定する(ステップ2606)。メタインデックスが作成済みでない場合には(ステップ2606の結果が「Yes」)、メタインデックス管理部2417によって、新たにメタインデックスを作成する(ステップ2607)。メタインデックスを作成する処理を、図24に示す。
図24は、本発明の第8の実施の形態のメタインデックスを作成する手順を示すフローチャートである。
プロセッサ102は、まず、処理対象の部分インデックスを示すカウンタを初期化する。具体的には、カウンタNの値を1に設定する(ステップ2651)。
プロセッサ102は、N番目の部分インデックスについてメタインデックスを作成する(ステップ2652)。メタインデックス作成処理では、1つの部分インデックスについて、当該部分インデックスに含まれるレコードのメタインデックスを作成するキーカラムを特定し、当該キーカラムに対応する値を取得する。
例えば、図22の商品販売履歴表2501のインデックス2500について、商品IDをキーカラムとしてメタインデックス2506を作成する場合には、部分インデックス001に含まれるレコードの商品IDの値を取得する。その結果、部分インデックス001に含まれるレコードの商品IDの値として、「Item001」と「Item003」が取得される。
以上の処理で取得された値に基づいて、プロセッサ102は、キーカラムの値であるItem001と部分インデックス番号である001の組である(Item001,001)、及び(Item003,001)をメタインデックス2506に登録する。
プロセッサ102は、N番目の部分インデックスに対する処理が終了すると、N番目の部分インデックスが最後の部分インデックスであるか否かを判定する(ステップ2653)。N番目の部分インデックスが最後の部分インデックスである場合には(ステップ2653の結果が「Yes」)、部分インデックス格納場所管理表作成処理を終了する。
一方、N番目の部分インデックスが最後の部分インデックスでない場合には(ステップ2653の結果が「No」)、カウンタをNからN+1に更新し(ステップ2654)、N+1番目の部分インデックスについて同様に処理する。
以上の手順をすべての部分インデックスに対して実行し、メタインデックスを作成する。なお、本発明の第8の実施の形態では、作成済の部分インデックスに対してメタインデックス2506を作成する手順を説明したが、部分インデックス作成処理を実行する際に並行してメタインデックス2506を作成するようにしてもよい。
ここで、図23のインデックス検索処理を示すフローチャートの説明に戻る。
プロセッサ102は、メタインデックスを参照し、検索対象の部分インデックスを選択する(ステップ2601)。図22の例では、「“商品ID=Item001”の販売履歴を検索する」場合には、まず、メタインデックス2506を参照し、部分インデックス001が、Item001の販売履歴を含む部分インデックスであることを特定し、部分インデックス001を選択する。そして、複数のタスクを動的に生成し、選択された部分インデックス001についての検索処理を実行する(ステップ2602)。
プロセッサ102は、さらにメタインデックスを参照し、検索対象の部分インデックスで、検索処理が未実行の部分インデックスを選択する(ステップ2603)。図22の例では、Item001の販売履歴を含む部分インデックスであって、検索処理が未実行である部分インデックス004を選択する。そして、同様に複数のタスクを動的に生成し、選択された部分インデックス004についての検索処理を開始する(ステップ2602)。
プロセッサ102は、さらにメタインデックスを参照し、検索対象の部分インデックスであって、検索処理が未実行の部分インデックスが残っているか否かを判定する(ステップ2604)。図22の例では、商品IDが「Item001」であるレコードに対応する部分インデックスは、部分インデックス001と部分インデックス004であり、他に選択される部分インデックスがないため(ステップ2604の結果が「No」)、インデックス検索を終了する。
本発明の第8の実施の形態によれば、メタインデックスを利用し、検索対象の部分インデックスを絞り込むことによって、検索処理時間を短縮することができる。特に、部分インデックスの数が大きい場合など、レコード数の多い大規模データベースで効果的である。
(第9の実施の形態)
本発明の第9の実施の形態では、アプリケーションプログラム104がデータベース管理システム105に複数の問合せを同時に要求した場合に、部分インデックスを利用して検索する手順について説明する。
図25は、本発明の第9の実施の形態の計算機システムの構成を示すブロック図である。
アプリケーションプログラム104は、プロセッサ102に実行され、各種業務を処理する。業務を処理する際に、データベース管理システム105に問合せを発行し、問合せ結果を受信する。本発明の第9の実施の形態では、アプリケーションプログラム104は、データベース管理システム105に検索条件の引数のみが異なるような問合せを同時に大量に発行する。このような問合せの具体例については図26Aから図26Cを参照しながら説明する。
本発明の第9の実施の形態のデータベース管理システム105は、複数問合せ実行制御部2740を含む。
複数問合せ実行制御部2740は、複数問合せ受付部2741、部分インデックス検索制御部2742、及び問合せ実行制御部110を備える。
複数問合せ受付部2741は、アプリケーションプログラム104から要求された同時に複数の問合せを受け付ける。部分インデックス検索制御部2742は、複数の問合せに対する部分インデックスによる検索処理を制御する。
問合せ実行制御部110は、要求された問合せを1件ずつ処理する。また、問合せ実行制御部110は、第1の実施の形態と同様に、問合せ受付部111、問合せ実行プラン生成部112、問合せ実行部113、及びDBバッファ114を含む。問合せ実行制御部110に含まれる各構成は、第1の実施の形態と同様である。問合せ実行部113は、前述のように、問合せ結果を生成するための基本的なデータベースオペレーションを備えている。問合せ実行プランとは、問合せ結果を作成するために、データベースオペレーションを組み合わせた処理手順である。
図26Aから図26Cは、本発明の第9の実施の形態の同時に発行される問合せの一例を示す図である。
図26Aから図26Cに示すように、本発明の第9の実施の形態では、SQLによって問合せが記述されている。また、アプリケーションプログラム104からデータベース管理システム105に発行される問合せは、参照されるインデックスが共通となるような問合せであって、前述のように、検索条件の引数のみが相違するような問合せである。
具体的には、図26Aから図26Cに示すように、それぞれ検索条件の引数がItem001、Item002、Item003のように異なるのみであって、他の検索条件の指定が同じ問合せが示されている。
なお、インデックスについては、図20に示した本発明の第7の実施の形態のインデックス2200と同様である。以下、図26Aから図26Cに示すような複数の問合せを処理する手順について、図27を参照しながら説明する。
図27は、本発明の第9の実施の形態のインデックス検索の手順を示したフローチャートである。
プロセッサ102は、アプリケーションプログラム2704から、同じ部分インデックスを利用可能な複数の検索要求が同時に発行されると、データベース管理システム105の複数問合せ受付部2741によって検索要求を受け付ける。
プロセッサ102は、受け付けた複数の問合せについて、それぞれ問合せ実行プランを作成する。具体的には、まず、受け付けた複数の問合せのカウンタNに1を設定し、初期化する(ステップ2901)。続いて、問合せ実行プラン生成部112によって、N番目の問合せについて問合せ実行プランを作成する(ステップ2902)。
プロセッサ102は、受け付けられたすべての問合せについて問合せ実行プランを作成したか否かを判定する(ステップ2903)。作成されていない場合には(ステップ2903の結果が「No」)、カウンタNに1を加算し(ステップ2904)、残りの問合せについて問合せ実行プランを作成する(ステップ2902)。
プロセッサ102は、受け付けられたすべての問合せについて問合せ実行プランを作成すると(ステップ2903の結果が「Yes」)、各問合せの処理を開始する。本発明の第9の実施の形態の検索処理では、部分インデックスごとに各問合せを実行する。
プロセッサ102は、問合せに対応するカウンタN及び部分インデックスに対応するカウンタMを初期化する(ステップ2905)。そして、M番目の部分インデックスについて、N番目の問合せを開始する(ステップ2906)。
図20のインデックス情報及び図26Aから図26Cの問合せを参照しながら具体的に説明すると、まず、部分インデックス001(2202)について、1番目の検索要求2800の処理を開始する(ステップ2906)。続いて、部分インデックス001(2202)について、2番目の検索要求2801の処理を開始し(ステップ2908、ステップ2906)、さらに、3番目の検索要求2802の処理を開始する。
このとき、部分インデックス001(2202)について、3番目(最後)の検索要求2802まで処理を開始したため(ステップ2907の結果が「Yes」)、続いて、部分インデックス002(2203)について、1番目の検索要求2800から処理を開始する(ステップ2909、ステップ2910及びステップ2911)。続いて、部分インデックス002について、2番目の検索要求2801の処理を開始する。以降、同様の手順によって、部分インデックス004まで、3つの検索要求を実行する。
以上のように、本発明の第9の実施の形態によれば、検索条件の引数のみが異なるような検索要求を複数実行する場合には、複数問合せ実行制御部2740によって部分インデックスへの入出力を集約し、記憶装置の局所的な場所に格納されたデータを対象とするI/O要求をまとめて発行することが可能となる。したがって、記憶装置に備えられたI/O要求のスケジューリング機能によって、I/O要求を処理する時間を短縮することができる。
(第10の実施の形態)
本発明の第10の実施の形態では、データベースに格納されたデータを更新する際の処理について説明する。
図28は、本発明の第10の実施の形態の計算機システムの構成を示すブロック図である。
問合せ実行制御部110の実行タスク管理部115は、更新要求の結果を格納用外部記憶装置150に反映する処理を制御する更新書込み制御部3117を備える。
図29は、本発明の第10の実施の形態のアプリケーションプログラム104からデータベース管理システム105に発行される更新要求の一例を示す図である。
図29に示す更新要求は、商品IDが「Item001」の商品が買い占められ、各倉庫の在庫を0に更新する処理に対応する。
図30は、本発明の第10の実施の形態のインデックス3300と商品在庫管理表3301との関係を説明する図である。
図29の更新要求が実行されると、商品在庫管理表3301において商品IDがItem001のレコードが更新され、各レコードの在庫数が0になる。具体的には、レコードポインタの値が0x00000000、0x00003000及び0x00010000のレコードの在庫数が0となる。
以下、本発明の第10の実施の形態のデータ更新処理について説明する。
プロセッサ102は、アプリケーションプログラム104からデータベース管理システム105に更新要求3200が発行されると、問合せ実行制御部110の問合せ受付部111が更新要求3200を受け付ける。
プロセッサ102は、問合せ実行プラン生成部112によって、受け付けた更新要求3200を処理する問合せ実行プランを作成する。さらに、問合せ実行部113によって動的にタスクを生成し、作成された問合せ実行プランに従って処理を実行する。
更新要求3200では、まず、商品IDがItem001のレコードを検索する。検索対象のレコードがDBバッファ114に保存されている場合には、DBバッファ114から該レコードを取得する。当該レコードがDBバッファ114に保存されていない場合には、格納用外部記憶装置150からレコードを取得する。格納用外部記憶装置150からレコードを検索する手順は、第1の実施の形態で説明した手順と同様である。
プロセッサ102は、該当するレコードを取得すると、その在庫数を0に更新し、結果をDBバッファ114に保存する。商品IDがItem001のレコードすべてについて、在庫数の更新処理を実行する。第1の実施の形態で説明した手順と同様の手順によって、格納用外部記憶装置150からレコードを検索するため、部分インデックス順に部分インデックスに含まれるレコードが取得され、その結果、取得されたレコード集合は、取得された順に記憶装置155にて局所性を有する。
問合せ実行制御部110は、アプリケーションプログラム104から指示された時点、もしくは、DBバッファ114に保存された更新後のレコード数がデータベース設計者によって事前に設定された値を超えた場合などを契機として、DBバッファ114に保存された更新済みのレコード集合を格納用外部記憶装置150に上書きする。
本発明の第10の実施の形態によれば、取得されたレコード集合が取得された順に記憶装置155にて局所性を有するため、データの更新処理(書込み処理)についても記憶装置155の局所的な位置にまとめて実行することができる。その結果、検索処理と同様に、データの更新処理に要する時間を短縮することができる。