(57)【特許請求の範囲】
【請求項１】
データが格納されたデータベースを管理するデータベース管理システムが実行される計算機において、要求されたデータを出力するデータベース処理方法であって、
前記計算機は、前記データベース管理システムを実行するプロセッサと、前記データベース管理システムを記憶するメモリとを備え、
前記データに対応する１以上の列によってレコードを構成し、
前記レコードを構成する列は、前記指定された順序を決定する値に対応するソート指定列を含み、
前記方法は、
前記プロセッサが、前記要求されたデータを指定された順序で問合せ結果を出力するように指定された問合せ要求を受け付ける第１ステップと、
前記プロセッサが、前記受け付けた問合せ要求に基づいて、前記データを格納する表にアクセスする順序を含む問合せ実行プランを生成する第２ステップと、
前記プロセッサが、前記生成された問合せ実行プランに基づいて、前記問合せ要求に基づいて要求されたデータを前記データベースから取得する第３ステップと、
前記プロセッサが、前記レコードごとに、前記取得されたデータを含む中間結果を、前記レコード単位で生成する第４ステップと、
前記プロセッサが、前記第４ステップで生成された中間結果を、前記ソート指定列の値が取得されていない中間結果によって構成される第１リスト、前記ソート指定列の値が取得され、かつ、前記レコードを構成する列に対応するデータがすべて取得されていない中間結果によって構成される第２リスト、又は、前記レコードを構成する列に対応するデータがすべて取得されている中間結果によって構成される第３リストのいずれかに分類する第８ステップと、
前記プロセッサが、前記生成された中間結果のうち、前記第３リストに分類された中間結果を、前記問合せ要求で指定された順序に並び替える第５ステップと、
前記プロセッサが、処理の進捗状況に基づいて、前記並び替えられた中間結果の順序が確定したか否かを前記中間結果ごとに判定する第６ステップと、
前記プロセッサが、前記順序が確定した中間結果を、前記問合せ結果として先頭から順に出力する第７ステップと、を含み、
前記第６ステップでは、前記レコードを構成する列に対応するデータがすべて取得されていない場合には、前記プロセッサは、順序が確定していないと判定し、
前記第６ステップは、前記プロセッサが、前記第１リストに分類された中間結果が存在するか否かを判定する第９ステップと、前記プロセッサが、前記第２リストに分類された中間結果を前記指定された順序で並び替えた場合に、最も順序が先となる中間結果の前記ソート指定列の値を順序確定判定値として取得する第１０ステップと、を含み、
前記第６ステップでは、前記第１リストに分類された中間結果が存在しない場合に、前記プロセッサが、前記第３リストに分類され、前記順序確定判定値を有する中間結果よりも順序が先になる前記ソート指定列の値を有する中間結果を順序が確定したと判定し、
前記第７ステップでは、前記プロセッサは、前記第３リストに分類され、かつ、順序が確定した中間結果を先頭から順に前記問合せ結果として出力するデータベース処理方法。
【請求項２】
請求項１に記載のデータベース処理方法であって、
前記第３ステップは、
前記プロセッサが、前記問合せ実行プランに基づいて、前記問合せ結果を取得する処理を含み、並列して実行可能な処理単位である実行コンテキストを生成するステップと、
前記プロセッサが、前記実行コンテキストを処理することによって前記データを取得するステップと、を含み、
前記第９ステップでは、前記ソート指定列の値を取得するすべての実行コンテキストが完了している場合に、前記プロセッサは、前記第１リストに分類された中間結果が存在しないと判定するデータベース処理方法。
【請求項３】
請求項２に記載のデータベース処理方法であって、
前記第８ステップは、
前記実行コンテキストを処理する過程で前記ソート指定列の値の取得が完了した場合に、前記プロセッサが、前記生成された中間結果を前記第２リストに分類するステップと、
前記実行コンテキストに含まれる前記問合せ結果を取得する処理が完了した場合に、前記プロセッサが、前記生成された中間結果を前記第３リストに分類するステップと、を含むデータベース処理方法。
【請求項４】
請求項２に記載のデータベース処理方法であって、
前記第３ステップは、前記プロセッサが、前記ソート指定列の値が取得されていない実行コンテキストを優先して処理するステップを含むデータベース処理方法。
【請求項５】
請求項２に記載のデータベース処理方法であって、
前記第３ステップは、前記プロセッサが、前記第２リストに分類される中間結果に対応する実行コンテキストについて、当該中間結果の前記ソート指定列の値に基づき順序が先となる実行コンテキストを優先して処理するステップを含むデータベース処理方法。
【請求項６】
請求項１に記載のデータベース処理方法であって、
前記第５ステップは、前記プロセッサが、前記第２リストに分類される中間結果の順序を前記指定された順序で並び替えるステップを含み、
前記第１０ステップは、前記プロセッサが、前記第２リストに分類された先頭の中間結果の前記ソート指定列の値を順序確定判定値とするデータベース処理方法。
【請求項７】
請求項１に記載のデータベース処理方法であって、
前記第２ステップでは、前記プロセッサが、前記ソート指定列を含む表が優先してアクセスされるように問合せ実行プランを生成するデータベース処理方法。
【請求項８】
請求項１に記載のデータベース処理方法であって、
前記第６ステップでは、前記プロセッサが、問合せ結果の出力要求を受け付けた場合に、前記並び替えられた中間結果の順序が確定したか否かを判定するデータベース処理方法。
【請求項９】
請求項１に記載のデータベース処理方法であって、
前記第６ステップでは、前記プロセッサが、前記生成された中間結果の数が所定数を超えた場合に、前記並び替えられた中間結果の順序が確定したか否かを判定するデータベース処理方法。
【請求項１０】
データを格納するストレージ装置と、前記ストレージ装置に格納されたデータを管理し、要求されたデータを出力するデータベース管理システムが実行される計算機と、を含むデータベース処理システムであって、
前記データを格納する１以上の列によってレコードを構成し、
前記レコードを構成する列は、前記指定された順序を決定する値に対応するソート指定列を含み、
前記計算機は、
前記要求されたデータを指定された順序で問合せ結果を出力するように指定された問合せ要求を受け付ける問合せ要求受付部と、
前記受け付けた問合せ要求に基づいて、前記データを格納する表にアクセスする順序を含む問合せ実行プランを生成する問合せ実行プラン生成部と、
前記生成された問合せ実行プランに基づいて、前記問合せ要求によって要求されたデータを前記ストレージ装置から取得し、前記レコードごとに処理して、前記問合せ要求に対する問合せ結果を出力する問合せ実行部とを備え、
前記問合せ実行部は、
前記取得されたデータを含む中間結果を前記レコードごとに生成し、
前記生成された中間結果を、前記ソート指定列の値が取得されていない中間結果によって構成される第１リスト、前記ソート指定列の値が取得され、かつ、前記レコードを構成する列に対応するデータがすべて取得されていない中間結果によって構成される第２リスト、又は、前記レコードを構成する列に対応するデータがすべて取得されている中間結果によって構成される第３リストのいずれかに分類し、
前記第３リストに分類された中間結果の順序を前記問合せ要求で指定された順序に並び替え、
前記第１リストに分類された中間結果が存在するか否かを判定し、
前記第２リストに分類された中間結果を前記指定された順序で並び替えた場合に、最も順序が先となる中間結果の前記ソート指定列の値である順序確定判定値を取得し、
前記第１リストに分類された中間結果が存在しない場合に、前記第３リストに分類され、前記順序確定判定値を有する中間結果よりも順序が先になる前記ソート指定列の値を有する中間結果を順序が確定したことを前記中間結果ごとに判定し、
前記第３リストに分類され、かつ、順序が確定した中間結果を、前記問合せ結果として先頭から順に出力するデータベース処理システム。
【請求項１１】
請求項１０に記載のデータベース処理システムであって、
前記問合せ実行部は、
前記問合せ実行プランに基づいて、前記問合せ結果を取得する処理を含み、並列して実
行可能な処理単位である実行コンテキストを生成し、
前記実行コンテキストを処理することによって前記データを取得し、
前記ソート指定列の値を取得するすべての実行コンテキストが完了している場合に、前記第１リストに分類された中間結果が存在しないと判定するデータベース処理システム。
【請求項１２】
請求項１１に記載のデータベース処理システムであって、
前記問合せ実行部は、
前記ソート指定列の値を取得する実行コンテキストが完了した場合に、前記生成された中間結果を前記第１リストに分類し、
前記問合せ実行プランに含まれるすべての実行コンテキストが完了した場合に、前記生成された中間結果を前記第３リストに分類するデータベース処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースからデータを抽出する技術に関し、特に、ソートされたデータを抽出する技術に関する。
【背景技術】
【０００２】
近年、企業活動に関連する大量のデータ収集ツールが整備され、現場の担当者が蓄積された大量の販売データを使って分析するビジネスデータ分析が普及しつつある。ビジネスデータ分析では、仮説立案・動向分析・要因分析のように段階ごとに分析が進められる。
【０００３】
ビジネスデータ分析では、現場の担当者が試行錯誤をして、いくつもの仮説立案と動向分析を繰り返すため、大量のデータを抽出する必要がある。そのため、このような大量のデータを効率的に処理するためにデータベースによって管理される。
【０００４】
大量のデータを処理するデータベースシステムでは、分析対象のデータを複数の表に格納している。そして、データを抽出する場合には、複数の表に格納されたデータを連結し、分析者が指定した条件を満たすデータを抽出する。
【０００５】
そこで、このようなデータを抽出する処理を高速化するために、データが格納された二次記憶装置（ストレージ装置）にデータ読み出し要求を多重に発行することによってデータの抽出を高速化する可能な非順序型データベース（ＤＢ）が開発された（特許文献１参照）。
【０００６】
一方、動向分析では、蓄積された大量のデータから重要な順にデータを抽出して解析者に見せることが求められることが多い。抽出したデータの規模が大きいと、指定されたソート順に並べるのに時間がかかる。非順序型ＤＢにおいて、インデクスが作成された列を対象として、それに対するソート結果を高速に変換する技術については特許文献２に記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−３４４１４号公報
【特許文献２】米国特許公開２０１０／０２１１５７７号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ビジネスデータ分析では、動向分析などにおいて、蓄積された大量のデータから必要なデータを抽出し、分析しやすいように抽出したデータを指定した順序で並び替える必要がある。このとき、抽出したデータ量が多ければ、指定された順序でデータを並び替えるために多くの処理時間を必要としてしまう。
【０００９】
特許文献１に開示された非順序型ＤＢでは、データの抽出を高速化することは可能であるが、抽出されたデータの並び替え（ソート）については非順序型ＤＢの特性を生かしたものではなかった。したがって、データの抽出を高速化しても、抽出されたデータのソートがボトルネックになってしまうおそれがあった。
【００１０】
本発明は、二次記憶装置に格納されたデータを取得するデータベース処理システムにおいて、ソートされたデータを抽出する処理を高速化することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の代表的な一形態によれば、データが格納されたデータベースを管理するデータベース管理システムが実行される計算機において、要求されたデータを出力するデータベース処理方法であって、前記計算機は、前記データベース管理システムを実行するプロセッサと、前記データベース管理システムを記憶するメモリとを備え、前記データに対応する１以上の列によってレコードを構成し、前記レコードを構成する列は、前記指定された順序を決定する値に対応するソート指定列を含み、前記方法は、前記プロセッサが、前記要求されたデータを指定された順序で問合せ結果を出力するように指定された問合せ要求を受け付ける第１ステップと、前記プロセッサが、前記受け付けた問合せ要求に基づいて、前記データを格納する表にアクセスする順序を含む問合せ実行プランを生成する第２ステップと、前記プロセッサが、前記生成された問合せ実行プランに基づいて、前記問合せ要求に基づいて要求されたデータを前記データベースから取得する第３ステップと、前記プロセッサが、前記レコードごとに、前記取得されたデータを含む中間結果を、前記レコード単位で生成する第４ステップと、前記プロセッサが、前記生成された中間結果を、前記問合せ要求で指定された順序に並び替える第５ステップと、前記プロセッサが、処理の進捗状況に基づいて、前記並び替えられた中間結果の順序が確定したか否かを前記中間結果ごとに判定する第６ステップと、前記プロセッサが、前記順序が確定した中間結果を、前記問合せ結果として先頭から順に出力する第７ステップと、前記プロセッサが、前記第４ステップで生成された中間結果を、前記ソート指定列の値が取得されていない中間結果によって構成される第１リスト、前記ソート指定列の値が取得され、かつ、前記レコードを構成する列に対応するデータがすべて取得されていない中間結果によって構成される第２リスト、又は、前記レコードを構成する列に対応するデータがすべて取得されている中間結果によって構成される第３リストのいずれかに分類する第８ステップと、を含み、前記第５ステップは、前記プロセッサが、前記第３リストに分類された中間結果の順序を前記指定された順序で並び替えるステップを含み、前記第６ステップでは、前記レコードを構成する列に対応するデータがすべて取得されていない場合には、前記プロセッサは、順序が確定していないと判定し、前記第６ステップは、前記プロセッサが、前記第１リストに分類された中間結果が存在するか否かを判定する第９ステップと、前記プロセッサが、前記第２リストに分類された中間結果を前記指定された順序で並び替えた場合に、最も順序が先となる中間結果の前記ソート指定列の値を順序確定判定値として取得する第１０ステップと、を含み、前記第６ステップでは、前記第１リストに分類された中間結果が存在しない場合に、前記プロセッサが、前記第３リストに分類され、前記順序確定判定値を有する中間結果よりも順序が先になる前記ソート指定列の値を有する中間結果を順序が確定したと判定し、前記第７ステップでは、前記プロセッサは、前記第３リストに分類され、かつ、順序が確定した中間結果を先頭から順に前記問合せ結果として出力する。
【発明の効果】
【００１２】
本発明の一形態によれば、データの抽出と、データのソート及び返送とを並行して実行することによって、抽出開始から問合せ結果の送信開始までの時間を短縮することによって、ソートされたデータを抽出する処理を高速化することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１の実施の形態の計算機システムの構成を示すブロック図である。
【図２】本発明の第１の実施の形態の実行コンテキスト管理部によって実行コンテキストを分類する手順を示すフローチャートである。
【図３】本発明の第１の実施の形態の結果順序確定部分判定部によって問合せ結果のソート順が確定したか否かを判定する手順を示すフローチャートである。
【図４】本発明の第１の実施の形態の問合せ要求に対応するＳＱＬの一例を示す図である。
【図５】本発明の第１の実施の形態の問合せ要求によって抽出されるデータを格納する表の一例を示す図である。
【図６】本発明の第１の実施の形態の問合せ要求に対応するＳＱＬに対応する問合せ実行プランの一例を示す図である。
【図７】本発明の第１の実施の形態におけるソートされたデータをデータベースから抽出し、問合せ結果として出力する過程の具体例を説明する図である。
【図８】本発明の第２の実施の形態の計算機システムの構成を示すブロック図である。
【発明を実施するための形態】
【００１４】
（第１の実施の形態）
図１は、本発明の第１の実施の形態の計算機システムの構成を示すブロック図である。
【００１５】
本発明の第１の実施の形態の計算機システムは、データベースサーバ１０１、１又は複数の外部記憶装置１０３を含む。データベースサーバ１０１及び外部記憶装置１０３は、ネットワーク１０２を介して互いに接続される。
【００１６】
データベースサーバ１０１は、外部記憶装置１０３に格納されたデータを管理するプログラムであるデータベース管理システム１３２を実行する。そして、データベースサーバ１０１で実行されるアプリケーションプログラム１３１又は図示しないクライアント計算機などによって要求された問合せを処理し、問合せ結果を応答する。
【００１７】
データベースサーバ１０１は、メモリ１１１、プロセッサ１１２及びインターフェース１１３を備える。メモリ１１１は、データベース管理システム１３２などのプログラム及び当該プログラムの実行に必要なデータを記憶する。プロセッサ１１２は、メモリ１１１に記憶されたプログラムを実行することによって、各種処理を実行する。
【００１８】
インターフェース１１３は、ネットワーク１０２を介して外部記憶装置１０３に接続する。ネットワーク１０２がストレージエリアネットワーク（ＳＡＮ）である場合には、インターフェース１１３はいわゆるホストバスアダプタ（ＨＢＡ）であってもよい。メモリ１１１に記憶されたプログラムが実行されると、必要に応じて、インターフェース１１３を介して外部記憶装置１０３に入出力要求を発行する。
【００１９】
ネットワーク１０２は、例えば、ファイバーチャネル（ＦＣ）プロトコルが適用されるストレージエリアネットワーク（ＳＡＮ）であるが、その他の任意の形態のネットワークであってもよい。具体的には、ネットワーク１０２がインターネットプロトコル（ＩＰ）ネットワークであれば、データベースサーバ１０１と外部記憶装置１０３との間をｉＳＣＳＩプロトコルで通信するようにしてもよい。
【００２０】
外部記憶装置１０３は、データベースサーバ１０１が管理するデータを格納し、データベースサーバ１０１から送信された入出力要求に基づいて、要求されたデータを読み書きする。
【００２１】
外部記憶装置１０３は、インターフェース１２３、制御装置１２２及び記憶装置１２１を備える。インターフェース１２３は、ネットワーク１０２に接続される。制御装置１２２は、データベースサーバ１０１から送信された入出力要求を処理する。
【００２２】
記憶装置１２１は、入出力要求によって読み書きされるデータを管理するデータベースを格納する。記憶装置１２１は、ハードディスクドライブ（ＨＤＤ）、光ディスクドライブ、半導体記憶装置又はその他の記憶装置であってもよい。図１では、１つの記憶装置１２１が外部記憶装置１０３に備えられているが、記憶装置１２１の数は任意である。また、複数の記憶装置１２１が備えられている場合には、ディスクアレイを構成するようにしてもよい。
【００２３】
続いて、データベースサーバ１０１で実行されるプログラムについて説明する。メモリ１１１に記憶されるプログラムには、アプリケーションプログラム（ＡＰ）１３１、データベース管理システム１３２及びオペレーティングシステム（ＯＳ）１３３が含まれる。
【００２４】
プロセッサ１１２は、ＡＰ１３１を実行することによって、各種業務処理を実行する。このとき、ＡＰ１３１によって、データベース管理システム１３２に問合せ要求を発行し、問合せ結果を受信する。本発明の第１の実施の形態ではデータベース管理システム１３２と同一の計算機（データベースサーバ１０１）でＡＰ１３１が実行されているが、ネットワークを介して接続された別の計算機でアプリケーションプログラムが実行される構成としてもよい。
【００２５】
データベース管理システム１３２は、要求された問合せで指定された条件に合致するデータを外部記憶装置１０３に格納されたデータベースから検索する。そして、検索結果（問合せ結果）となるデータを取得し、要求元に応答する。
【００２６】
データベース管理システム１３２には、関係モデルをベースとした関係データベース管理システム（ＲＤＢＭＳ）、又はオブジェクトモデルをベースとしたオブジェクト指向データベース管理システムがある。本発明の第１の実施の形態では、特に、ＲＤＢＭＳを対象とする。
【００２７】
ＲＤＢＭＳでは、複数種類のデータによって構成されるレコード単位でデータを表１６１に格納し、少ないＩ／Ｏ要求でレコードにアクセスするための索引１６２を備える。索引１６２のデータ構造は、Ｂ木であってもよいし、ハッシュであってもよい。データに対する問合せはＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）によって記述される。ＳＱＬでは、問合せ結果の出力順序指定はＯｒｄｅｒ  ｂｙ句によって表現され、集計演算はＧｒｏｕｐ  ｂｙ句によって表現される。
【００２８】
なお、本発明の第１の実施の形態では、データベース管理システム１３２はネットワーク１０２を介して接続された外部記憶装置１０３に表１６１及び索引１６２を格納しているが、データベースサーバ１０１に記憶装置が備えられている場合には、データベースサーバ１０１内の記憶装置に格納してもよい。
【００２９】
ＯＳ１３３は、データベースサーバ１０１の資源（プロセッサ１１２及びメモリ１１１）を管理するプログラムである。また、データベース管理システム１３２からの入出力要求を受け付け、外部記憶装置１０３に入出力要求を発行する。
【００３０】
ここで、さらに、データベース管理システム１３２の詳細な構成について説明すると、データベース管理システム１３２には、問合せ受付部１４１、問合せ実行部１４３、問合せ実行プラン生成部１４２、実行タスク管理部１４４、ＤＢバッファ１４５、及び問合せ結果保存部１４６が備えられる。
【００３１】
問合せ受付部１４１は、ＡＰ１３１から要求された問合せ要求を受け付ける。さらに、問合せ受付部１４１は、受け付けた問合せ要求を解析し、解析結果に応じて問合せ実行プラン生成部１４２又は問合せ実行部１４３を実行する。
【００３２】
問合せ実行プラン生成部１４２は、問合せ受付部１４１が受け付けた問合せ要求の処理手順である問合せ実行プランを生成する。問合せ実行プランについては後述する。
【００３３】
問合せ実行部１４３は、問合せ実行プラン生成部１４２によって生成された問合せ実行プランに基づいて要求された問合せを処理するために必要な処理を実行する。
【００３４】
問合せ実行部１４３は、問合せ結果を生成するための基本的なデータベースオペレーションを実行可能である。問合せ実行プランは、問合せに応じた結果を生成するために必要なデータベースオペレーションを組み合わせたものである。
【００３５】
問合せ実行部１４３は、実行コンテキスト管理部１５０、結果順序確定部分判定部１６０、及び問合せ結果返送部１７０を備える。
【００３６】
前述のように、問合せ実行部１４３は、複数のタスクを生成して、問合せ要求を処理する。この複数のタスクには、問合せ実行プランにおいて論理的に並列実行可能な実行コンテキストが割り当てられる。また、実行コンテキストは、問合せ実行プランを構成するオペレーションに対応する処理が含まれる。実行コンテキストが実行される際には、オペレーションごとにタスクが生成され、生成されたタスクが実行されることによって問合せ処理が実行される。
【００３７】
実行コンテキスト管理部１５０は、複数の実行コンテキストを、それぞれの処理の進捗ごとに分類管理する。また、実行コンテキスト管理部１５０は、結果候補リスト１５１（第１リスト、第２リスト）及び結果確定リスト１５２（第３リスト）を含み、処理の進捗に応じて実行コンテキストをいずれかのリストに分類する。このとき、処理中の実行コンテキストにおいて取得済のデータを含む中間結果を分類するようにしてもよい。実行コンテキストを分類する手順については、図２にて後述する。
【００３８】
結果候補リスト１５１は、問合せを処理するためのタスクの一部が実行された結果のうち、ソート結果が未確定の実行コンテキストを格納（分類）する。結果候補リスト１５１には、判定列未取得リスト１５３（第１リスト）及び判定列取得済リスト１５４（第２リスト）が含まれる。判定列未取得リスト１５３は、ソート指定列に対応するデータが未取得の実行コンテキストが格納される。一方、判定列取得済リスト１５４は、ソート指定列に対応するデータが取得済みの実行コンテキストが格納される。結果確定リスト１５２は、問合せ要求の結果が確定した実行コンテキストが格納される。
【００３９】
結果順序確定部分判定部１６０は、分類管理された実行コンテキストについて、問合せ結果のソート順序確定部分を判定し、ソート順序が確定したレコードを問合せ結果返送部１７０に通知する。
【００４０】
具体的には、結果候補リスト１５１の判定列未取得リスト１５３に分類される実行コンテキストが無い場合に、判定列取得済リスト１５４のうち、ソート順序が最先頭の実行コンテキストのソート指定列の値を参照する。そして、結果確定リスト１５２のうち、ソート指定列の値が参照された値よりも順序が先の実行コンテキストによって生成された問合せ結果は、ソート順序が確定していると判定する。問合せ結果のソート順序確定部分を判定する手順については、図３にて後述する。
【００４１】
問合せ実行部１４３は、問合せ要求の処理の過程で、オペレーティングシステム１３３にＩ／Ｏ要求を発行し、Ｉ／Ｏ結果をＤＢバッファ１４５に保持する。そして、問合せ要求の結果を問合せ結果保存部１４６に保存する。
【００４２】
問合せ結果返送部１７０は、問合せ結果保存部１４６に保存された問合せ要求の結果をアプリケーションプログラム１３１に返送する。
【００４３】
実行タスク管理部１４４は、問合せ実行プランを実行するために生成されたタスクを管理する。
【００４４】
ＤＢバッファ１４５は、データアクセスを高速化するために、キャッシュされたデータが格納される。
【００４５】
問合せ結果保存部１４６は、問合せ実行部１４３によって実行された問合せの結果を保存する。
【００４６】
図２は、本発明の第１の実施の形態の実行コンテキスト管理部１５０によって実行コンテキストを分類する手順を示すフローチャートである。本処理は、実行コンテキスト管理部１５０に含まれるプログラムを実行することによって実行される。
【００４７】
本処理は、前述のように、処理中又は処理が完了した実行コンテキストを分類する処理である。実行コンテキストの分類は、処理中又は処理が完了した実行コンテキストを、結果候補リスト１５１（判定列未取得リスト１５３、判定列取得済リスト１５４）又は結果確定リスト１５２に格納する（割り当てる）ことである。
【００４８】
また、結果候補リスト１５１及び結果確定リスト１５２で実行コンテキストを管理する場合、実行コンテキストに対応するデータ（中間結果）そのものを管理してもよく、データへの参照（ポインタ）を管理してもよい。なお、結果確定リスト１５２では、当該結果確定リスト１５２に分類される実行コンテキストによって生成され、問合せ結果保存部１４６に保存されている結果データへの参照を管理するようにしてもよい。
【００４９】
プロセッサ１１２は、まず、実行コンテキストを選択し、ソート指定列、すなわち、ソート順序を判定する対象の列（判定列）の値がデータベースの表１６１から取得済であるか否かを判定する（Ｓ２０１）。
【００５０】
プロセッサ１１２は、判定列の値が取得済でない場合には（Ｓ２０１の結果が「Ｎ」）、結果候補リスト１５１の判定列未取得リスト１５３に選択された実行コンテキストを分類する（Ｓ２０２）。
【００５１】
一方、プロセッサ１１２は、判定列の値が取得済である場合には（Ｓ２０１の結果が「Ｙ」）、選択された実行コンテキストの実行が完了しているか否かを判定する（Ｓ２０３）。
【００５２】
プロセッサ１１２は、選択された実行コンテキストの実行が完了していない場合には（Ｓ２０３の結果が「Ｎ」）、結果候補リスト１５１の判定列取得済リスト１５４に選択された実行コンテキストを分類する（Ｓ２０４）。一方、選択された実行コンテキストの実行が完了している場合には（Ｓ２０３の結果が「Ｙ」）、結果確定リスト１５２に選択された実行コンテキストを分類する（Ｓ２０５）。
【００５３】
以上のように、本発明の第１の実施の形態では、ソート指定列の値が取得されたか否か、さらに、実行コンテキストで取得されるデータをすべて取得したか否かによって、実行コンテキストを分類する。そして、すべての実行コンテキストについて、ソート指定列の値が取得されると、すなわち、すべての実行コンテキストが結果候補リスト１５１の判定列取得済リスト１５４又は結果確定リスト１５２に分類されると、結果確定リスト１５２に含まれる実行コンテキストに対応する問合せ結果のソート順が確定したか否かを判定する。問合せ結果のソート順が確定したか否かを判定する手順については、図３を参照しながら説明する。
【００５４】
図３は、本発明の第１の実施の形態の結果順序確定部分判定部１６０によって問合せ結果のソート順が確定したか否かを判定する手順を示すフローチャートである。
【００５５】
プロセッサ１１２は、まず、結果候補リスト１５１の判定列未取得リスト１５３が空か否かを判定する（Ｓ３０１）。すなわち、ソート指定列の値がすべて取得されたか否かを判定する。結果候補リスト１５１の判定列未取得リスト１５３が空でない場合には（Ｓ３０１の結果が「Ｎ」）、ソート対象の値がすべて取得されておらず、データの順序を確定することができないため、本処理を終了する。
【００５６】
プロセッサ１１２は、結果候補リスト１５１の判定列未取得リスト１５３が空の場合には（Ｓ３０１の結果が「Ｙ」）、対象となるソート指定列の値がすべて取得されているため、少なくとも結果確定リスト１５２に分類された実行コンテキストに対してソート処理を実行することが可能となる。このとき、結果候補リスト１５１の判定列取得済リスト１５４及び結果確定リスト１５２に分類された実行コンテキストに対応するソート指定列の値はソート済みとなっている。
【００５７】
そして、プロセッサ１１２は、結果候補リスト１５１の判定列取得済リスト１５４で最先頭順序の実行コンテキストのソート指定列の値（順序確定判定値）をＮとする（Ｓ３０２）。そして、結果確定リスト１５２の先頭の実行コンテキストのソート指定列の値（判定列値）が、Ｎよりも先行するか否かを判定する（Ｓ３０３）。Ｎよりも先行しない場合には（Ｓ３０３の結果が「Ｎ」）、ソート順が確定した実行コンテキストが結果確定リスト１５２に含まれていないため、本処理を終了する。
【００５８】
プロセッサ１１２は、結果確定リスト１５２の先頭の実行コンテキストの判定列値が、ソートした場合にＮよりも先行する場合には（Ｓ３０３の結果が「Ｙ」）、結果確定リスト１５２の先頭の実行コンテキストの結果を問合せ結果返送部１７０に通知し、結果確定リスト１５２から削除する（Ｓ３０４）。そして、新たに先頭になった実行コンテキストの判定列値がＮよりも先行するか否かを判定し（Ｓ３０３）、先頭の実行コンテキストの判定列値がＮよりも先行しなくなるまで（若しくは結果確定リスト１５２が空になるまで）、Ｓ３０３及びＳ３０４の処理を実行する。
【００５９】
以下、本発明の第１の実施の形態におけるソートされたデータを抽出する方法について図面を参照しながらに具体的に説明する。
【００６０】
以下に説明する具体例では、商品明細表（Ｔ１）、販売履歴データ表（Ｔ２）、顧客表（Ｔ３）の３つの表から指定された順序でデータを抽出する。データを抽出する問合せ要求は、一般的なＳＱＬによって表現される。
【００６１】
図４は、本発明の第１の実施の形態の問合せ要求に対応するＳＱＬの一例を示す図である。
【００６２】
図４に示す問合せ要求であるＳＱＬは、指定された条件を満たす商品明細表（Ｔ１）、販売履歴データ表（Ｔ２）、顧客表（Ｔ３）に格納されたデータを指定された順序で抽出する。
【００６３】
まず、ＳＱＬの詳細を説明する前に、図５を参照しながら商品明細表（Ｔ１）、販売履歴データ表（Ｔ２）、顧客表（Ｔ３）の構成について説明する。
【００６４】
図５は、本発明の第１の実施の形態の問合せ要求によって抽出されるデータを格納する表の一例を示す図である。
【００６５】
商品明細表（Ｔ１）、販売履歴データ表（Ｔ２）、顧客表（Ｔ３）の３つの表は、外部記憶装置１０３の記憶装置１２３に格納された表１６１に含まれる。
【００６６】
商品明細表（Ｔ１）は、「ｉｔｅｍＩＤ」列、「ｃａｔｅｇｏｒｙ」列、及び「ｐｒｉｃｅ」列を含む。
【００６７】
「ｉｔｅｍＩＤ」列の値は、商品を識別する識別子である。「ｃａｔｅｇｏｒｙ」列の値は、ｉｔｅｍＩＤによって識別される商品のカテゴリーを示す。具体的には、「ｃｏｆｆｅｅ（コーヒー）」、「ｔｅａ（お茶）」などの値が設定される。「ｐｒｉｃｅ」列の値は、ｉｔｅｍＩＤによって識別される商品の価格を示す。
【００６８】
販売履歴データ表（Ｔ２）は、「ｏｒｄｅｒＩＤ」列、「ｉｔｅｍＩＤ」列、「ｃｕｓｔＩＤ」列、及び「ｎｕｍ」列を含む。
【００６９】
「ｏｒｄｅｒＩＤ」列の値は、注文を識別する識別子である。「ｉｔｅｍＩＤ」列の値は、注文された商品を識別する識別子である。「ｃｕｓｔＩＤ」列の値は、注文を行った顧客を識別する識別子である。「ｎｕｍ」列の値は、商品を注文した数である。
【００７０】
顧客表（Ｔ３）は、「ｃｕｓｔＩＤ」列、「ｇｅｎｄｅｒ」列、及び「ａｇｅ」列を含む。
【００７１】
「ｃｕｓｔＩＤ」列の値は、顧客を識別する識別子である。「ｇｅｎｄｅｒ」列の値は、ｃｕｓｔＩＤによって識別される顧客の性別を示す情報である。「ａｇｅ」列の値は、ｃｕｓｔＩＤによって識別される顧客の年齢を示す情報である。
【００７２】
ここで、図４に示したＳＱＬの説明に戻る。図４に示したＳＱＬは、２０歳から２９歳までの女性で、コーヒーを注文したという条件を満たす、商品明細表（Ｔ１）、販売履歴データ表（Ｔ２）、顧客表（Ｔ３）の該当するレコード（データ）を抽出することを示している。
【００７３】
さらに詳しく説明すると、商品明細表（Ｔ１）の「ｃａｔｅｇｏｒｙ」列の値が「ｃｏｆｆｅｅ」であって、商品明細表（Ｔ１）の「ｉｔｅｍＩＤ」列と販売履歴データ表（Ｔ２）の「ｉｔｅｍＩＤ」列の値が同じ、かつ、販売履歴データ表（Ｔ２）の「ｃｕｓｔＩＤ」列と顧客表（Ｔ３）の「ｃｕｓｔＩＤ」列の値が同じ、すなわち、ｉｔｅｍＩＤで商品明細表（Ｔ１）及び販売履歴データ表（Ｔ２）を結合し、ｃｕｓｔＩＤで販売履歴データ表（Ｔ２）及び顧客表（Ｔ３）を結合する。そして、顧客表（Ｔ３）の「ｇｅｎｄｅｒ」列の値が「Ｆ」、かつ、顧客表（Ｔ３）の「ａｇｅ」列の値が２０から２９である条件を満たすデータ（レコード）を結合された３つの表（Ｔ１、Ｔ２、Ｔ３）から抽出し、商品明細表（Ｔ１）の「ｐｒｉｃｅ」列の値が降順となるように出力する。
【００７４】
図５に示した各表のレコード間を接続する矢印は、各レコードの結合状態を図示したものである。具体的に説明すると、「ｃａｔｅｇｏｒｙ」列の値が「ｃｏｆｆｅｅ」である商品明細表（Ｔ１）の「ｉｔｅｍＩＤ」列の値が“０００１”のレコードは、販売履歴データ表（Ｔ２）の「ｉｔｅｍＩＤ」列の値が“０００１”である２レコードに連結する。さらに、この２レコードの「ｃｕｓｔＩＤ」列の値はそれぞれ“０００１”“０００３”であり、それぞれ対応する顧客表（Ｔ３）のレコードに連結される。このとき、図４に示したＳＱＬでは、「女性」かつ「２０歳から２９歳」の条件が指定されているため、「ｃｕｓｔＩＤ」列の値が“０００３”のレコードは抽出されない。
【００７５】
続いて、図４に示したＳＱＬに基づいて生成された、表及び索引にアクセスする順序を示す問合せ実行プラン（処理順序）について説明する。
【００７６】
図６は、本発明の第１の実施の形態の問合せ要求に対応するＳＱＬに対応する問合せ実行プランの一例を示す図である。
【００７７】
本発明の第１の実施の形態では、商品明細表（Ｔ１）の「ｃａｔｅｇｏｒｙ」列、販売履歴データ表（Ｔ２）の「ｉｔｅｍＩＤ」列、及び、顧客表（Ｔ３）の「ｃｕｓｔＩＤ」列に索引が作成されている。これらの索引は、外部記憶装置１０３の記憶装置１２３に格納された索引１６２に含まれる。
【００７８】
図６に示す問合せ実行プランは、６つのオペレーション（ＯＰ１〜ＯＰ６）によって構成され、ＯＰ６でソートされた問合せ結果が出力される。実行コンテキストは、ＯＰ１からＯＰ６までの処理を含み、途中のオペレーションで複数のデータが抽出された場合には、抽出されたデータの数の実行コンテキストに分割される。分割後の実行コンテキストは、それぞれ並行して処理可能である。
【００７９】
また、問合せ実行部１４３は、前述のように、問合せ実行プラン生成部１４２によって生成された問合せ実行プランを構成する各オペレーションを実行するために、オペレーションごとにタスクを生成する。同じ実行コンテキストで生成されたタスクはオペレーションの実行順序に従って順次実行されるが、異なる実行コンテキストで生成されたタスクは並行して実行することが可能である。
【００８０】
図６に示す問合せ実行プランでは、まず、商品明細表（Ｔ１）の「ｃａｔｅｇｏｒｙ」列の索引を使用して「ｃａｔｅｇｏｒｙ」列の値が「ｃｏｆｆｅｅ」であるレコードを検索し、該当するレコードを表Ｔ１から取得する。
【００８１】
続いて、販売履歴データ表（Ｔ２）の「ｉｔｅｍＩＤ」列の索引を使用して「ｉｔｅｍＩＤ」列の値が商品明細表（Ｔ１）から取得したレコードの「ｉｔｅｍＩＤ」列の値と同じレコードを検索する。そして、該当するレコードを販売履歴データ表（Ｔ２）から取得し、商品明細表（Ｔ１）から取得したレコードと結合する。
【００８２】
続いて、顧客表（Ｔ３）の「ｃｕｓｔＩＤ」列の索引を使用して、「ｃｕｓｔＩＤ」の列の値が履歴データ表（Ｔ２）から取得したレコードの「ｃｕｓｔＩＤ」列の値と同じ行を検索し、該当するレコードを顧客表（Ｔ３）から取得する。さらに、取得したレコードの「ｇｅｎｄｅｒ（性別）」列の値が「Ｆ（女性）」であり、「ａｇｅ（年齢）」列の値が２０から２９という条件を満たすか否かを判定する。条件を満たす場合には、取得したＴ１及びＴ２のレコードを結合することによって生成されたレコードと、顧客表（Ｔ３）から取得した結合し、問合せ結果保存部１４６に保存する。
【００８３】
問合せ結果を返送する場合には、問合せ結果保存部１４６に保存されている結果であって、商品明細表（Ｔ１）の「ｐｒｉｃｅ」列の値が降順となるように結合されたレコードを、問合せ要求の送信元に返送する。
【００８４】
続いて、図６に示した問合せ実行プランにしたがって、データを取得し、問合せ結果を出力する過程について説明する。
【００８５】
図７は、本発明の第１の実施の形態におけるソートされたデータをデータベースから抽出し、問合せ結果として出力する過程の具体例を説明する図である。
【００８６】
図６に示した問合せ実行プランでは、図５に示した商品明細表（Ｔ１）の１レコード分のデータから、対応する販売履歴データ表（Ｔ２）及び顧客表（Ｔ３）のレコードを結合した問合せ結果を検索及び抽出する一連の処理が１つの実行コンテキストとなる。したがって、実行コンテキストが分割される前の段階で、「ｃａｔｅｇｏｒｙ」列の値が「ｃｏｆｆｅｅ」である行ごとに実行コンテキストが生成される。これらの実行コンテキストは並行して処理可能である。
【００８７】
図７のｐｈａｓｅ１は、問合せ処理の実行開始直後の状態を示している。具体的には、最初に実行された実行コンテキストにおいて、商品明細表（Ｔ１）の「ｃａｔｅｇｏｒｙ」列の索引検索処理部分が１つのタスクにより実行されている状態である。すなわち、図６の問合せ実行プランにおけるＯＰ１が終了した状態である。ｐｈａｓｅ１における実行コンテキストは、ソート指定列である商品明細表（Ｔ１）の「ｐｒｉｃｅ」の値を取得していないため、結果候補リスト１５１の判定列未取得リスト１５３に分類される（図２のＳ２０２）。
【００８８】
図７のｐｈａｓｅ２は、前述したｐｈａｓｅ１よりも処理が進行した状態を示している。具体的には、実行コンテキストは、「ｃａｔｅｇｏｒｙ」列の値が「ｃｏｆｆｅｅ」である１つめのレコードを商品明細表（Ｔ１）から取得し、対応する「ｐｒｉｃｅ」列の値が５００であることが判明する。この段階では、図６の問合せ実行プランにおけるＯＰ２が終了した状態となっている。
【００８９】
続いて、商品明細表（Ｔ１）の「ｉｔｅｍＩＤ」列の値（具体的には“０００１”）に基づいて、販売履歴データ表（Ｔ２）の「ｉｔｅｍＩＤ」列の索引検索を実行し（ＯＰ３）、販売履歴データ表（Ｔ２）から該当するレコードを取得する（ＯＰ４）。このとき、販売履歴データ表（Ｔ２）から２件のレコードが取得されているため、実行コンテキストが２つに分割されている。
【００９０】
ｐｈａｓｅ２では、ソート指定列の値が取得されたため、結果候補リスト１５１の判定列取得済リスト１５４に分類される（図２のＳ２０４）。また、商品明細表（Ｔ１）の「ｃａｔｅｇｏｒｙ」列の索引検索処理を並行して開始した別の実行コンテキストが、結果候補リスト１５１の判定列未取得リスト１５３に分類されている。ｐｈａｓｅ２が終了した段階では、図６の問合せ実行プランにおけるＯＰ４が終了した状態となっている。
【００９１】
ｐｈａｓｅ３は、ｐｈａｓｅ２よりもさらに処理が進行した状態を示している。具体的には、「ｐｒｉｃｅ」列の値が５００であった実行コンテキストは、さらに処理が進行して顧客表（Ｔ３）のレコードの取得及び条件判定まで終了している。このとき、図６の問合せ実行プランにおけるＯＰ６が終了した状態となっている。したがって、実行コンテキストは「結果確定リスト」に分類される（図２のＳ２０５）。
【００９２】
なお、ｐｈａｓｅ２で分割された他方の実行コンテキストは、検索条件を満たさなかったため、結果確定リスト１５２には分類されない。検索条件を満たさない実行コンテキストについては、検索条件を満たさないことが判明した時点で破棄され、いずれのリストにも分類されなくなる。
【００９３】
ｐｈａｓｅ４では、結果候補リスト１５１の判定列未取得リスト１５３に分類される実行コンテキストが無くなったため、結果確定リスト１５２からソート順序が確定した結果を判定する。すなわち、少なくとも検索条件を満たす可能性があるレコードのソート指定列に値がすべて取得されたことになる。したがって、結果候補リスト１５１の判定列取得済リスト１５４に分類された実行コンテキストのうち、ソート指定列である「ｐｒｉｃｅ」列の値が最も大きい実行コンテキストを取得し、当該「ｐｒｉｃｅ」列の値を順序確定判定値とする（図３のＳ３０２）。そして、「ｐｒｉｃｅ」列の値が順序確定判定値よりも大きい値の実行コンテキストが結果確定リスト１５２に分類されていれば、問合せ結果として要求元に返送することが可能となる。
【００９４】
具体的に説明すると、図７のｐｈａｓｅ４では、結果候補リスト１５１の判定列取得済リスト１５４に分類された実行コンテキストの「ｐｒｉｃｅ」列の値が２００であり、順序確定判定値は２００となる。そして、結果確定リスト１５２の実行コンテキストから、「ｐｒｉｃｅ」列の値が２００以上の実行コンテキスト（１０００、５００）を選択する。選択された実行コンテキストによって生成されたレコード（中間結果）は順序を確定することが可能であるため、選択された実行コンテキストによって生成されたレコードを「ｐｒｉｃｅ」列の値の順にソートする。そして、当該レコードを問合せ結果返送部１７０に通知し、問合せ要求に対するすべての検索処理が終了する前に、問合せ結果の返送を開始する。
【００９５】
なお、結果候補リスト１５１の判定列取得済リスト１５４又は結果確定リスト１５２に実行コンテキストを分類する場合には、受け付けられた問合せ要求で指定された順序となるように各リスト内であらかじめソートしておくとよい。
【００９６】
結果確定リスト１５２内でソート指定列の値でソートすると、先頭の実行コンテキストから順にソート指定列の値と順序確定判定値とを比較し、ソート指定列の値が順序確定判定値よりも先の順序にならなくなった時点で比較を中止し、結果確定リスト１５２内の比較済の実行コンテキストのレコード（中間結果）を問合せ結果返送部１７０に通知すればよい。また、比較時に問合せ結果返送部１７０に通知するようにしてもよい。
【００９７】
また、結果候補リスト１５１の判定列取得済リスト１５４内でソート指定列の値でソートすると、先頭の実行コンテキストのソート指定列の値を順序確定判定値とすることが可能となり、順序確定判定値を取得する処理を効率化することができる。
【００９８】
さらに、結果候補リスト１５１の判定列取得済リスト１５４から結果確定リスト１５２にコンテキストの分類先を変更する場合に、リストの先頭から順に比較することによって結果確定リスト１５２の格納位置を決定することが可能となる。
【００９９】
このとき、結果確定リスト１５２及び結果候補リスト１５１の判定列取得済リスト１５４に分類された実行コンテキストをソート指定列の値の順序で管理するデータ構造としては、単方向リストであってもよいし、双方向リストであってもよい。また、木構造であってもよい。
【０１００】
また、リスト内の実行コンテキストをソート指定列の値の順序で管理する場合、ソート処理は、リストに実行コンテキストが挿入されるたびに実行してもよく、所定数の実行コンテキストが分類されたタイミングで実行してもよく、その他任意のタイミングで実行してもよい。
【０１０１】
また、結果順序確定部分判定部１６０が順序確定判定を実行するタイミングは、結果候補リスト１５１の判定列未取得リスト１５３に分類された実行コンテキストがなくなった直後が最初のタイミングとなる。以降、ユーザから結果返送を要求されたタイミングで実行してもよく、問合せ結果保存部１４６に一定数以上のレコード（問合せ結果）が挿入されたタイミングであってもよい。
【０１０２】
また、本発明の第１の実施の形態では、ソート指定列の値の取得をできるだけ早くすべての実行コンテキストにおいて完了させれば、問合せ結果の返送開始時期を早めることができる。したがって、問合せ実行プランを生成する場合に、ソート指定列を含む表のアクセス順序が早くなるように設定することによって、問合せ結果の返送開始時期を早めることができる。
【０１０３】
なお、実行タスク管理部１４４は、複数の実行コンテキストの実行順序を管理することが可能だが、結果候補リスト１５１の判定列未取得リスト１５３に分類された実行コンテキストを最も優先的に実行し、続いて結果候補リスト１５１の判定列取得済リスト１５４に分類された実行コンテキストを優先的に実行することによって、問合せ処理開始から問合せ結果返送処理が開始されるまでの時間を、より短縮することが可能となる。
【０１０４】
本発明の第１の実施の形態によれば、すべての問合せ結果を取得する前にソートされた問合せ結果を順次返送することが可能となる。したがって、問合せ処理開始から問合せ結果返送処理が開始されるまでの時間を短縮することが可能となる。また、結果確定リスト１５２に分類された問合せ結果をソート指定列の値に基づいてあらかじめソートして格納しているため、全結果を抽出した後にデータをソートする処理を実行する必要がなくなる。
【０１０５】
また、本発明の第１の実施の形態によれば、索引を利用せずにソート指定列の値をソートすることができるため、索引が作成されていないソート指定列でソートする場合であっても迅速にソートされたデータを抽出することが可能となる。
【０１０６】
（第１の実施の形態の変形例）
以上説明した第１の実施の形態では、複数の実行コンテキストにおいて、データの読み出しを並行して実行することが可能な非順序型データベースに本発明を適用していたが、非順序型データベースでない一般的なデータベースに適用してもよい。以下、第１の実施の形態の変形例として説明する。
【０１０７】
非順序型データベースでない一般的なデータベースでは、図１に示したシステム構成において、データベース管理システム１３２に実行タスク管理部１４４が含まれていない点で相違し、その他の点で共通している。すなわち、１つのタスクで実行コンテキストが逐次的に実行されるため、同時に処理される実行コンテキストは１つとなる。
【０１０８】
したがって、処理が開始されていない実行コンテキストが、結果候補リスト１５１の判定列未取得リスト１５３に分類され、処理中の実行コンテキストが結果候補リスト１５１の判定列取得済リスト１５４に分類される。そして、処理が終了した実行コンテキストが結果確定リスト１５２に分類される。
【０１０９】
このとき、結果確定リスト１５２をソート指定列順に管理することによって、最後の実行コンテキストが結果候補リスト１５１の判定列取得済リスト１５４に分類された時点で、結果確定リスト１５２の順序確定部分を返送する。
【０１１０】
以上のように、本発明の第１の実施の形態の変形例によれば、問合せ処理の半ばで問合せ結果を返送することはできないが、結果確定リスト１５２に分類される実行コンテキストの結果をソート指定列の値に基づいてソートして管理することによって、結果抽出処理後のソート処理が不要になり、ソートされたデータを抽出する処理を高速化することができる。
【０１１１】
（第２の実施の形態）
次に、本発明の第２の実施の形態について説明する。第１の実施の形態では、非順序型データベースに本発明を適用していたが、第２の実施の形態では、複数の計算機で並列して問合せ要求が処理される並列データベースシステムに適用する。以下、第２の実施の形態が第１の実施の形態と相違する点について説明する。
【０１１２】
図８は、本発明の第２の実施の形態の計算機システムの構成を示すブロック図である。
【０１１３】
本発明の第２の実施の形態の計算機システムは、要求受付サーバ１０４、複数の実行サーバ１０６及び外部記憶装置１０３を含む。
【０１１４】
要求受付サーバ１０４及び複数の実行サーバ１０６は、ネットワーク１０５を介して互いに接続される。複数の実行サーバ１０６及び外部記憶装置１０３を含む。データベースサーバ１０１及び外部記憶装置１０３は、ネットワーク１０２を介して互いに接続される。
【０１１５】
要求受付サーバ１０４は、データベースサーバ１０１と同様に、メモリ１１１、プロセッサ１１２及びインターフェース１１３を含む。メモリ１１１には、データベース管理システム１３２が記憶される。インターフェース１１３は、ネットワーク１０５に接続される。
【０１１６】
実行サーバ１０６は、メモリ２０１、プロセッサ２０２、インターフェース２０３及びインターフェース２０４を含む。メモリ２０１には、外部記憶装置１０３からデータを取得するデータ処理部２１０が記憶される。インターフェース２０３は、ネットワーク１０５を介して要求受付サーバ１０４に接続される。インターフェース２０４は、ネットワーク１０２を介して外部記憶装置１０３に接続される。
【０１１７】
要求受付サーバ１０４は、問合せ要求を受け付け、実行サーバ１０６に実行コンテキストを割り当てる。すなわち、要求受付サーバ１０４は、第１の実施の形態におけるデータベースサーバ１０１と同様に、複数の実行コンテキストを生成する。このとき、外部記憶装置１０３には直接アクセスせずに、実行コンテキストを処理するために必要な情報を実行サーバ１０６に送信する。
【０１１８】
実行サーバ１０６は、要求受付サーバ１０４によって指示された実行コンテキストを、データ処理部２１０によって処理することによって問合せ結果を取得する。実行サーバ１０６は、一般的なデータベースサーバと同様に、同時に１つの実行コンテキストのみを処理することができる。
【０１１９】
要求受付サーバ１０４は、第１の実施の形態のデータベースサーバと同様に結果候補リスト１５１及び結果確定リスト１５２を保持する。要求受付サーバ１０４は、問合せ実行プラン生成後、実行コンテキストを処理する実行サーバ１０６を選択する。そして、選択された実行コンテキストを選択された実行サーバ１０６に割り当てると、処理の開始を指示する。このとき、要求受付サーバ１０４は、割り当てた実行コンテキストを、結果候補リスト１５１の判定列未取得リスト１５３に分類する。
【０１２０】
実行サーバ１０６は、割り当てられた実行コンテキストを処理し、ソート指定列の値を取得すると、中間結果を要求受付サーバ１０４に送信する。要求受付サーバ１０４は、ソート指定列の値を取得した中間結果を受信すると、対応する実行コンテキストを結果候補リスト１５１の判定列取得済リスト１５４に分類する。
【０１２１】
その後、実行サーバ１０６は、実行コンテキストの処理を継続し、すべてのオペレーションの実行が完了すると、処理結果を要求受付サーバ１０４に送信する。要求受付サーバ１０４は、受信した処理結果に対応する実行コンテキストを結果確定リスト１５２に分類する。
【０１２２】
なお、実行サーバ１０６が実行コンテキストを処理している間に、実行コンテキストが複数に分割された場合には、実行サーバ１０６で順次処理するようにしてもよいし、１つの実行コンテキストを除いて要求受付サーバ１０４に送信し、要求受付サーバ１０４が別の実行サーバ１０６に割り当てするようにしてもよい。
【０１２３】
以上のように、本発明の第２の実施の形態によれば、既存の並列データベースシステムに本発明を適用することができる。したがって、各実行サーバ１０６にデータの読み出しを実行させ、要求受け付けサーバで結果候補リスト１５１及び結果確定リスト１５２を管理することによって、すべての問合せ結果を取得する前にソートされた問合せ結果を順次返送することが可能となり、ソートされたデータを抽出する処理を高速化することができる。
【０１２４】
特許請求の範囲に記載した以外の本発明の観点の代表的なものとして、次のものがあげられる。
【０１２５】
（１）  データが格納されたデータベースを管理するデータベース管理システムが実行される計算機において、要求されたデータを出力するデータベース処理方法であって、
前記計算機は、前記データベース管理システムを実行するプロセッサと、前記データベース管理システムを記憶するメモリとを備え、
前記方法は、
前記要求されたデータを指定された順序で問合せ結果を出力するように指定された問合せ要求を受け付ける第１ステップと、
前記受け付けた問合せ要求に基づいて、前記データを格納する表にアクセスする順序を含む問合せ実行プランを生成する第２ステップと、
前記生成された問合せ実行プランに基づいて、前記問合せ要求に基づいて要求されたデータを前記データベースから取得する第３ステップと、
前記取得されたデータを含む中間結果を生成する第４ステップと、
前記生成された中間結果を、前記問合せ要求で指定された順序に並び替える第５ステップと、
前記並び替えられた中間結果の順序が確定したか否かを前記中間結果ごとに判定する第６ステップと、
前記順序が確定した中間結果を、前記問合せ結果として先頭から順に出力する第７ステップと、を含むデータベース処理方法。
【０１２６】
（２）  （１）に記載のデータベース処理方法であって、
前記問合せ結果は、データに対応する１以上の列によって構成されるレコード単位で処理され、
前記第３ステップは、前記列ごとにデータを取得し、
前記第４ステップは、前記レコード単位で前記中間結果を生成し、
前記第６ステップは、前記レコードを構成する列に対応するデータがすべて取得されていない場合には順序が確定していないと判定するデータベース処理方法。
【０１２７】
（３）  データを格納するストレージ装置と、前記ストレージ装置に格納されたデータを管理し、要求されたデータを出力するデータベース管理システムが実行される計算機と、を含むデータベース処理システムであって、
前記計算機は、
前記要求されたデータを指定された順序で問合せ結果を出力するように指定された問合せ要求を受け付ける問合せ要求受付部と、
前記受け付けた問合せ要求に基づいて、前記データを格納する表にアクセスする順序を含む問合せ実行プランを生成する問合せ実行プラン生成部と、
前記生成された問合せ実行プランに基づいて、前記問合せ要求によって要求されたデータを前記ストレージ装置から取得し、前記取得されたデータを格納する１以上の列によって構成されるレコードごとに処理して、前記問合せ要求に対する問合せ結果を出力する問合せ実行部とを備え、
前記問合せ実行部は、
前記列ごとにデータを取得し、
前記取得されたデータを含む中間結果を前記レコードごとに生成し、
前記生成された中間結果を、前記問合せ要求で指定された順序に並び替え、
前記並び替えられた中間結果の順序が確定したか否かを前記中間結果ごとに判定し、
前記順序が確定した中間結果を、前記問合せ結果として先頭から順に出力するデータベース処理システム。
（４）  ストレージ装置に格納されたデータを管理するデータベース管理システムが実行され、要求されたデータを出力するデータベースサーバあって、
前記データベース管理システムを実行するプロセッサと、前記データベース管理システムを記憶するメモリとを備え、
前記プロセッサは、
前記要求されたデータを指定された順序で問合せ結果を出力するように指定された問合せ要求を受け付け、
前記受け付けた問合せ要求に基づいて、前記データを格納する表にアクセスする順序を含む問合せ実行プランを生成し、
前記生成された問合せ実行プランに基づいて、前記問合せ要求によって要求されたデータを前記ストレージ装置から取得し、
前記取得されたデータを含む中間結果を生成し、
前記生成された中間結果を、前記問合せ要求で指定された順序に並び替え、
前記並び替えられた中間結果の順序が確定したか否かを前記中間結果ごとに判定し、
前記順序が確定した中間結果を、前記問合せ結果として先頭から順に出力するデータベースサーバ。
【符号の説明】
【０１２８】
１０１  データベースサーバ
１０２  ネットワーク
１０３  外部記憶装置
１０４  要求受付サーバ
１０５  ネットワーク
１０６  実行サーバ
１１１  メモリ
１１２  プロセッサ
１１３  インターフェース
１２１  インターフェース
１２２  制御装置
１２３  記憶装置
１３１  アプリケーションプログラム（ＡＰ）
１３２  データベース管理システム
１３３  オペレーティングシステム（ＯＳ）
１４１  問合せ受付部
１４２  問合せ実行プラン生成部
１４３  問合せ実行部
１４４  実行タスク管理部
１４５  ＤＢバッファ
１４６  問合せ結果保存部
１５０  実行コンテキスト管理部
１５１  結果候補リスト
１５２  結果確定リスト
１５３  判定列未取得リスト
１５４  判定列取得済リスト
１６０  結果順序確定部分判定部
１６１  表
１６２  索引
１７０  問合せ結果返送部
２０１  メモリ
２０２  プロセッサ
２０３  インターフェース
２０４  インターフェース
２１０  データ処理部
【図１】
0005458330.tif 000002
【図２】
0005458330.tif 000003
【図３】
0005458330.tif 000004
【図４】
0005458330.tif 000005
【図５】
0005458330.tif 000006
【図６】
0005458330.tif 000007
【図７】
0005458330.tif 000008
【図８】
0005458330.tif 000009