(57)【要約】【課題】  データベースへの問合せの平均負荷を下げ、メモリ使用量を大幅に減少させることができ、一度にフラッシュする更新要求の数を増加させてバッチ更新の効果を向上させることができる装置および方法を提供する。【解決手段】  この装置は、データベースの更新要求を蓄積する蓄積部３２と、蓄積された更新要求をバッチ処理してデータベースを更新する更新部３３と、データベースへ問合せ、問合せ結果を出力する処理部３４とを備える。この装置はさらに、問合せの入力に応答して、蓄積部３２から更新要求を取得し、問合せの内容に基づき問合せ結果に影響を与える更新要求を抽出する抽出部３５と、抽出部３５により抽出された更新要求を用いて問合せの内容を変更し、その内容を変更した問合せを処理部３４へ入力する内容変更部３６とを備える。【選択図】  図４
2010079627.tif 000002
【特許請求の範囲】
【請求項１】
データベースに対する問合せを処理する装置であって、
データベースの更新要求を蓄積する蓄積部と、
蓄積された前記更新要求をバッチ処理して前記データベースを更新する更新部と、
前記データベースへ問合せ、問合せ結果を出力する処理部と、
問合せの入力に応答して、前記蓄積部から蓄積された更新要求を取得し、前記問合せの内容に基づき、問合せ結果に影響を与える前記更新要求を抽出する抽出部と、
前記更新部が前記蓄積部に蓄積された更新要求により前記データベースの更新を行うことなく、前記蓄積された更新要求を反映した問合せ結果が得られるように、前記抽出部により抽出された前記更新要求を用いて前記問合せの内容を変更し、前記内容を変更した問合せを前記処理部へ入力する内容変更部と
を備える、処理装置。
【請求項２】
前記更新要求は、更新文を含み、前記問合せは、問合せ文を含み、前記抽出部は、前記問合せ文を取り出し、前記問合せ文に影響を与える更新要求を、前記更新文に基づき抽出する、請求項１に記載の処理装置。
【請求項３】
前記更新文は、更新データと条件式とを含み、前記内容変更部は、前記条件式を、再帰的アルゴリズムを適用して第２条件式へと変換し、前記第２条件式に適合するデータの集合から、後続の更新要求により更新されるデータの集合を取り除くように、前記第２条件式と前記後続の更新要求につき変換された第２条件式とを演算子により結合して第３条件式を生成し、各更新要求につき生成された前記第３条件式を演算子により結合して、変形した条件式を含む問合せ文を生成する、請求項２に記載の処理装置。
【請求項４】
前記内容変更部は、前記第２条件式と前記後続の更新要求につき変換された第２条件式の否定とを論理積により結合して前記第３条件式を生成する、請求項３に記載の処理装置。
【請求項５】
前記内容変更部は、前記問合せ文に基づき、前記各更新要求につき生成された第３条件式を論理和で結合するか、前記第３条件式の否定を論理積で結合するかを判定し、前記問合せ文に含まれる条件式と抽出された前記更新要求すべての第３条件式または第３条件式の否定とを論理和または論理積により結合して、前記変形した条件式を含む問合せ文を生成する、請求項３に記載の処理装置。
【請求項６】
前記問合せ文に含まれる条件式は、複数の部分条件式から構成され、前記抽出部は、各前記部分条件式に影響を与える更新要求を抽出し、前記内容変更部は、前記各部分条件式につき、変形した部分条件式を生成し、変形した各部分条件式を演算子により結合して、前記変形した条件式を含む問合せ文を生成する、請求項３に記載の処理装置。
【請求項７】
前記問合せおよび前記更新要求を出力する要求出力部と、前記要求出力部が出力した要求が前記問合せか、前記更新要求かを判別する判別部とをさらに備える、請求項１に記載の処理装置。
【請求項８】
過去の問合せ結果のうち、最近の問合せに対する結果と頻繁に行われる問合せに対する結果とを保持する結果保持部をさらに備える、請求項１に記載の処理装置。
【請求項９】
要求され得る更新要求が既知である場合、前記内容変更部は、前記蓄積部に蓄積された問合せ結果に影響を与える更新要求に加えて既知の前記更新要求も用いて前記問合せの内容を変更する、請求項８に記載の処理装置。
【請求項１０】
データベースの更新要求を蓄積する蓄積部と、蓄積された前記更新要求をバッチ処理して前記データベースを更新する更新部と、前記データベースへ問合せ、問合せ結果を出力する処理部とを備える装置により、データベースに対する問合せを処理する方法であって、
問合せの入力に応答して、前記蓄積部から蓄積された更新要求を取得し、前記問合せの内容に基づき、問合せ結果に影響を与える前記更新要求を抽出するステップと、
前記更新部が前記蓄積部に蓄積された更新要求により前記データベースの更新を行うことなく、前記蓄積された更新要求を反映した問合せ結果が得られるように、抽出された前記更新要求を用いて前記問合せの内容を変更し、前記内容を変更した問合せを前記処理部へ入力するステップとを含む、処理方法。
【請求項１１】
前記更新要求は、更新文を含み、前記問合せは、問合せ文を含み、前記抽出するステップでは、前記問合せ文を取り出し、前記問合せ文に影響を与える更新要求を、前記更新文に基づき抽出する、請求項１０に記載の処理方法。
【請求項１２】
前記更新文は、更新データと条件式とを含み、前記入力するステップでは、前記条件式を、再帰的アルゴリズムを適用して第２条件式へと変換し、前記第２条件式に適合するデータの集合から、後続の更新要求により更新されるデータの集合を取り除くように、前記第２条件式と前記後続の更新要求につき変換された第２条件式とを演算子により結合して第３条件式を生成し、各更新要求につき生成された前記第３条件式を演算子により結合して、変形した条件式を含む問合せ文を生成する、請求項１１に記載の処理方法。
【請求項１３】
前記入力するステップでは、前記第２条件式と前記後続の更新要求につき変換された第２条件式の否定とを論理積により結合して前記第３条件式を生成する、請求項１２に記載の処理方法。
【請求項１４】
前記入力するステップでは、前記問合せ文に基づき、前記各更新要求につき生成された第３条件式を論理和で結合するか、前記第３条件式の否定を論理積で結合するかを判定し、前記問合せ文に含まれる条件式と抽出された前記更新要求すべての第３条件式または第３条件式の否定とを論理和または論理積により結合して、前記変形した条件式を含む問合せ文を生成する、請求項１２に記載の処理方法。
【請求項１５】
前記問合せ文に含まれる条件式は、複数の部分条件式から構成され、前記抽出するステップでは、各前記部分条件式に影響を与える更新要求を抽出し、前記入力するステップでは、前記各部分条件式につき、変形した部分条件式を生成し、変形した各部分条件式を演算子により結合して、前記変形した条件式を含む問合せ文を生成する、請求項１２に記載の処理方法。
【請求項１６】
前記装置が備える要求出力部により、前記問合せおよび前記更新要求を出力するステップと、前記装置が備える判別部により、前記要求出力部が出力した要求が前記問合せか、前記更新要求かを判別するステップとをさらに含む、請求項１０に記載の処理方法。
【請求項１７】
要求され得る更新要求が既知である場合、前記入力するステップでは、前記蓄積部に蓄積された問合せ結果に影響を与える更新要求に加えて既知の前記更新要求も用いて前記問合せの内容を変更する、請求項１０に記載の処理方法。
【請求項１８】
請求項１０〜１７のいずれか１項に記載の処理方法をコンピュータに実行させるためのプログラム。
【請求項１９】
請求項１８に記載のプログラムが記録された記録媒体。
【請求項２０】
データベースに対する問合せを処理する装置であって、
データベースの更新要求を蓄積する蓄積部と、
蓄積された前記更新要求をバッチ処理して前記データベースを更新する更新部と、
前記データベースへ問合せ、問合せ結果を出力する処理部と、
問合せの入力に応答して、前記蓄積部から蓄積された更新要求を取得し、前記問合せの内容に基づき、問合せ結果に影響を与える前記更新要求を抽出する抽出部と、
前記更新部が前記蓄積部に蓄積された更新要求により前記データベースの更新を行うことなく、前記蓄積された更新要求を反映した問合せ結果が得られるように、前記抽出部により抽出された前記更新要求を用いて前記問合せの内容を変更し、前記内容を変更した問合せを前記処理部へ入力する内容変更部とを備え
前記更新要求は、更新文を含み、前記問合せは、問合せ文を含み、前記抽出部は、前記問合せ文を取り出し、前記問合せ文に影響を与える更新要求を、前記更新文に基づき抽出し、
前記更新文は、更新データと条件式とを含み、前記内容変更部は、前記条件式を、再帰的アルゴリズムを適用して第２条件式へと変換し、前記第２条件式に適合するデータの集合から、後続の更新要求により更新されるデータの集合を取り除くように、前記第２条件式と前記後続の更新要求につき変換された第２条件式とを演算子により結合して第３条件式を生成し、各更新要求につき生成された前記第３条件式を演算子により結合して、変形した条件式を含む問合せ文を生成し、
前記内容変更部は、前記第２条件式と前記後続の更新要求につき変換された第２条件式の否定とを論理積により結合して前記第３条件式を生成し、
前記内容変更部は、前記問合せ文に基づき、前記各更新要求につき生成された第３条件式を論理和で結合するか、前記第３条件式の否定を論理積で結合するかを判定し、前記問合せ文に含まれる条件式と抽出された前記更新要求すべての第３条件式または第３条件式の否定とを論理和または論理積により結合して、前記変形した条件式を含む問合せ文を生成し、
前記問合せ文に含まれる条件式は、複数の部分条件式から構成され、前記抽出部は、各前記部分条件式に影響を与える更新要求を抽出し、前記内容変更部は、前記各部分条件式につき、変形した部分条件式を生成し、変形した各部分条件式を演算子により結合して、前記変形した条件式を含む問合せ文を生成し、
前記問合せおよび前記更新要求を出力する要求出力部と、
前記要求出力部が出力した要求が前記問合せか、前記更新要求かを判別する判別部と、
過去の問合せ結果のうち、最近の問合せに対する結果と頻繁に行われる問合せに対する結果とを保持する結果保持部とをさらに備え、
要求され得る更新要求が既知である場合、前記内容変更部は、前記蓄積部に蓄積された問合せ結果に影響を与える更新要求に加えて既知の前記更新要求も用いて前記問合せの内容を変更する、処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースに対する問合せを、データベースのバッチ更新を行うことなく処理し、問合せ結果を返すことができる装置、その処理方法、その方法をコンピュータに実行させるためのプログラムおよびそのプログラムが記録された記録媒体に関する。
【背景技術】
【０００２】
データベースは、複数のユーザのためにデータを要求に応じて受け入れ、保管し、要求に応じて提供するための所定の構造をもつデータの集合である。データベースには、複数の関係（リレーション）を基本的なデータ型とし、格納されたデータを取得するための問合せが、等号（＝）や不等号（＜、＞）等の関係演算子や、論理積（∧）や論理和（∨）や否定（¬）等の論理演算子を用いて行われるリレーショナル・データベースがある。
【０００３】
リレーショナル・データベースでは、あらゆるデータがｎ項の関係で表現されることから、その関係を視覚的表現としてテーブルで表現することができる。その一例を、図１（ａ）に示す。図１（ａ）では、各従業員に対し、従業員番号（EMPNO）が割り当てられ、各従業員の名前（NAME）と、所属する部門（WORKDEPT）と、性別（SEX）と、年齢（AGE）と、給与（SALARY）とが関連付けられている。また、このテーブルには、テーブル名として「EMPLOYEE」が付けられている。
【０００４】
このデータベースに対し、データの追加、削除、内容の変更を行うと、データベースの更新が必要となる。しかしながら、データ毎にデータベースを更新していたのでは、非効率的である。
【０００５】
データベースにおける更新の性能向上には、更新のバッチ処理（バッチ更新）が効果的である。ここで、バッチ更新とは、個々の更新要求を逐次データベースへ送って処理するかわりに、アプリケーション・サーバ側に存在するテーブル毎に設けられたキューに更新要求を蓄積しておき、ある程度蓄積されたところでまとめてデータベースへ送る処理（フラッシュ処理）技術である。アプリケーション・サーバは、アプリケーションを実行するネットワーク上のサーバ・コンピュータであってもよいし、アプリケーションの実行を管理補助するミドルウェアとしてコンピュータに実装されていてもよい。このように、更新要求をまとめて処理することにより、通信やI/Oにかかるコストが減り、一更新あたりの実行時間を大幅に短縮することができる。
【０００６】
しかしながら、このバッチ更新をシステムに適用すると、更新がデータベースに反映されるのはフラッシュ処理後となるため、アプリケーション・サーバ側に未処理の更新要求が蓄積された状態でデータベースに問合せを行うと、それらの更新が反映される前の古い結果が返されるという問題が生じる。
【０００７】
それを回避し、正しい結果を得るためには、データベースへ問合せを行うたびに、その問合せ前にフラッシュ処理を行い、データベースを最新状態にしてから問合せを行わなければならない。このため、従来のシステムでは、一度にフラッシュ処理する更新要求の数（バッチのサイズ）を大きく増やすことはできず、ある程度蓄積されたところでフラッシュ処理を行っていた。バッチ更新の効果は、バッチのサイズにほぼ比例することから、バッチのサイズを大きく増やすことは重要な課題となっている。
【０００８】
ここで、データベースに対する問合せを、データベースに依存せずに行う技術が提案されている。その１つに、マテリアライズド・ビュー（Materialized View）を用いるものがある（非特許文献１参照）。マテリアライズド・ビューは、複雑な検索処理のパフォーマンス向上のために用いられるビューで、インデックスではなく、実データを保持するビューである。ビューとは、定義したselect文の処理結果集合を実テーブルのように扱うための機能をいい、selectとは、データの取得（照会ともいう。）をするためのSQL命令である。SQLは、リレーショナル・データベースの操作を行なうための言語の一つである。
【０００９】
このマテリアライズド・ビューの一例を、図１（ｂ）に示す。図１（ｂ）に示される式１では、select文が、テーブル名「EMPLOYEE」のテーブルから、条件式「SALARY≧40000で、かつSEX=F」を満たすカラム名「EMPNO」、「NAME」のデータを取得する命令とされていることから、これらを取得した結果がマテリアライズド・ビューとして保持される。
【００１０】
このマテリアライズド・ビューは、実データを保持するため、データベースを管理するデータベース管理システムへの問合せが不要で、１組のデータ・セット（レコード）を一意に識別するための情報として利用される主キーやインデックスを使用した検索や抽出が可能である。
【００１１】
マテリアライズド・ビューを拡張したものに、セルフメンテナブル・ビュー（Self-Maintainable View）というものがある（非特許文献２参照）。データベースでの問合せの結果に対し、アプリケーション・サーバ側で更新要求を適用するには、適用する更新要求の全てについて結果が、セルフメンテナブル（自己保持可能）、すなわち付加的にデータをもつように問合せを変形する必要がある。セルフメンテナブル・ビューは、マテリアライズド・ビューを定義する問合せを、アプリケーションが要求しうるすべての更新についてセルフメンテナブルになるように変形したものである。具体的には、更新の条件には含まれるが、問合せの結果には含まれない桁や、更新が変更する桁に対する条件により対象外となった行も結果に含めるように変形するものである（非特許文献３参照）。
【００１２】
非特許文献３では、対照となるテーブルに対してアプリケーションが要求するSQL文が全て分かっているという前提で、問合せ結果をセルフメンテナブルにするために必要な付加情報（上記でいう桁や行）を静的に算出している。
【００１３】
このセルフメンテナブル・ビューの一例を、図１（ｃ）に示す。図１（ｃ）の式２では、カラム名「WORKDEPT」がまだ不明である部門に所属する従業員に対し、「SALARY」が変更されることが予定されていることを示している。このため、すべての女性従業員は、将来的に給与が変更される可能性がある。
【００１４】
そこで、図１（ｂ）の式１で示したSELECT文を式１’のように変形し、変形したSELECT文を用いて問合せした結果をセルフメンテナブル・ビューとして保持する。
【非特許文献１】Ashish Gupta, Inderpal Singh Mumick, “Maintenance of MaterializedViews: Problems, Techniques, and Applications”, IEEEData Engineering Bulletin, Vol. 18, No. 2, p. 3-18, 1995
【非特許文献２】Millist W. Vincent, Mukesh Mohania, Yahiko Kambayashi, “Aself-Maintainable View Maintenance Technique for Data Warehouses”, 8thInternational Conference on Management of Data, p. 7-22, 1997
【非特許文献３】Dallan Quass, Ashish Gupta, Inderpal Singh Mumick, Jennifer Widom, “MakingViews Self-Maintainable for Data Warehousing”, 4thInternational Conference on Parallel and Distributed Information Systems (PDIS'96), p. 158-169, 1996
【発明の開示】
【発明が解決しようとする課題】
【００１５】
従来のセルフメンテナブル・ビューは、実際に更新されないデータも持つことから、ビューを保持するための大量のメモリがアプリケーション・サーバ側に必要になるという問題があった。
【００１６】
また、問合せ結果がセルフメンテナブルになるように問合せを変形すると、その問合せ結果は、図１（ｃ）に示すように桁、行ともに増える方向にしか変化せず、ただでさえ大きなビューをさらに拡大する結果となり、メモリを圧迫してしまうという問題があった。
【００１７】
そこで、データベースでの問合せの平均負荷を下げ、メモリ使用量を大幅に減少させることができ、一度にフラッシュする更新要求の数を増加させてバッチ更新の効果を向上させることができるシステムおよび方法の提供が望まれていた。
【課題を解決するための手段】
【００１８】
本発明は、問合せが要求された時点において、アプリケーションが要求しうるすべての更新についてではなく、アプリケーション・サーバ側に蓄積されている更新要求の全てについて結果がセルフメンテナブルになるように問合せを変形することにより、アプリケーション・サーバ側に出来るだけ多くの更新要求を蓄積することができ、また、ビューを保持する必要がなくなるため、メモリの使用量を大幅に減少させることができることを見出すことによりなされたものである。アプリケーション・サーバ側で更新要求を蓄積することができることは、一度にフラッシュする更新要求の数を増加させ、バッチ更新の効果の向上をもたらすことができる。
【００１９】
すなわち、上記課題は、本発明のデータベースに対する問合せを処理する装置およびその処理方法を提供することにより解決することができる。
【００２０】
本発明の処理装置は、データベースの更新要求を蓄積する蓄積部と、蓄積された更新要求をバッチ処理してデータベースを更新する更新部と、データベースへ問合せ、問合せ結果を出力する処理部と、問合せの受信に応答して、蓄積部から蓄積された更新要求を取得し、問合せの内容に基づき問合せ結果に影響を与える更新要求を抽出する抽出部と、更新部が蓄積部に蓄積された更新要求によりデータベースの更新を行うことなく、蓄積された更新要求を反映した問合せ結果が得られるように、抽出部により抽出された更新要求を用いて問合せの内容を変更し、内容を変更した問合せを処理部へ入力する内容変更部とを備える。
【００２１】
更新要求は、更新文を含み、問合せは、問合せ文を含む。抽出部は、問合せ文を取り出し、その問合せ文に影響を与える更新要求を、更新文に基づき抽出する。
【００２２】
更新文は、更新データと条件式とを含み、内容変更部は、当該条件式を、再帰的アルゴリズムを適用して再帰的な第２条件式へと変換する。そして、内容変更部は、第２条件式に適合するデータの集合から、後続の更新要求により更新されるデータの集合を取り除くように、当該第２条件式と後続の更新要求につき変換された第２条件式とを演算子により結合して第３条件式を生成する。具体的には、内容変更部は、当該第２条件式と後続の更新要求につき変換された第２条件式の否定とを論理積により結合して第３条件式を生成する。
【００２３】
内容変更部は、問合せ文に基づき、各更新要求につき生成された第３条件式を論理和で結合するか、当該第３条件式の否定を論理積で結合するかを判定し、問合せ文に含まれる条件式と抽出された更新要求すべての第３条件式または第３条件式の否定とを論理和または論理積により結合して、変形した条件式を含む問合せ文を生成する。
【００２４】
問合せ文に含まれる条件式は、複数の部分条件式から構成され、抽出部は、各部分条件式に影響を与える更新要求を抽出し、内容変更部は、各部分条件式につき、変形した部分条件式を生成し、変形した各部分条件式を演算子により結合して、変形した条件式を含む問合せ文を生成する。
【００２５】
本発明の処理装置は、問合せおよび更新要求を出力する要求出力部と、要求出力部が出力した要求が問合せか、更新要求かを判別する判別部とを備える。なお、処理部は、問合せ結果を、問合せを出力した要求出力部へ返す。
【００２６】
また、処理装置は、過去の問合せ結果のうち、最近の問合せに対する結果と頻繁に行われる問合せに対する結果とを保持する結果保持部をさらに備える。これにより、最近の問合せや頻繁に行われる問合せに対しては、結果保持部がその結果を保持していることから、応答時間を向上させることができる。
【００２７】
本発明では、同じ問合せであっても、その間に更新要求が出力されると、異なる問合せに変形される。これでは、メモリの使用効率の観点から望ましくない。これを解決するため、要求され得る更新要求のいくつかが既知である場合、内容変更部は、蓄積部に蓄積された問合せ結果に影響を与える更新要求に加えて、その既知の更新要求も用いて問合せの内容を変更する。
【００２８】
本発明では、上記処理装置に加え、その処理装置により実現される処理方法、その処理方法をコンピュータに実行させるためのプログラムおよびそのプログラムが記録された記録媒体を提供することが可能である。
【００２９】
本発明の処理装置および処理方法を提供することにより、アプリケーション・サーバ側に出来るだけ多くの更新要求を蓄積して、データベースの更新頻度を下げることができ、その結果、データベースでの問合せの平均負荷を下げることができる。また、本発明では、ビューを保持しなくてもよいため、メモリの使用量を大幅に減少させることができる。さらに、本発明では、一度にフラッシュする更新要求の数を増加することができるため、バッチ更新の効果を向上させることができる。
【発明を実施するための最良の形態】
【００３０】
以下、本発明を図面に示した具体的な実施の形態に沿って説明するが、本発明は、後述する実施の形態に限定されるものではない。
【００３１】
図２は、アプリケーション・サーバとデータベースとから構成されるシステム構成を示した図である。図２に示すシステムは、本発明のデータベースに対する問合せを処理する装置の一実施形態であるアプリケーション・サーバ１０が直接、データベース２０に接続され、アプリケーション・サーバ１０は、「外部」で表されるネットワークあるいはクライアント装置等と通信可能に接続されている。ここでは、アプリケーション・サーバ１０が、サーバ・コンピュータとして例示されているが、アプリケーションの実行を管理補助するミドルウェアとして構成し、サーバ・コンピュータやユーザが使用するPC等に実装することもできる。
【００３２】
アプリケーション・サーバ１０は、データベース２０への問合せおよび更新要求を処理し、その処理結果を出力する。ここでは、アプリケーション・サーバ１０は、外部からの要求を受け取り、アプリケーションにより問合せあるいは更新要求を生成して出力し、これらを実行する機構において、これらを実行する。更新要求の場合は、キューに入れ、ある数の更新要求が蓄積された段階で更新をバッチ処理にて実行する。問合せの場合は、問合せに含まれる問合せ文を変形し、その変形した問合せ文を用いて、蓄積されている更新要求を反映した結果を得る。
【００３３】
データベース２０は、項目毎にデータを集めて管理し、アプリケーション・サーバ１０からの問合せに応じて、データの検索、抽出、追加、削除等を可能にしている。
【００３４】
データベース２０は、オペレーティング・システム（OS）が提供するファイル・システム上に直接構築されたものでも、データベース管理システム（DBMS）を用いて構築されたものであってもよい。データベース２０としては、複数の関係（リレーション）を基本的なデータ型とし、格納されたデータを取得するための問合せが、等号（＝）や不等号（＜、＞）等の関係演算子や、論理積（∧）や論理和（∨）や否定（¬）等の論理演算子を用いて行われるリレーショナル・データベースを用いることができる。
【００３５】
図３は、アプリケーション・サーバ１０のハードウェア構成の一例を示した図である。ハードウェア構成は、これに限られるものではないが、メモリ１１と、少なくとも１つのプロセッサ１２と、メモリ制御部１３と、チャネル・サブシステム１４と、少なくとも１つの制御装置１５と、少なくとも１つの入出力デバイス１６とを備える。
【００３６】
メモリ１１は、入出力デバイス１６から入力されたデータやプログラムを格納し、プロセッサ１２およびチャネル・サブシステム１４からのアドレス指定に応答して、そのアドレスに格納しているデータ等をプロセッサ１２およびチャネル・サブシステム１４へ送る。
【００３７】
プロセッサ１２は、装置全体を制御し、少なくとも１つのOSを実行する。OSは、装置におけるプログラムの実行や入出力処理を制御するものである。メモリ制御部１３は、バスを経由してメモリ１１、プロセッサ１２、チャネル・サブシステム１４のそれぞれに接続される。このメモリ制御部１３は、プロセッサ１２やチャネル・サブシステム１４が出したリクエストを一時的にキューに格納し、所定のタイミングでメモリ１１へ送ることができる。
【００３８】
チャネル・サブシステム１４は、各制御装置１５へ接続され、プロセッサ１２の処理負荷を軽減するために、入出力デバイス１６とメモリ１１との間のデータ転送を制御する。これにより、プロセッサ１２による演算処理と、入出力デバイス１６による入出力処理とを並列に実行させることができ、処理効率を向上させることができる。
【００３９】
制御装置１５は、入出力デバイス１６のデータ転送のタイミング等を制御する。入出力デバイス１６は、制御装置１５、チャネル・サブシステム１４、メモリ制御部１３を経由し、メモリ１１との間でデータ転送を行う。入出力デバイス１６としては、HDD、ディスプレイ、キーボード、プリンタ、通信デバイス、他の記憶装置を挙げることができ、入出力デバイス１６の１つには、データベース２０が接続される。
【００４０】
アプリケーション・サーバ１０によるデータベースへの問合せに対する処理を実現するために、プログラムが記録された記録媒体が提供され、その記録媒体が入出力デバイス１６の１つに接続され、そのプログラムが、制御装置１５、チャネル・サブシステム１４、メモリ制御部１３を経由して、メモリ１１へ送られ、メモリ１１に格納される。格納されたプログラムは、再度それらを経由して入出力デバイス１６に接続されたHDDへインストールされ、適宜プロセッサ１２により読み出され、実行される。
【００４１】
プログラムが格納される記録媒体としては、フレキシブル・ディスク、CD-ROM、DVD、SDカード、フラッシュメモリ等を挙げることができる。このプログラムは、上記のデータベース２０への問合せおよび更新要求を処理し、その処理結果を出力する処理を実現する処理プログラムと、問合せおよび更新要求を生成して出力するアプリケーションとを含む。処理プログラムとアプリケーションは、同じHDDにインストールされ、適宜プロセッサ１２が読み出し、実行することができる。
【００４２】
図４は、アプリケーション・サーバ１０の機能毎に分けて示した機能ブロック図である。アプリケーション・サーバ１０は、データベース２０への問合せおよび更新要求を出力する要求出力部３０と、要求出力部３０から出力された要求が問合せであるか、更新要求であるかを判別する判別部３１と、更新要求を受け付けた順に蓄積する蓄積部３２と、所定数の更新要求が蓄積された段階で、蓄積された更新要求をバッチ処理してデータベース２０を更新する更新部３３と、データベース２０へ問合せ、問合せ結果を出力する処理部３４とを備える。処理部３４は、問合せを出した要求出力部３０に対し、問合せ結果を返す。
【００４３】
このアプリケーション・サーバ１０は、さらに、問合せの受信に応答して、蓄積部３２から蓄積された更新要求を取得し、問合せの内容に基づき、問合せ結果に影響を与える更新要求を抽出する抽出部３５と、更新部３３が蓄積部３２に蓄積された更新要求によりデータベースの更新を行うことなく、蓄積された更新要求を反映した問合せ結果が得られるように、抽出部３５により抽出された更新要求を用いて問合せの内容を変更し、処理部３４へ入力する内容変更部３６とを備える。
【００４４】
データベース２０として用いられるリレーショナル・データベースでは、そのデータベースへの問合せ言語としてSQLが使用される。リレーショナル・データベースは、関係モデルに基づいて設計・開発されるデータベースで、データがテーブルに似た構造で管理され、複数のデータ群がリレーションと呼ばれる構造で相互に連結可能とされているものである。リレーションは、テーブルの行に相当するタプルと、テーブルの列に相当するカラムと、定義域およびキー等とによって構成される。アプリケーション・サーバ１０は、このSQLを用いて、リレーションに対し、選択、結合、和、差といった演算子を用いて関係代数演算や、論理和（∨）、論理積（∧）、否定（¬）といった演算子を用いて関係論理演算を行うことにより結果を取り出すことができる。
【００４５】
SQLを使用する場合、問合せは、select文を用いて行われる。select文は、テーブル・データの検索や結果集合の取り出しを行うものである。このselect文は、select
C from T where W（Cはカラムの集合、TはCを含むテーブルの集合、Wは条件式）で表される。更新要求は、update文を用いて行われる。update文は、テーブルを更新するものである。このupdate文は、update
T set C=値 where Wj（Wjは条件式、iは自然数）で表される。
【００４６】
これらの文は、要求出力部３０から出力され、判別部３１により判別された後、update文であれば、蓄積部３２へ順に入力され、データベース２０のバッチ更新が行われるまで蓄積される。select文の場合には、抽出部３５へ入力され、蓄積部３２からupdate文を蓄積した履歴Hを取得する。蓄積部３２に３つのupdate文が蓄積されていれば、それら３つのupdate文に関する情報を取得する。
【００４７】
抽出部３５は、履歴Hからupdate文に含まれるWjを取り出し、内容変更部３６は、このWjを用いてselect文に含まれるWを変形する。この変形は、再帰的アルゴリズムを適用して行うことができる。ここで、再帰的アルゴリズムとは、再帰的な構造をもつ、問題を解くための手順を定式化した形で表現したものをいい、再帰的とは、あるものが定義されている場合、その定義の中にさらにその定義されるべきものが簡略化されて含まれているものをいう。
【００４８】
１つの例として、ｎ！＝１・２・３・・・ｎで定義される階乗関数は、再帰的アルゴリズムを適用すると、０！＝１で、かつ、ｎ＞０のとき、ｎ！＝（ｎ−１）！・ｎと変形することができる。
【００４９】
ここでは、条件式Wと履歴Hの関数A(W,H)を再帰的アルゴリズムとして適用し、条件式Wを条件式Wsへ変形する。更新により追加されるカラムの集合、テーブルの集合をそれぞれ、Cs、Tsとすると、select文は、select
Cs from Ts where Wsへと変形される。内容変更部３６は、このように変形したselect文を処理部３４へ入力し、処理部３４が、そのselect文を使用してデータベース２０へ問合せを行い、問合せ結果を得る。
【００５０】
抽出部３５および内容変更部３６における処理を、図５および図６を参照して詳細に説明する。図５は、その処理の流れを示したフローチャート図であり、図６は、その処理の主要ステップにおける問合せ文およびそのときのデータの集合を例示した図である。
【００５１】
この処理は、ステップ５００から開始し、ステップ５１０において抽出部３５が、select文に含まれる条件式Wを抽出し、Wが複数の部分条件式Eiから構成される場合、各部分条件式Eiを抽出する。例えば、条件式Wが「C1=値
and C2=値」であれば、andで結合された「C1=値」、「C2=値」が部分条件式である。この場合、E1を「C1=値」、E2を「C2=値」とし、各部分条件式を抽出する。図６（ａ）に示す例では、select文中の条件式Wは、「x>0」の１つのみとされている。
【００５２】
次に、ステップ５２０において、抽出部３５は、部分条件式Eiに影響を与えるupdate文を、履歴Hから抽出し、update文の実行順に並べたリストLを作成する。図６（ａ）では、履歴HからU1、U2、U3の３つのupdate文が抽出され、U1、U2、U3という実行順に並べられている。また、図６（ａ）では、U1、U2、U3に含まれる条件式W1、W2、W3を満たすデータの集合を、同じ記号のW1、W2、W3で表している。図６（ａ）を参照すると、W1を満たすデータの集合の中には、W2やW3を満たすデータの集合があり、また、それらの両方を満たすデータの集合もあることが示されている。
【００５３】
ステップ５３０で、リストLに含まれるupdate文があるか否かを判定する。これは、内容変更部３６あるいは別途設けられる判定部により行うことができる。update文がない場合には、リストLは空であり、ステップ５８０へ進み、この部分条件式Eiの変形は行われない。その結果、この部分条件式については、処理済みとし、残りの部分条件式について同様のリストLの作成が行われる。
【００５４】
部分条件式Eiに影響を与えるupdate文か否かは、update文中のパラメータにより判断することができる。図６に示す例では、Eiに含まれるパラメータは、ｘであり、このｘを含むupdate文を探すことにより判断する。U1、U2、U3はいずれも、ｘを含むことから、影響を与えるupdate文と判断することができる。データベース２０はまだU1、U2、U3による更新が行われていないので、問合せの条件式「x>0」を、それらによる更新前には満たしていないが、これらの更新によって満たすこととなるデータの集合や、これらの更新前には満たしていたが、これらの更新によって満たさなくなるデータの集合が存在する。このことから、U1、U2、U3は、問合せの条件式「x>0」に影響を与えるupdate文である。
【００５５】
ステップ５３０でリストLにupdate文が含まれると判定された場合、ステップ５４０へ進み、そのリストLに含まれるj番目のupdate文をUjとし、そのUj中の条件式をWjとし、そのUjより前に蓄積されたupdate文を履歴Hjとする。リストLに含まれる最初のupdate文はU1であり、このU1より前に蓄積されたupdate文は存在しないので、この場合の履歴H1は空である。
【００５６】
次に、ステップ５５０において、リストL中の全てのUjについて、Wjに再帰的アルゴリズムA(Wj,Hj)を適用してセルフメンテナブルな条件式Wjsへ変形する。ここで、再帰的アルゴリズムを適用するのは、簡単な条件式で記述することができるからである。簡単な条件式は、プログラムを作成する際においても、簡単なプログラムで済むからである。条件式Wjsへ変形すると、図６（ｂ）に示すようなupdate文およびデータの集合へと変えられる。条件式が変形されるのみであるため、図６（ａ）に示すupdate文およびデータの集合と実質的に同様のものである。
【００５７】
そして次に、ステップ５６０で、リストL中の全てのUjについて、条件式Wjsへ変形した後、そのWjsからリスト中の後続のupdate文につき変形されたWks(k>j)を除き、その条件式をWjs’とする。後続のupdate文(Uk)とは、そのupdate文(Ui)より後に要求され、蓄積されたupdate文である。このステップ５６０では、図６（ｃ）に示すように、W1s’は、W1s∧¬W2s∧¬W3s∧・・・∧¬Wns、Wjs’は、Wjs∧¬Wj+1s∧¬Wj+2s∧・・・∧¬Wns(1<j<n)、Wns’は、Wnsと変形される。このように、後続のupdate文により更新されるデータの集合を取り除くことで、その実行の順番によらず、updateを適用することが可能となる。このときのデータの集合を表すと、図６（ｃ）に示すような重なり合った部分がない集合となる。
【００５８】
ステップ５７０で、このようにして得られた条件式Wjs’を実行順に結合し、update文により更新される前の要素を含む条件式Ei’へ書き換える。図６（ｃ）に示すように、Wjs’は、互いに重なり合った部分がない集合であるため、部分条件式Eiとの結合には、単純な集合和あるいは集合差を用いることができる。集合和は、論理和を用いることができ、集合差は、その要素の否定の論理積を用いることができる。これらのうちのどちらを使用して結合するかについては、update文の結果が、Eiを満たす場合はEiにWjs’を加える、すなわち論理和(∨)を用い、Eiを満たさない場合は、EiからWjs’を除く、すなわち否定の論理積(∧¬)を用いる。
【００５９】
図６に示す実施形態では、U1およびU3の結果は、「x>0」を満たすことから、EiにW1s’およびW3s’を加え、U2の結果は、「x>0」を満たさないことから、EiからW1s’を除き、その結果、図６（ｄ）に示すように、Ei’=
Ei∨W1s’∧¬W2s’∨W3s’が得られる。次に、ステップ５８０で、未処理の部分条件式を含むか否かを判定し、含む場合には、ステップ５１０へ戻り、その部分条件式の抽出を行う。含まない場合は、全ての部分条件式を処理したため、ステップ５９０へ進み、この抽出部３５および内容変更部３６による処理を終了する。
【００６０】
なお、内容変更部３６は、得られたEi’により、select文の条件式が記述されるwhere句を書き換え、処理部３４へ入力し、処理部３４が、その書き換えたselect文を用いてデータベース２０へ問合せを行うことで、U1、U2、U3による更新を反映した結果を得る。
【００６１】
こうして得られた結果は、マテリアライズド・ビューのメンテナンス・アルゴリズムを実装している場合にはこのメンテナンス・アルゴリズムを用いて更新し、問合せを出力した要求出力部３０へ返される。マテリアライズド・ビューは、データベース２０上に存在する実データを保持するビューであり、このマテリアライズド・ビューの元となる表データが更新された場合に、メンテナンス・アルゴリズムを用いて、全てのデータを入れ替えたり、変更されたデータのみを入れ替えたりすることができるように構成されている。
【００６２】
更新された結果を、マテリアライズド・ビューを拡張したセルフメンテナブル・ビューとして図７に例示する。この図７に示す実施形態では、図７中、式３で示すように、未処理の更新要求が、１つのみで、部門「A10」に所属する従業員の給与を「50000」へ更新するものとされている。
【００６３】
入力されたselect文に含まれる条件式を抽出すると、「給与が40000以上」で、かつ「性別が女性」である。すなわち、２つの部分条件式から構成されている。未処理の更新要求は、上記の１つしかない。
【００６４】
この未処理の更新要求は、部門「A10」に所属する女性従業員の給与を「50000」へ更新するもので、この更新により、その女性従業員の中には、更新前は40000未満であったが、更新後は40000以上になった者が存在する。したがって、この更新は、select文に含まれる上記条件式に影響を与えるものである。
【００６５】
このため、上記のようにしてリストLを作成し、再帰的アルゴリズムを適用して第２条件式（上記でいうWis）へ変形し、その第２条件式から後続のupdate文につき変形された第２条件式を除いて第３条件式（上記でいうWjs’）を生成し、第３条件式を、∨や∧¬等の演算子により結合し、変形したselect文を生成する。
【００６６】
ここでは、部門「A10」の全ての従業員が、給与40000以上の「50000」へ更新されるため、部門「A10」の全ての従業員を含むように、select文中の条件式は、(SALARY≧40000
OR WORKDEPT=A10) AND SEX=Fへと変形される。この変形されたselect文を処理部３４へ入力し、処理部３４が問合せを行った結果が、図７のテーブルに示されている。
【００６７】
ここで、データベース２０を更新するフラッシュのタイミングであるが、その１つとしては、アプリケーション・サーバ１０側での更新要求の適用コストの前回のフラッシュからの合計が、データベース２０での更新のコストを上回った時を挙げることができる。しかしながら、スケール・アウトの効果を考慮すると厳密に求めることは難しく、前回のフラッシュからの更新要求や問合せ要求の数等から経験的に求めた値を用いることが現実的である。
【００６８】
マテリアライズド・ビューと同じ目的で、問合せをデータベースに依存しないで行う技術として、リザルト・キャッシュを用いる方法がある。このリザルト・キャッシュは、ビューを全て保持するのではなく、過去の問合せ結果のうち、最近の問合せに対する結果と頻繁に行われる問合せに対する結果のみを選択的に保持する。このため、リザルト・キャッシュは、メモリ使用量を増加させることなく、多くの問合せをキャッシュ上で処理することができる。最近の問合せは、最新の問合せから、新しい順に所定数の問合せや、ある時間内に行われた問合せ等とすることができる。頻繁に行われる問合せは、ある時間内に行われた問合せの数がある閾値以上である問合せとすることができる。
【００６９】
本発明では、図８に示すように、結果保持部３７として、このリザルト・キャッシュを用いて構成することもできる。本発明は、これまでに説明してきたように、アプリケーションに対する完全な知識を仮定することを避けるために、問合せの都度、蓄積された更新要求に応じてその問合せをセルフメンテナブルにするための付加情報を求めている。すなわち、select文に付加する条件式や論理演算を求めている。
【００７０】
この場合、同じ問合せが、次の更新要求が蓄積される前に出力された場合には同じselect文に変形されるが、１つは更新要求前で、もう１つがその更新要求後に出力された場合は、異なるselect文に変形される。リザルト・キャッシュは、最近の問合せに対する結果や頻繁に行われる問合せに対する結果を保持することから、このような同じ問合せであるにもかかわらず、時により異なる問合せへ変形される可能性があることは、リザルト・キャッシュのメモリの使用効率の観点から望ましくない。
【００７１】
そこで、要求されうる更新要求が網羅的でなくてもいくつかが既知である場合には、問合せが出力された時点で、それまでに蓄積された問合せ結果に影響を与える更新要求に加え、それら既知の更新要求に対しても、問合せ結果がセルメンテナブルになるように問合せを変形するように構成する。
【００７２】
具体的には、内容変更部３６が、蓄積部３２に蓄積された問合せ結果に影響を与える更新要求に加え、要求されうる既知の更新要求も用いて問合せの内容を変更する。すなわち、蓄積部３２に蓄積された問合せ結果に影響を与える更新要求に含まれる条件式に加え、これから要求されるとわかっているその問合せ結果に影響を与える更新要求に含まれる条件式を用いて問合せ文を変形する。このように構成することにより、その既知の更新要求が実際に蓄積されるまで、データベース２０へは同じ問合せ文で問合せを行うこととなり、その問合せに対する結果は、頻繁に行われる問合せに対する結果として、結果保持部３７に保持されるため、キャッシュ破棄を予防することができる。
【００７３】
また、この既知の更新要求に対しては、過去に要求された更新要求を加えることもできる。過去に要求された更新要求と同じ更新要求が出力されることもあるからである。内容変更部３６は、蓄積部３２に蓄積された更新要求を用いて問合せの内容を変更し、その内容を変更した問合せを処理部３４に入力するとともに、既知の更新要求も用いて問合せの内容を変更し、その内容を変更した問合せを別途、処理部３４に入力することも可能である。多くのアプリケーションでは、要求出力部３０は、限られた更新要求を所定の周期で出力していることから、上記のように構成することで、一定時間経過後のキャッシュ破棄は起こらなくなると期待することができる。
【００７４】
これまで、本発明の処理装置、その処理装置により実行される処理方法を、図面を参照して詳細に説明してきたが、本発明は上記実施の形態に限定されるものではなく、他の実施形態や、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。したがって、本発明は、コンピュータ読み取り可能なプログラムとして構成し、コンピュータにそのプログラムを実行させることにより、処理装置として実現することもでき、処理方法も実現することができる。
【図面の簡単な説明】
【００７５】
【図１】データベースに格納されたデータのデータ構造、マテリアライズド・ビュー、セルフメンテナブル・ビューを例示した図。
【図２】本発明の処理装置の一実施形態であるアプリケーション・サーバを例示した図。
【図３】アプリケーション・サーバのハードウェア構成を例示した図。
【図４】アプリケーション・サーバの機能毎に分けて示した機能ブロック図。
【図５】抽出部および内容変更部により行われる処理の流れを示したフローチャート図。
【図６】抽出部および内容変更部による各処理ステップでの条件式およびデータの集合を示した図。
【図７】アプリケーション・サーバで処理された問合せ結果のビューを例示した図。
【図８】本発明の処理装置の別の実施形態を示した機能ブロック図。
【符号の説明】
【００７６】
１０…アプリケーション・サーバ、１１…メモリ、１２…プロセッサ、１３…メモリ制御部、１４…チャネル・サブシステム、１５…制御装置、１６…入出力デバイス、２０…データベース、３０…要求出力部、３１…判別部、３２…蓄積部、３３…更新部、３４…処理部、３５…抽出部、３６…内容変更部、３７…結果保持部
【図１】
2010079627.tif 000003
【図２】
2010079627.tif 000004
【図３】
2010079627.tif 000005
【図４】
2010079627.tif 000006
【図５】
2010079627.tif 000007
【図６】
2010079627.tif 000008
【図７】
2010079627.tif 000009
【図８】
2010079627.tif 000010