(57)【要約】【課題】サマリーテーブルの差分リフレッシュを行う際にベーステーブルをロックする時間を短くする。【解決手段】ベーステーブル及びその差分テーブルを記憶するベーステーブル記憶部１１１〜１１ｎと、複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブル及びその差分情報を記憶するサマリーテーブル記憶部１２と、ベーステーブルの差分データを差分テーブルに挿入する差分データ処理部１３１〜１３ｎと、サマリーテーブルの差分情報を生成する差分演算処理部１４とを備える。差分演算処理部１４は、指定されたベーステーブルのこれまでの更新に基づく差分情報の生成を、指定されたベーステーブルのその後の更新が可能な状態で行う生成部１４２と、異なるベーステーブルを指定した場合には異なるトランザクションで差分情報の生成が行われるよう制御する制御部１４１とを備える。【選択図】図１
2008146264.tif 000002
【特許請求の範囲】
【請求項１】
複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするための装置であって、
前記複数のベーステーブルのうちの指定されたベーステーブルの所定の時点までの変更を前記サマリーテーブルに反映させるための差分情報を、当該指定されたベーステーブルの当該所定の時点以降の変更が可能な状態で生成する生成部と、
異なるベーステーブルを指定した場合に異なるトランザクションで前記生成部が前記差分情報を生成するように制御する制御部と
を備えた、装置。
【請求項２】
前記生成部は、前記複数のベーステーブルのうちの前記指定されたベーステーブル以外の全てのベーステーブルの変更が不可能な状態で、当該全てのベーステーブルを参照して、前記差分情報を１つのトランザクションで生成する、請求項１の装置。
【請求項３】
前記生成部は、前記複数のベーステーブルのうちの前記指定されたベーステーブル以外の全てのベーステーブルから１つずつベーステーブルを選択し、当該選択されたベーステーブルの変更が不可能な状態で当該選択されたベーステーブルを参照した処理を１つのトランザクションで行うことにより、前記差分情報を生成する、請求項１の装置。
【請求項４】
前記生成部は、前記指定されたベーステーブルの変更を管理する領域において、前記差分情報の生成処理中は、前記所定の時点までの変更と、当該所定の時点以降の変更とを区別して管理することにより、当該指定されたベーステーブルの当該所定の時点以降の変更が可能な状態にする、請求項１の装置。
【請求項５】
前記生成部は、前記差分情報の生成処理中は、前記指定されたベーステーブルの変更を管理する領域で前記所定の時点以降の変更を管理する処理を停止することにより、当該指定されたベーステーブルの当該所定の時点以降の変更が可能な状態にする、請求項１の装置。
【請求項６】
複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするための方法であって、
前記複数のベーステーブルのうちの特定のベーステーブルの所定の時点までの変更を特定するステップと、
前記複数のベーステーブルのうちの前記特定のベーステーブル以外のｎ個(ｎ≧１)のベーステーブルの変更を受け付けないようにするステップと、
前記特定するステップで特定された変更を前記サマリーテーブルに反映させるための差分情報を、前記特定のベーステーブルの前記所定の時点以降の変更を受け付けつつ、前記ｎ個のベーステーブルを参照して生成するステップと、
前記ｎ個のベーステーブルの変更を受け付けるようにするステップと
を含む、方法。
【請求項７】
前記生成するステップでは、前記特定するステップで特定された変更と、前記特定のベーステーブルの前記所定の時点以降の変更とを区別して管理することにより、当該所定の時点以降の変更を受け付けるようにする、請求項６の方法。
【請求項８】
複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするための方法であって、
前記複数のベーステーブルのうちの第１のベーステーブルの所定の時点までの変更を特定するステップと、
前記複数のベーステーブルのうちの第２のベーステーブルの変更を受け付けないようにするステップと、
前記特定するステップで特定された変更を前記サマリーテーブルに反映させるための差分情報を、前記第１のベーステーブルの前記所定の時点以降の変更を受け付けつつ、前記第２のベーステーブルを参照して生成するステップと、
前記第２のベーステーブルの変更を受け付けるようにするステップと、
前記複数のベーステーブルのうちの第３のベーステーブルの変更を受け付けないようにするステップと、
前記差分情報を前記第３のベーステーブルを参照して更新するステップと、
前記第３のベーステーブルの変更を受け付けるようにするステップと
を含む、方法。
【請求項９】
前記生成するステップでは、前記特定するステップで特定された変更と、前記第１のベーステーブルの前記所定の時点以降の変更とを区別して管理することにより、当該所定の時点以降の変更を受け付けるようにする、請求項８の方法。
【請求項１０】
複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするためのプログラムであって、コンピュータに、
前記複数のベーステーブルのうちの指定されたベーステーブルの所定の時点までの変更を前記サマリーテーブルに反映させるための差分情報を、当該指定されたベーステーブルの当該所定の時点以降の変更が可能な状態で生成する機能と、
異なるベーステーブルを指定した場合に異なるトランザクションで前記差分情報が生成されるように制御する機能と
を実現させる、プログラム。
【請求項１１】
前記生成する機能では、前記複数のベーステーブルのうちの前記指定されたベーステーブル以外の全てのベーステーブルの変更が不可能な状態で、当該全てのベーステーブルを参照して、前記差分情報を１つのトランザクションで生成する、請求項１０のプログラム。
【請求項１２】
前記生成する機能では、前記複数のベーステーブルのうちの前記指定されたベーステーブル以外の全てのベーステーブルから１つずつベーステーブルを選択し、当該選択されたベーステーブルの変更が不可能な状態で当該選択されたベーステーブルを参照した処理を１つのトランザクションで行うことにより、前記差分情報を生成する、請求項１０のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするための装置、方法、プログラムに関し、より詳しくは、ベーステーブルの差分データに基づいてサマリーテーブルをリフレッシュするための装置、方法、プログラムに関する。
【背景技術】
【０００２】
近年、オンライン分析処理(On-Line Analytical Processing(ＯＬＡＰ))により、企業等が保持する情報を分析する動きが盛んになっている。このＯＬＡＰでは、ＳＱＬ文を用いてデータベース(以下、「ＤＢ」という)内のテーブル(ベーステーブル)を検索したり集計したりすることで、分析したい情報を作成する。しかし、その処理には時間がかかるため、事前に演算した結果をテーブルに保存しておき、それを利用するのが普通である。ここで、そのようなＳＱＬ文の実行結果を保存しておくテーブルは、一般に「サマリーテーブル」と呼ばれる。尚、サマリーテーブルは、製品によっては、「マテリアライズド照会表」と呼んだり、「マテリアライズドビュー」と呼んだりすることもあるが、本明細書では、マテリアライズド照会表の略称である「ＭＱＴ」を主として用いることとする。
【０００３】
ところで、事前に演算してＭＱＴを作成した後に、参照しているベーステーブルの情報が更新されると、ＭＱＴとベーステーブルとの間に不整合が生じてしまう。そこで、不整合を解消するため、同期し直す処理を行う必要がある。この処理は、一般に、「リフレッシュ」と呼ばれる。かかるＭＱＴのリフレッシュは、まず、フルリフレッシュと差分リフレッシュとに分類することができる。このうち、フルリフレッシュとは、ＭＱＴに関連付けられているＳＥＬＥＣＴ文を実行することにより、ＭＱＴを再作成する方法である。また、差分リフレッシュとは、参照しているベーステーブルの更新内容に相当する差分データを用いてＭＱＴを演算する方法である。
【０００４】
また、ＭＱＴのリフレッシュは、リフレッシュを行うタイミングの観点から、即時リフレッシュ(Refresh Immediate)と、遅延リフレッシュ(Refresh Deferred)とに分類することもできる(非特許文献１、２参照)。このうち、即時リフレッシュとは、参照しているテーブルでデータの挿入、更新、削除がなされると、自動的にＭＱＴでデータの挿入、更新、削除がなされる、という方法である。また、遅延リフレッシュとは、参照しているテーブルでデータの挿入、更新、削除がなされると、自動的にＭＱＴでデータの挿入、更新、削除がなされるわけではないが、リフレッシュコマンドによっていつでもデータをリフレッシュできる、という方法である。差分リフレッシュを遅延リフレッシュで行う場合、ベーステーブルの情報が更新されると、ＭＱＴの差分はステージングテーブルに挿入される。そして、リフレッシュコマンドを発行すると、ステージングテーブルを用いて、ＭＱＴがリフレッシュされる。ここで、従来、ＭＱＴの差分リフレッシュは、参照しているベーステーブルの情報を更新するトランザクションを用いて行われていた。
【０００５】
【非特許文献１】Roman B. Melnyk、“DB2 Basics: An introduction to materialized query tables”、［online］、２００５年９月８日、［２００６年１１月２４日検索］、インターネット＜URL：http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0509melnyk/＞
【非特許文献２】Anjali Betawadkar-Norwood、Valer-Alin Crisan、Eileen Lin、“Maximize the performance of WebSphere Information Integrator with Materialized Query Tables”、［online］、２００６年５月２３日、［２００６年１１月２４日検索］、インターネット＜URL：http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0605lin/＞
【発明の開示】
【発明が解決しようとする課題】
【０００６】
このように、従来技術においては、ＭＱＴの差分リフレッシュにおける演算処理を１トランザクションで行っているため、その処理が行われている間は、ＭＱＴが参照しているベーステーブルを全てロックする必要があった。ここで、ベーステーブルがロックされている時間を短縮することができれば、ベーステーブルのデータを更新できない時間が減少するので、業務に与える影響を抑えることができる。
【０００７】
また、従来から、企業等が保持する情報は、分散管理されるのが一般的である。例えば、部門ごとに情報を管理する、といったシステム形態である。かかるシステム形態では、１つのＤＢから構成されるＤＢ環境ではなく、複数のＤＢから構成されるＤＢ環境が採用されることが多い。つまり、複数のＤＢを統合し、それぞれのＤＢに存在するテーブルを１つのＤＢにあるかのように扱うことができる分散ＤＢ環境である。ここで、「ＤＢ環境」とは、ＤＢにＳＱＬ文でアクセスし、その結果を取得するシステムのことをいう。
【０００８】
そして、近年、分散ＤＢ環境下でも、分散された情報を統合することにより、情報の有効かつ効率的な利用を図り、企業の競争力を高めることが求められている。そこで、このような環境下でもＯＬＡＰによる情報の分析は行われており、ＭＱＴが作成されることがある。しかしながら、分散ＤＢ環境下では、現状、フルリフレッシュしかできない。つまり、ＭＱＴの差分リフレッシュ機能は提供されていない。また、仮に、分散ＤＢ環境下で従来の手法を用いて差分リフレッシュを行おうとした場合、全てのベーステーブルをロックしなければならない。更に、分散されたベーステーブルを用いて差分リフレッシュを行う必要があるため、その演算処理に時間がかかり、かつ、その演算処理中は全てのベーステーブルがロックされているため業務で発生したデータを登録・更新・削除することができず、業務に影響を与えてしまうことになる。
【０００９】
本発明は、以上のような技術的課題を解決するためになされたものであって、その目的は、サマリーテーブルの差分リフレッシュを行う際に、ベーステーブルをロックする時間を短くすることにある。
【課題を解決するための手段】
【００１０】
かかる目的のもと、本発明では、複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルのリフレッシュを複数のトランザクションを用いて行うようにした。即ち、本発明の装置は、複数のベーステーブルのうちの指定されたベーステーブルの所定の時点までの変更をサマリーテーブルに反映させるための差分情報を、その指定されたベーステーブルのその所定の時点以降の変更が可能な状態で生成する生成部と、異なるベーステーブルを指定した場合に異なるトランザクションで生成部が差分情報を生成するように制御する制御部とを備えている。
【００１１】
ここで、生成部は、複数のベーステーブルのうちの指定されたベーステーブル以外の全てのベーステーブルの変更が不可能な状態で、その全てのベーステーブルを参照して、差分情報を１つのトランザクションで生成するようにしてもよい。或いは、生成部は、複数のベーステーブルのうちの指定されたベーステーブル以外の全てのベーステーブルから１つずつベーステーブルを選択し、その選択されたベーステーブルの変更が不可能な状態でその選択されたベーステーブルを参照した処理を１つのトランザクションで行うことにより、差分情報を生成するようにしてもよい。また、生成部は、指定されたベーステーブルの変更を管理する領域において、差分情報の生成処理中は、所定の時点までの変更と、その所定の時点以降の変更とを区別して管理することによって、その指定されたベーステーブルのその所定の時点以降の変更が可能な状態にすることができる。或いは、生成部は、差分情報の生成処理中は、指定されたベーステーブルの変更を管理する領域で所定の時点以降の変更を管理する処理を停止することによっても、その指定されたベーステーブルのその所定の時点以降の変更が可能な状態にすることができる。
【００１２】
また、本発明は、複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルのリフレッシュを複数のトランザクションを用いて行う方法として捉えることもできる。その場合、本発明の第１の方法は、複数のベーステーブルのうちの特定のベーステーブルの所定の時点までの変更を特定するステップと、複数のベーステーブルのうちの特定のベーステーブル以外のｎ個(ｎ≧１)のベーステーブルの変更を受け付けないようにするステップと、特定するステップで特定された変更をサマリーテーブルに反映させるための差分情報を、特定のベーステーブルの所定の時点以降の変更を受け付けつつ、ｎ個のベーステーブルを参照して生成するステップと、ｎ個のベーステーブルの変更を受け付けるようにするステップとを含んでいる。また、本発明の第２の方法は、複数のベーステーブルのうちの第１のベーステーブルの所定の時点までの変更を特定するステップと、複数のベーステーブルのうちの第２のベーステーブルの変更を受け付けないようにするステップと、特定するステップで特定された変更をサマリーテーブルに反映させるための差分情報を、第１のベーステーブルの所定の時点以降の変更を受け付けつつ、第２のベーステーブルを参照して生成するステップと、第２のベーステーブルの変更を受け付けるようにするステップと、複数のベーステーブルのうちの第３のベーステーブルの変更を受け付けないようにするステップと、差分情報を第３のベーステーブルを参照して更新するステップと、第３のベーステーブルの変更を受け付けるようにするステップとを含んでいる。
【００１３】
一方、本発明は、複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルのリフレッシュを複数のトランザクションを用いて行うためのコンピュータプログラムとして捉えることもできる。その場合、本発明のプログラムは、複数のベーステーブルのうちの指定されたベーステーブルの所定の時点までの変更をサマリーテーブルに反映させるための差分情報を、その指定されたベーステーブルのその所定の時点以降の変更が可能な状態で生成する機能と、異なるベーステーブルを指定した場合に異なるトランザクションで差分情報が生成されるように制御する機能とを実現させる。
【発明の効果】
【００１４】
本発明によれば、サマリーテーブルの差分リフレッシュを行う際に、ベーステーブルをロックする時間が短くなる。
【発明を実施するための最良の形態】
【００１５】
以下、添付図面を参照して、本発明を実施するための最良の形態(以下、「実施の形態」という)について詳細に説明する。まず、本実施の形態の原理について説明する。ＭＱＴが、Ｔ１、Ｔ２、Ｔ３の３つのテーブルを参照するＳＥＬＥＣＴ文の実行結果を保持する場合、本明細書では、これらのテーブル間の関係を以下の式で表すこととする。
【００１６】
【数１】
2008146264.tif 000003
【００１７】
また、ＭＱＴが、Ｔ１からＴｎのｎ個のテーブルを参照するＳＥＬＥＣＴ文の実行結果を保持する場合、本明細書では、これらのテーブル間の関係を以下の式で表すこととする。
【００１８】
【数２】
2008146264.tif 000004
【００１９】
ここで、Ｔ１からＴｎのそれぞれの差分データを保持する差分テーブルを設け、これらの差分テーブルをそれぞれｄＴ１、ｄＴ２、・・・とする。また、古いＭＱＴをＭＱＴｏｌｄ、最新のＭＱＴをＭＱＴ、その差分をｄＭＱＴとすると、以下の式が成り立つ。
【００２０】
【数３】
2008146264.tif 000005
【００２１】
この式から、この演算処理中、ＴｉとｄＴｉ(ｉ＝１〜ｎ)は一貫性を保つ必要があり、Ｔ１からＴｎまでの全てのテーブルを更新できないことが分かる。そこで、本実施の形態では、ｄＭＱＴを演算する処理を、複数のトランザクションに分けて行うようにする。まず、Ｔ１の差分データｄＴ１に関するＭＱＴの差分ｄＭＱＴは、以下の式で表される。
【００２２】
【数４】
2008146264.tif 000006
【００２３】
この式において、ｄＴ１は使用しているが、Ｔ１は使用していない。従って、この演算中にＴ１を更新することは可能である。但し、ｄＴ１、Ｔｉ、ｄＴｉ(ｉ＝２〜ｎ)は、この演算中、一貫性を保つ必要がある。尚、この式に基づく処理で、ｄＴ１に関するＭＱＴの差分が反映されるので、この処理の終了後、利用したｄＴ１を削除する。また、同様の処理をＴ２〜Ｔｎに対しても行う。ここでも、ｄＴｉ(ｉ＝２〜ｎ)に関するｄＭＱＴの演算中にＴｉを更新することは可能である。ｄＴ１からｄＴｎに関するＭＱＴの差分演算処理は、それぞれ１つのトランザクションで行う。つまり、トータルでｎ個のトランザクションで処理する。従って、ｄＴ１、ｄＴ２、ｄＴ３に関するｄＭＱＴを順に演算する場合、１つ目のトランザクションでＴ１を更新でき、２つ目のトランザクションでＴ２を更新でき、３つ目のトランザクションでＴ３を更新できるようになる。
【００２４】
以下、かかる原理のコンピュータシステムによる具現化について述べる。まず、本実施の形態が適用されるコンピュータシステムについて説明する。図１は、本実施の形態におけるコンピュータシステムの構成例を示した図である。図示するように、このコンピュータシステムは、ベーステーブル記憶部１１１〜１１ｎと、サマリーテーブル記憶部１２と、差分データ処理部１３１〜１３ｎと、差分演算処理部１４とを備えている。
【００２５】
ベーステーブル記憶部１１１〜１１ｎは、ベーステーブルと、ベーステーブルの差分データを保持する差分テーブルとを記憶する。ここで、ベーステーブル記憶部１１１〜１１ｎは、原理の説明で用いた例に従い、それぞれ、Ｔ１及びｄＴ１、Ｔ２及びｄＴ２、Ｔ３及びｄＴ３、・・・、Ｔｎ及びｄＴｎを記憶するものとする。尚、ここでは、Ｔ１及びｄＴ１、Ｔ２及びｄＴ２、Ｔ３及びｄＴ３、・・・、Ｔｎ及びｄＴｎが、それぞれ、別々の記憶媒体に記憶されているように図示したが、このような構成には限らない。これらの中から幾つかの組を選択し、それを１つの記憶媒体に記憶する構成としてもよい。
【００２６】
サマリーテーブル記憶部１２は、サマリーテーブルと、サマリーテーブルをリフレッシュするための差分情報とを記憶する。ここで、サマリーテーブル記憶部１２は、原理の説明で用いた例に従い、ＭＱＴ及びｄＭＱＴを記憶するものとする。差分データ処理部１３１〜１３ｎは、それぞれ、ベーステーブル記憶部１１１〜１１ｎに記憶されたベーステーブルの差分データを処理する。即ち、ベーステーブルが更新された場合に、その更新内容を示す差分データを対応する差分テーブルに格納する。尚、差分データを差分テーブルに格納する処理は、後述するように、既存のＤＢＭＳ(DataBase Management System)にて提供されるトリガーの機能や、データベースに対して行われた変更を格納するトランザクションログをキャプチャする機能を用いて行うことができる。尚、トランザクションログは、製品によっては、「リカバリーログ」と呼んだり、「データベースログ」と呼んだりすることもあるが、本明細書では、トランザクションログを用いることとする。
【００２７】
差分演算処理部１４は、ベーステーブル記憶部１１１〜１１ｎに記憶されたベーステーブルの差分データに基づいて、サマリーテーブルをリフレッシュするための差分を演算する。また、この差分演算処理部１４は、制御部１４１と、生成部１４２とを備える。このうち、制御部１４１は、差分演算処理部１４の全体を制御する。即ち、ベーステーブル記憶部１１１〜１１ｎにそれぞれ記憶されたＴ１、Ｔ２、Ｔ３、・・・、Ｔｎの中から１つを指定し、その指定されたテーブルの更新を受け付けるようにした上で、そのテーブルの差分データに関するｄＭＱＴの生成を生成部１４２に指示する。このとき、指定するテーブルが異なれば、異なるトランザクションで生成部１４２による処理が行われるように制御する。また、制御部１４１は、Ｔ１、Ｔ２、Ｔ３、・・・、Ｔｎのロックや、ｄＴ１、ｄＴ２、ｄＴ３、・・・、ｄＴｎの更新や、トランザクションのコミットも行う。また、生成部１４２は、制御部１４１が指定したテーブルの差分データに関するｄＭＱＴを生成してサマリーテーブル記憶部１２に記憶する。
【００２８】
ここで、Ｔｉの差分データを保持するｄＴｉについて具体的に説明する。ｄＴｉは、ＭＱＴの差分を演算する際に利用するＴｉの列名の他に、以下の列(カラム)を持つ。まず、データが追加されたのか削除されたのかを示すフラグである。本実施の形態では、この列を「オペレーションタイプ」と呼び、追加の場合は「１」を格納し、削除の場合は「−１」を格納するものとする。尚、図では、これを「ＯＰＥＲＡＴＩＯＮＴＹＰＥ」と表記している。次に、データが演算処理中なのか未処理なのかを表すフラグである。本実施の形態では、この列を「プロセスフラグ」と呼び、演算処理中の場合は「１」、未処理の場合は「０」を格納するものとする。尚、図では、これを「ＰＲＯＣＥＳＳＦＬＡＧ」と表記している。
【００２９】
例えば、データは、ｄＴｉに対して次のように格納される。Ｔｉにデータが挿入されたとすると、その中でＭＱＴに利用する列に、オペレーションタイプとして「１」を、プロセスフラグとして「０」を付加したデータ(レコード)をｄＴｉに挿入する。Ｔｉのデータが削除されたとすると、その中でＭＱＴに利用する列に、オペレーションタイプとして「−１」を、プロセスフラグとして「０」を付加したデータ(レコード)をｄＴｉに挿入する。また、Ｔｉのデータが更新された場合は、古いデータが削除され、新しいデータが挿入されたものとして処理する。
【００３０】
ここで、Ｔｉの更新及びｄＴｉへの差分データの挿入について具体的に説明する。図２は、Ｔ１の更新による差分データのｄＴ１への挿入例を示したものである。この例において、Ｔ１は、Ｃ１、Ｃ２、Ｃ３という３つの列からなるものとする。また、ＭＱＴでこのうちＣ１及びＣ３の列を使用しているとすると、ｄＴ１の列は、Ｃ１、Ｃ３、オペレーションタイプ、プロセスフラグとなる。ある時点で、Ｔ１が図２(ａ)に示したようなデータを保持し、ｄＴ１が図２(ｂ)に示したように空であるとする。ここで、図２(ｃ)に示すように、Ｔ１のＣ１＝３、Ｃ２＝‘ＪＡＰＡＮ’、Ｃ３＝‘ＯＳＡＫＡ’のレコードが、Ｃ１＝３、Ｃ２＝‘ＩＴＡＬＹ’、Ｃ３＝‘ＲＯＭＥ’に更新された場合を考える。この場合、ｄＴ１は、図２(ｄ)に示したようなデータを保持するようになる。つまり、Ｃ１＝３、Ｃ２＝‘ＪＡＰＡＮ’、Ｃ３＝‘ＯＳＡＫＡ’のレコードが削除され、Ｃ１＝３、Ｃ２＝‘ＩＴＡＬＹ’、Ｃ３＝‘ＲＯＭＥ’のレコードが追加されたことを示す差分データが挿入されている。
【００３１】
次いで、図１に示したコンピュータシステムの各処理部の動作について説明する。まず、差分データ処理部１３１〜１３ｎの動作を説明する。差分データ処理部１３１〜１３ｎは、既に述べたように、Ｔ１〜Ｔｎの差分データを保持する目的で差分テーブルｄＴ１〜ｄＴｎを作成し、Ｔ１〜Ｔｎの差分データをｄＴ１〜ｄＴｎに挿入する。ここで、差分データの差分テーブルへの挿入は、データベースのトリガーの機能を用いて、或いは、トランザクションログをキャプチャする機能を用いて行われる。
【００３２】
そこで、まず、トリガーの機能を用いて差分データを差分テーブルに挿入する場合について説明する。尚、ここでは、差分データ処理部１３１〜１３ｎのうち、差分データ処理部１３１について述べる。図３は、トリガーの機能を用いた差分テーブルの作成について説明するための図である。図３(ａ)に、このときの処理の流れについて示す。図示するように、トリガーの機能を用いる場合、まず、ｄＴ１を作成し(ステップ３０１)、次に、トリガーを作成する(ステップ３０２)。
【００３３】
ここで、ステップ３０１でのｄＴ１の作成、及び、ステップ３０２でのトリガーの作成のためのＳＱＬ文を図３(ｂ)に示す。まず、１つ目のＳＱＬ文により、Ｔ１が作成されていることが前提である。次に、２つ目のＳＱＬ文により、ｄＴ１を作成する。このとき、前述したように、ｄＴ１においてオペレーションタイプとプロセスフラグとを保持できるようにしておく。そして、３つ目から５つ目のＳＱＬ文により、トリガーを作成する。このとき、追加であればオペレーションタイプを「１」に設定したレコードを、削除であればオペレーションタイプを「−１」に設定したレコードを、更新であればオペレーションタイプを「１」に設定したレコードと「−１」に設定したレコードとを挿入するように指定しておく。また、プロセスフラグはいずれの場合も「０」に設定されるように指定する。このように予めトリガーを作成しておくことで、後は、ＤＢが、差分データを自動的に差分テーブルに挿入する。
【００３４】
次に、トランザクションログをキャプチャする機能を用いて差分データを差分テーブルに挿入する場合について説明する。尚、ここでも、差分データ処理部１３１〜１３ｎのうち、差分データ処理部１３１について述べる。図４は、このときの差分データ処理部１３１の動作を示したフローチャートである。差分データ処理部１３１は、定期的に以下の処理を行う。まず、差分データ処理部１３１は、トランザクションログをチェックし、コミット済みの差分データを取得する(ステップ３５１)。
【００３５】
次に、差分データ処理部１３１は、差分データに対し、オペレーションタイプ及びプロセスフラグを付加し、ｄＴ１に挿入する(ステップ３５２)。ここで、追加であればオペレーションタイプを「１」に設定したレコードを、削除であればオペレーションタイプを「−１」に設定したレコードを、更新であればオペレーションタイプを「１」に設定したレコードと「−１」に設定したレコードとを挿入する。また、プロセスフラグはいずれの場合も「０」に設定する。
【００３６】
このようにしてｄＴｉ(ｉ＝１〜ｎ)に差分データが格納されると、差分演算処理部１４が、ｄＭＱＴの演算処理を行う。ところで、本実施の形態では、制御部１４１がＴ１〜ＴｎからＴｉを指定し、生成部１４２に対し、ｄＴｉに関するｄＭＱＴを演算するよう指示する。これに応じて、生成部１４２は、他のテーブルが指定された場合とは異なるトランザクションでｄＭＱＴを生成する。
【００３７】
ここで、生成部１４２によるｄＭＱＴの生成方法には、２つの方法がある。１つは、ｄＴｉに関するｄＭＱＴの演算を、全ｄＴｊ(ｊ＝1〜ｎかつｊ≠ｉ)にロックをかけ、１つのトランザクションで行う方法である。本明細書では、この方法を「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」と称する。もう１つは、ｄＴｉに関するｄＭＱＴの演算を、ｄＴｉと他の１つのテーブルとの組み合わせによる演算と、その結果と更に他の１つのテーブルとの組み合わせによる演算とに分け、それぞれの演算を別々のトランザクションで行うことで、更に細かくトランザクションを分ける方法である。本明細書では、この方法を「Ｏｎｅ  ｂｙ  ｏｎｅ」と称する。
【００３８】
以下、本実施の形態の動作を、これら２つの方法に分けて説明する。まず、「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」における動作について説明する。図５は、このときの差分演算処理部１４の動作を示したフローチャートである。差分演算処理部１４では、まず、制御部１４１が、Ｔ１〜Ｔｎの中から１つのベーステーブルを指定し、これをＴｉとする。そして、このＴｉについて、ｉループの処理を開始する(ステップ４０１)。このとき、制御部１４１は、１回のｉループの処理が１つのトランザクションで実行されるよう制御する。
【００３９】
そして、ｉループでは、ｄＴｉに関するＭＱＴの差分を演算する。即ち、まず、制御部１４１が、その時点でｄＴｉに存在する全てのデータのプロセスフラグを「１」にし、演算処理中であることを示す状態にしておく(ステップ４０２)。また、この処理を開始する時点での最新の状態でＴｊ(ｊ＝１〜ｎ、ｊ≠ｉ)をロックする(ステップ４０３)。
【００４０】
次に、制御部１４１による制御の下、生成部１４２が、ｄＴｉに関するｄＭＱＴを演算し、演算結果をステージングテーブルに追加する(ステップ４０４)。ここで、ｄＭＱＴの演算には、ｄＴｉのデータのうち、プロセスフラグが「１」のもののみを用いる。この場合、Ｔｊ(ｊ＝１〜ｎ、ｊ≠ｉ)はロックされているが、Ｔｉはロックされていないので、ｄＴｉに関するｄＭＱＴの演算中にＴｉが更新され、ｄＴｉに差分データが挿入されてくることがある。しかしながら、その差分データのプロセスフラグは「０」となっているので、これは今回のｄＭＱＴの演算には用いられず、次回のｄＭＱＴの演算に用いられる。
【００４１】
このようにしてｄＭＱＴがステージングテーブルに追加されると、制御部１４１は、ｄＴｉのデータのうち、プロセスフラグが「１」のデータを削除する(ステップ４０５)。つまり、ｄＭＱＴの演算に使用したデータを削除する。そして、制御部１４１は、最後に、コミットし、処理を確定させる(ステップ４０６)。これにより、ステップ４０３でなされたＴｊ(ｊ＝１〜ｎ、ｊ≠ｉ)のロックは解除される。以上により、ｉループの処理は、終了する(ステップ４０７)。このような処理をｄＴ１〜ｄＴｎについて行うことで、ｄＴ１〜ｄＴｎの全てを反映したｄＭＱＴが得られる。そして、ステージングテーブルに記憶されたｄＭＱＴは、既存技術を用いてＭＱＴに反映される。
【００４２】
ここで、以上述べた処理のイメージを説明する。尚、ここでは、Ｔ１、Ｔ２、Ｔ３からｄＭＱＴを生成する場合を考える。まず、トリガーの機能を用いて差分データ処理を行った場合について説明する。図６(ａ)に、この場合の本実施の形態の処理に対する比較例として、プロセスフラグを使用しなかった場合について示す。この例においては、ｄＴ１に関するｄＭＱＴを演算している間にＴ１が更新されると、トリガーの機能が、ｄＴ１に差分データを挿入しようとする。しかしながら、ｄＭＱＴの演算にｄＴ１が使用されているためブロックされ、Ｔ１の更新は、ｄＭＱＴの演算が終わるまで、待たされることになる。
【００４３】
これに対し、図６(ｂ)に、プロセスフラグを使用した場合について示す。この例において、ｄＴ１に関するｄＭＱＴの演算は、ｄＴ１のプロセスフラグが「１」のデータを用いて行われる。従って、Ｔ１の差分データは、プロセスフラグを「０」に設定することで、ｄＭＱＴの演算処理中でもブロックされることなく挿入できる。尚、この場合は、テーブルの更新を管理する領域である時点までの更新とその時点以降の更新とを区別して管理する方法の一例として、プロセスフラグを用いた管理方法を採用している。
【００４４】
また、トランザクションログを用いて差分データ処理を行った場合について説明する。図７に、この場合の本実施の形態の処理イメージを示す。この例においても、ｄＴ１に関するｄＭＱＴの演算は、ｄＴ１のプロセスフラグが「１」のデータを用いて行われる。従って、Ｔ１の差分データは、プロセスフラグを「０」に設定することで、ｄＭＱＴの演算処理中でもブロックされることなく挿入できる。尚、この場合も、テーブルの更新を管理する領域である時点までの更新とその時点以降の更新とを区別して管理する方法の一例として、プロセスフラグを用いた管理方法を採用している。或いは、トランザクションログをキャプチャする機能をｄＭＱＴの演算処理中は停止させるようにしてもよい。つまり、定期的にトランザクションログをチェックし、差分データをｄＴ１に挿入するキャプチャの動作を止めることで、ｄＭＱＴの演算処理中であってもＴ１を更新することが可能になる。尚、この場合は、テーブルの更新を管理する領域においてある時点以降の更新を管理する処理の一例として、トランザクションログをキャプチャする処理を採用している。
【００４５】
次に、「Ｏｎｅ  ｂｙ  ｏｎｅ」における動作について説明する。図８は、このときの差分演算処理部１４の動作を示したフローチャートである。差分演算処理部１４では、まず、制御部１４１が、Ｔ１〜Ｔｎの中から１つのベーステーブルを指定し、これをＴｉとする。そして、このＴｉについて、ｉループの処理を開始する(ステップ４５１)。
【００４６】
そして、ｉループでは、ｄＴｉに関するＭＱＴの差分を演算する。即ち、まず、制御部１４１が、その時点でｄＴｉに存在する全てのデータのプロセスフラグを「１」にし、演算処理中であることを示す状態にしておく(ステップ４５２)。また、図示しない順序制御部に対し、ｄＴｉに関するｄＭＱＴを演算する際のＴｊ(ｊ＝１〜ｎ、ｊ≠ｉ)の参照順序の見積もりを要求しておく(ステップ４５３)。尚、この順序制御部による参照順序の見積もりは、ＤＢのコンパイラの機能で行うことができる。その後、制御部１４１は、ｊ＝１〜ｎ−１について、ｊループの処理を開始する(ステップ４５４)。このとき、制御部１４１は、１回のｊループの処理が１つのトランザクションで実行されるよう制御する。
【００４７】
そして、ｊループでは、ｄＴｉと他の１つのテーブルとから一時テーブルを演算する処理、一時テーブルと他の１つのテーブルとから他の一時テーブルを演算する処理、一時テーブルと他の１つのテーブルとからｄＭＱＴを演算する処理のいずれかを行う。即ち、まず、制御部１４１が、順序制御部による見積もりの結果に基づいて、次に参照すべきテーブルＴｋを特定する(ステップ４５５)。ここで、ｋは、１〜ｎのうちのｉ以外の整数である。また、この処理を開始する時点での最新の状態でＴｋをロックする(ステップ４５６)。
【００４８】
次に、制御部１４１は、ｊ＝１であるかどうかを判定する(ステップ４５７)。即ち、今回の処理がｊループにおける最初の処理であるかどうかを判定する。ここで、ｊ＝１であると判定された場合は、制御部１４１による制御の下、生成部１４２が、ｄＴｉと(Ｔｋ−ｄＴｋ)とに基づく一時テーブルｄＴｉＭ１を保存する(ステップ４５８)。ここで、ｄＭＱＴの演算には、ｄＴｉのデータのうち、プロセスフラグが「１」のもののみを用いる。この場合、Ｔｋはロックされているが、Ｔｉはロックされていないので、ｄＴｉに関するｄＭＱＴの演算中にＴｉが更新され、ｄＴｉに差分データが挿入されてくることがある。しかしながら、その差分データのプロセスフラグは「０」となっているので、これは今回のｄＭＱＴの演算には用いられず、次回のｄＭＱＴの演算に用いられる。一方、ステップ４５７でｊ＝１でないと判定された場合、制御部１４１は、ｊ＝ｎ−１であるかどうかを判定する(ステップ４５９)。即ち、今回の処理がｊループにおける最後の処理であるかどうかを判定する。
【００４９】
ここで、ｊ＝ｎ−１でないと判定された場合は、制御部１４１による制御の下、生成部１４２が、ｄＴｉＭｊ−１と(Ｔｋ−ｄＴｋ)とに基づく一時テーブルｄＴｉＭｊを保存する(ステップ４６０)。尚、この場合の演算には、一時テーブルのデータが用いられ、ｄＴｉのデータは用いられないので、ｄＴｉに差分データを挿入することはできる。つまり、Ｔｉは更新可能な状態になっている。一方、ステップ４５９でｊ＝ｎ−１であると判定された場合、制御部１４１による制御の下、生成部１４２は、ｄＴｉＭｎ−２と(Ｔｋ−ｄＴｋ)とからｄＭＱＴを生成し、これをステージングテーブルに追加する(ステップ４６１)。その後、制御部１４１は、Ｔｋを参照するトランザクションをコミットし、処理を確定させる(ステップ４６２)。これにより、ステップ４５６でなされたＴｋのロックは解除される。以上により、ｊループの処理は、終了する(ステップ４６３)。
【００５０】
このようにしてｄＭＱＴがステージングテーブルに追加されると、制御部１４１は、ｄＴｉのデータのうち、プロセスフラグが「１」のデータを削除する(ステップ４６４)。つまり、ｄＭＱＴの演算に使用したデータを削除する。そして、制御部１４１は、最後に、コミットし、処理を確定させる(ステップ４６５)。以上により、ｉループの処理は、終了する(ステップ４６６)。このような処理をｄＴ１〜ｄＴｎについて行うことで、ｄＴ１〜ｄＴｎの全てを反映したｄＭＱＴが得られる。そして、ステージングテーブルに追加されたｄＭＱＴは、既存技術を用いてＭＱＴに反映される。
【００５１】
ここで、以上述べた処理のイメージを説明する。尚、ここでは、Ｔ１、Ｔ２、Ｔ３からｄＭＱＴを生成する場合を考える。また、この「Ｏｎｅ  ｂｙ  ｏｎｅ」においても、トリガーの機能を用いて差分データ処理を行う場合と、トランザクションログを用いて差分データ処理を行う場合とがあるが、ここでは、トリガーの機能を用いる場合について説明する。図９に、この場合の本実施の形態の処理イメージを示す。この例において、ｄＴ１に関するｄＭＱＴの演算は、ｄＴ１のプロセスフラグが「１」のデータを用いて行われる。従って、Ｔ１の差分データは、プロセスフラグを「０」に設定することで、ｄＭＱＴの演算処理中でもブロックされることなく挿入できる。そして、(１)で示したように、まず、ｄＴ１、Ｔ２、ｄＴ２を用いて中間結果(一時テーブル)を生成する。その後、(２)で示したように、この中間結果、Ｔ３、ｄＴ３を用いてｄＭＱＴを生成する。
【００５２】
以上、「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」及び「Ｏｎｅ  ｂｙ  ｏｎｅ」における動作について説明した。この動作により、ｉループにおいては、ＴｉをロックすることなくｄＭＱＴを生成することが可能となった。しかしながら、これらの処理には、更なる改善が望まれる点もある。即ち、ｄＴ１に関するｄＭＱＴの演算中に発生したＴ１の差分データは次回の処理に持ち越される。一方で、ｄＴ１に関するｄＭＱＴの演算終了後、ｄＴ２に関するｄＭＱＴの演算が行われるため、ほぼ同時に発生したＴ２の差分データが、次回の処理に持ち越されずに、今回の処理でｄＭＱＴに反映されるという現象が起こり得るということである。
【００５３】
図１０は、このような現象が起こる仕組みを時間の流れに沿って示したものである。ここでは、Ｔ１とＴ２とからＭＱＴを演算する例で示している。まず、(１)でＴ１にレコードが追加されたとする。すると、このレコードの追加に相当する差分データがｄＴ１に挿入される。このとき、差分データのプロセスフラグは「０」に設定される。尚、図では、この差分データを斜線で示している。この状態で、図示するように、ｄＴ１に関するｄＭＱＴの演算が開始したとする。この場合、ｄＴ１の全ての差分データのプロセスフラグは「１」となる。そして、これがｄＭＱＴの演算対象となる。また、Ｔ２はロックされ、更新できない状態になる。
【００５４】
その後、(２)でＴ１に新たなレコードが追加されたとする。すると、このレコードの追加に相当する差分データがｄＴ１に挿入される。このとき、差分データのプロセスフラグは「０」に設定される。そして、ここではプロセスフラグが「１」の差分データのみがｄＭＱＴの演算対象となっているので、この差分データは演算対象外となる。尚、図では、この差分データを淡い網掛けで示している。その後、（３）でＴ２に新たなレコードが追加されたとする。このとき、Ｔ２はロックされているので、ロックの解除待ちとなる。この状態で、図示するように、ｄＴ１に関するｄＭＱＴの演算が終了したとする。この場合、図示するように、ｄＭＱＴの演算に使用したデータがｄＴ１から削除される。また、この時点で、Ｔ２のロックは解除され、Ｔ２の更新が可能となり、ロック待ちのレコードが追加される。
【００５５】
すると、このレコードの追加に相当する差分データがｄＴ２に挿入される。このとき、差分データのプロセスフラグは「０」に設定される。尚、図では、この差分データを濃い網掛けで示している。この状態で、図示するように、ｄＴ２に関するｄＭＱＴの演算が開始したとする。この場合、ｄＴ２の全ての差分データのプロセスフラグは「１」となる。そして、これがｄＭＱＴの演算対象となる。
【００５６】
即ち、この例では、(２)におけるＴ１へのレコードの追加と、(３)におけるＴ２へのレコードの追加とがほぼ同じタイミングで行われているにも関わらず、後者はｄＭＱＴの演算対象となり、前者はｄＭＱＴの演算対象とはなっていない。
【００５７】
但し、典型的なＯＬＡＰでは、１つのファクトテーブルと複数のディメンションテーブルとが設けられ、通常、ファクトテーブルが更新される。その場合、このような現象は生じない。また、業務によっては、このような現象が許容される場合もある。
【００５８】
これに対し、このような現象が許容されないのであれば、次のような方法で対処すればよい。第１の方法は、上記の方法でｄＭＱＴを演算した後、いずれかのベーステーブルに差分データが存在すれば、全てのベーステーブルをロックして再度演算する、というものである。例えば、１０分間隔でｄＭＱＴを演算する場合を考える。この場合、ｄＭＱＴの演算に２０秒かかったとする。演算終了後、差分テーブルに２０秒の間に溜まったデータが存在すれば、全てのベーステーブルをロックして再度ｄＭＱＴを演算する。この場合、２０秒の間に溜まった少量のデータを処理すればよいので、短時間(例えば、５秒)で処理は終了する。
【００５９】
また、第２の方法は、上記の方法でｄＭＱＴを演算した後、再度同じ手法でｄＭＱＴを演算し、その後、いずれかのベーステーブルに差分データが存在すれば、全てのベーステーブルをロックして演算する、というものである。例えば、１０分間隔でｄＭＱＴを演算する場合を考える。この場合、ｄＭＱＴの演算に２０秒かかったとする。演算終了後、差分テーブルに２０秒の間に溜まったデータが存在すれば、再度同じ手法で演算する。この場合、２０秒の間に溜まった少量のデータを処理すればよいので、短時間(例えば、５秒)で処理は終了する。また、この演算終了後、差分テーブルに５秒の間に溜まったデータが存在すれば、全てのベーステーブルをロックして再度ｄＭＱＴを演算する。この場合、５秒の間に溜まった少量のデータを処理すればよいので、更に短時間(例えば、２秒)で処理は終了する。
【００６０】
この処理は、具体的には以下のようなことを意図している。例えば、１０分間隔でｄＭＱＴの演算が行われる場合において、ほぼ同じタイミングで、地域テーブルに地域情報が、製品テーブルに製品情報が、更に追加された地域と既存製品に関する売り上げ情報、既存地域と追加された製品に関する売り上げ情報が順に追加されたものとする。このとき、図１０で説明したような現象が生じ、既存地域と追加された製品に関する売り上げ情報の追加が先にｄＭＱＴに反映され、追加された地域と既存製品に関する売り上げ情報が１０分後にｄＭＱＴに反映されたのでは、好ましくない場合もある。そこで、追加された地域と既存製品に関する売り上げ情報の追加についても今回のｄＭＱＴ演算で拾い上げてｄＭＱＴに反映させているのである。
【００６１】
次に、本実施の形態を適用可能なコンピュータシステムの具体的な構成例について説明する。図１１は、かかるコンピュータシステムの具体的な構成例を示した図である。このコンピュータシステムは、ローカルＤＢ１１ａと、リモートＤＢ１１ｂ及び１１ｃとから構成される。このうち、ローカルＤＢ１１ａには、ＭＱＴに関連付けられているＳＥＬＥＣＴ文が参照するテーブル(ベーステーブル)Ｎ１及びその差分データを保持するテーブル(差分テーブル)ｄＮ１と、ベーステーブルＮ２及びこれに対する差分テーブルｄＮ２と、ベーステーブルＮ３及びこれに対する差分テーブルｄＴ３と、ベーステーブルＴ４及びこれに対する差分テーブルｄＴ４とが記憶されている。
【００６２】
ここで、Ｔｘは実テーブルを表し、Ｎｘは仮想テーブルを表す。この仮想テーブルは、リモートＤＢに存在する実テーブルを参照するために、ローカルＤＢに仮想的に定義されたテーブルである。仮想テーブルは、ニックネームによって参照することで、実テーブルと同様に扱うことができる。具体的には、Ｎ１は実テーブルＴ１に対する仮想テーブル、Ｎ２は実テーブルＴ２に対する仮想テーブル、Ｎ３は実テーブルＴ３に対する仮想テーブルである。また、リモートＤＢ１１ｂ及び１１ｃではＴｉに対する差分テーブルｄＴｉが作成されており、ｄＮｉはその実テーブルｄＴｉに対する仮想テーブルを表している(ｉ＝１，２，３)。
【００６３】
更に、このコンピュータシステムにおいては、ローカルＤＢ１１ａにステージングテーブルが設けられている。このステージングテーブルは、ＭＱＴの差分を保持するテーブルである。また、このコンピュータシステムは、Ｔ１の差分データをｄＴ１に挿入する処理、Ｔ２の差分データをｄＴ２に挿入する処理、Ｔ３の差分データをｄＴ３に挿入する処理、Ｔ４の差分データをｄＴ４に挿入する処理をそれぞれ行う差分データ処理部１３ａ、１３ｂ、１３ｃ、１３ｄを備えている。更にまた、差分テーブル等を利用してＭＱＴの差分を演算し、演算結果をステージングテーブルに挿入する差分演算処理部１４を備えている。
【００６４】
尚、このコンピュータシステムにおいても、差分テーブルは、前述した通り、ＭＱＴの差分を演算する際に利用するベーステーブルの列の他に、以下の列を持つ。
・オペレーションタイプ
データが追加されたのか削除されたのかを示すフラグであり、「１」が追加を、「−１」が削除を示す。
・プロセスフラグ
データが演算処理中なのか未処理なのかを表すフラグであり、「１」が演算処理中を、「０」が未処理を表す。
【００６５】
また、ステージングテーブルは、ＭＱＴに関連付けられているＳＥＬＥＣＴ文の構造により、以下の２種類に分けられる。
・集約ＭＱＴのステージングテーブル
ＳＥＬＥＣＴ文がＳＵＭ()、ＣＯＵＮＴ()等の集約関数を使用している場合のステージングテーブルである。テーブルの列は、ＭＱＴと同じ列を持つ。
・ジョインＭＱＴのステージングテーブル
ＳＥＬＥＣＴ文が集約関数を使用していない場合のステージングテーブルである。テーブルの列は、ＭＱＴと同じ列の他、データが追加されたのか削除されたのかを示す列を持つ。つまり、差分テーブルのオペレーションタイプと同様であり、「１」が追加を、「−１」が削除を表す。
【００６６】
次いで、図１１に示した構成例における処理の流れについて説明する。この構成例で示したＭＱＴは、Ｎ１、Ｎ２、Ｎ３、Ｔ４のテーブルを参照しているＳＥＬＥＣＴ文の結果を保持しており、以下の式で表されるものとする。
【００６７】
【数５】
2008146264.tif 000007
【００６８】
また、ここでは、Ｎ１、Ｎ２、Ｎ３、Ｔ４の差分テーブルをｄＮ１、ｄＮ２、ｄＮ３、ｄＴ４と表記するものとする。まず、「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」の場合の処理の流れを図５のフローチャートに沿って説明する。この構成例では、まず、ｉ＝１に対するｉループで、Ｎ１の差分データに関するＭＱＴの差分を演算する。即ち、ステップ４０２で、ｄＮ１のプロセスフラグを「１」にし、演算処理中であることを示す。そして、ステップ４０３で、Ｎ２、Ｎ３、Ｔ４をロックする。その後、ステップ４０４で、ｄＮ１と、(Ｎ２−ｄＮ２)と、(Ｎ３−ｄＮ３)と、(Ｔ４−ｄＴ４)とから、ｄＭＱＴを求め、これをステージングテーブルに挿入する。但し、ｄＮ１については、プロセスフラグが「１」のデータを対象とする。そして、最後に、ステップ４０５で、ｄＮ１のプロセスフラグが「１」のデータを削除し、ステップ４０６で、コミットする。
【００６９】
次に、ｉ＝２に対するｉループで、Ｎ２の差分データに関するＭＱＴの差分を演算する。その演算処理はＮ１の場合と同様である。但し、この場合は、Ｎ１、Ｎ３、Ｔ４をロックし、(Ｎ１−ｄＮ１)と、ｄＮ２と、(Ｎ３−ｄＮ３)と、(Ｔ４−ｄＴ４)とから、ｄＭＱＴを求め、ステージングテーブルに挿入する。更に、ｉ＝３に対するｉループで、Ｎ３の差分データに関するＭＱＴの差分を演算する。その演算処理もＮ１の場合と同様である。但し、この場合は、Ｎ１、Ｎ２、Ｔ４をロックし、(Ｎ１−ｄＮ１)と、(Ｎ２−ｄＮ２)と、ｄＮ３と、(Ｔ４−ｄＴ４)とから、ｄＭＱＴを求め、ステージングテーブルに挿入する。更にまた、ｉ＝４に対するｉループで、Ｔ４の差分データに関するＭＱＴの差分を演算する。その演算処理もＮ１の場合と同様である。但し、この場合は、Ｎ１、Ｎ２、Ｎ３をロックし、(Ｎ１−ｄＮ１)と、(Ｎ２−ｄＮ２)と、(Ｎ３−ｄＮ３)と、ｄＴ４とから、ｄＭＱＴを求め、ステージングテーブルに挿入する。
【００７０】
次に、「Ｏｎｅ  ｂｙ  ｏｎｅ」の場合の処理の流れを図８のフローチャートに沿って説明する。尚、ここでは、ｄＭＱＴを演算する際に、Ｎ１、Ｎ２、Ｎ３、Ｔ４の順でテーブルを参照するものとする。この構成例では、まず、ｉ＝１に対するｉループで、Ｎ１の差分データに関するＭＱＴの差分を演算する。即ち、ステップ４５２で、ｄＮ１のプロセスフラグを「１」にし、演算処理中であることを示す。そして、ｊ＝１に対するｊループを開始し、ステップ４５６で、Ｎ２をロックする。その後、ステップ４５８で、ｄＮ１と(Ｎ２−ｄＮ２)とを用いて演算を行い、結果を一時テーブルｄＮ１Ｍ１に挿入する。但し、ｄＮ１については、プロセスフラグが「１」のデータを対象とする。そして、最後に、ステップ４６２で、コミットする。また、ｊ＝２に対するjループを開始し、ステップ４５６で、Ｎ３をロックする。その後、ステップ４５８で、ｄＮ１Ｍ１と(Ｎ３−ｄＮ３)とを用いて演算を行い、結果を一時テーブルｄＮ１Ｍ２に挿入する。そして、最後に、ステップ４６２で、コミットする。更に、ｊ＝３に対するjループを開始し、ステップ４５６で、Ｔ４をロックする。その後、ステップ４５８で、ｄＮ１Ｍ２と(Ｔ４−ｄＴ４)とを用いて演算を行い、結果をステージングテーブルに挿入する。そして、最後に、ステップ４６２で、コミットする。その後、ステップ４６４で、ｄＮ１のプロセスフラグが「１」のデータを削除し、ステップ４６５で、コミットする。
【００７１】
次に、ｉ＝２に対するｉループで、Ｎ２の差分データに関するＭＱＴの差分を演算する。その演算処理はＮ１の場合と同様である。また、ｉ＝３に対するｉループで、Ｎ３の差分データに関するＭＱＴの差分を演算する。その演算処理もＮ１の場合と同様である。更に、ｉ＝４に対するｉループで、Ｔ４の差分データに関するＭＱＴの差分を演算する。その演算処理もＮ１の場合と同様である。
【００７２】
以下、ｄＭＱＴを求めるためのＳＱＬの例を説明する。図１２−１〜２は、「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」における集約ＭＱＴの演算例を示したものである。Ｔ１、Ｔ２、Ｔ３を参照するＳＥＬＥＣＴ文の結果を保持する例を用いて、Ｔ１の差分データに関するＭＱＴの差分の演算について説明する。図１２−１(ａ)に、ＭＱＴに関連付けられているＳＥＬＥＣＴ文の例を示す。ここで、ｄＴ１に関するｄＭＱＴを得る式を展開すると、以下のようになり、これらの結果をステージングテーブルに挿入してゆく。尚、Ｔ１、Ｔ２、Ｔ３の差分データを保持する差分テーブルをｄＴ１、ｄＴ２、ｄＴ３とする。
【００７３】
【数６】
2008146264.tif 000008
【００７４】
この展開された式を構成するテーブルのうち、第１項のテーブルは、図１２−１(ｂ)に示したＳＱＬ文によって得ることができる。このＳＱＬ文は、ＭＱＴに関連付けられたＳＥＬＥＣＴ文を次のような規則によって変換したものである。
・ＭＱＴに関連付けられたＳＥＬＥＣＴ文のＴ１をｄＴ１に置き換える。
・ＳＵＭについては、オペレーションタイプが「１」(追加)のデータはそのまま加算し、オペレーションタイプが「−１」(削除)のデータは減算する(「−１」倍する)。
・ＣＯＵＮＴやＣＯＵＮＴ＿ＢＩＧは、オペレーションタイプが「１」(追加)のデータは「１」を加算すると考え、オペレーションタイプが「−１」(削除)のデータは、「１」を減算すると考える。ＣＯＵＮＴ＿ＢＩＧのデータタイプはＤＥＣＩＭＡＬなので、ＤＥＣＩＭＡＬ関数を使用して、ＤＥＣＩＭＡＬ型にする。
・差分テーブルで処理するデータはプロセスフラグが「１」のものなので、それを条件に加える。
【００７５】
上記の展開された式を構成するテーブルのうち、第２項(マイナスを含む)のテーブルは、図１２−２(ｃ)に示したＳＱＬ文によって得ることができる。このＳＱＬ文は、ＭＱＴに関連付けられたＳＥＬＥＣＴ文を次のような規則によって変換したものである。
・ＭＱＴに関連付けられたＳＥＬＥＣＴ文のＴ１をｄＴ１に、Ｔ２をｄＴ２に置き換える。
・差分テーブルが２つ存在し、それぞれがオペレーションタイプを保持する。従って、２つのオペレーションタイプの積が正であれば加算し、負であれば減算する。更にこの結果を減算する必要があるので、加算と減算を逆にする。
・その他は、差分テーブルが１つの場合と同じ考え方で処理する。
また、上記の展開された式を構成するテーブルのうち、第３項(マイナスを含む)のテーブルも、同様の規則で変換したＳＱＬ文によって得ることができる。
【００７６】
上記の展開された式を構成するテーブルのうち、第４項のテーブルは、図１２−２(ｄ)に示したＳＱＬ文によって得ることができる。この場合、３つの差分テーブルを使用するが、１つの差分テーブルを使用する場合や２つの差分テーブルを使用する場合と同様の変換を行うことで、このＳＱＬ文も得ることができる。
【００７７】
図１３−１〜２は、「Ｏｎｅ  ｂｙ  ｏｎｅ」における集約ＭＱＴの演算例を示したものである。「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」と同様の例を用いて、Ｔ１の差分データに関するＭＱＴの差分の演算について説明する。図１３−１(ａ)に、ＭＱＴに関連付けられているＳＥＬＥＣＴ文の例を示す。ここで、ｄＴ１に関するｄＭＱＴを得る式を展開すると、以下のようになる。
【００７８】
【数７】
2008146264.tif 000009
【００７９】
この場合、ｄＭＱＴを求める方法としては、ｄＴ１とＴ２とに基づく一時テーブルをｄＴ１Ｍ１に格納した後、ｄＴ１Ｍ１とＴ３とに基づいて求める方法と、ｄＴ１とＴ３とに基づく一時テーブルをｄＴ１Ｍ１に格納した後、ｄＴ１Ｍ１とＴ２とに基づいて求める方法とがある。しかし、本実施の形態は、どの順番で処理するかを限定するものではないので、ここではｄＴ１とＴ２とに基づく演算を先に行う方法を説明する。
【００８０】
ｄＴ１とＴ２とに基づく一時テーブルは、図１３−１(ｂ)に示したＳＱＬ文によって得ることができる。ここで、このＳＱＬ文は、ＭＱＴに関連付けられたＳＥＬＥＣＴ文を次のような規則によって変換したものである。
・ＭＱＴに関連付けられたＳＥＬＥＣＴ文からＴ１とＴ２に関するものを抜き出す。ＣＯＵＮＴやＣＯＵＮＴ＿ＢＩＧもＴ１とＴ２に関するものであり、これも残す。
・条件等において、Ｔ１とＴ２のカラムが他のテーブルのカラムと使用されるものは、そのＴ１とＴ２のカラムを投影(プロジェクション)し、ＧＲＯＵＰ  ＢＹに追加する。この例では、Ｔ１．Ｃ７＝Ｔ３．Ｃ７が該当する。従って、この条件を削除し、Ｔ１．Ｃ７を投影し、ＧＲＯＵＰ  ＢＹに追加する。また、Ｔ１．ＯＰＥＲＡＴＩＯＮＴＹＰＥも、Ｔ３．Ｃ６のＳＵＭを得る際に使用しているので、これも投影し、ＧＲＯＵＰ  ＢＹに追加する。
・その他は、「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」の場合と同じ考え方で処理する。
【００８１】
ｄＴ１Ｍ１とＴ３とに基づくテーブルは、図１３−２(ｃ)に示したＳＱＬ文によって得ることができる。このＳＱＬ文は、ＭＱＴに関連付けられたＳＥＬＥＣＴ文を次のような規則によって変換したものである。
・ＭＱＴに関連付けられたＳＥＬＥＣＴ文からｄＴ１Ｍ１(Ｔ１とＴ２)とＴ３に関するものを抜き出す。
・前述したｄＴ１とＴ２に基づく処理で評価が終わっているものについては削除する。この例では、ＷＨＥＲＥ節のＴ１．Ｃ７＝Ｔ２．Ｃ７とＴ１．ＰＲＯＣＥＳＳＦＬＡＧ＝１を削除する。また、Ｓ１とＳ２とＣに関するＴ１.ＯＰＥＲＡＴＩＯＮＴＹＰＥの評価も終わっているので、Ｔ１．ＯＰＥＲＡＴＩＯＮＴＹＰＥの評価はせず、ＳＵＭのみ行う。
・Ｔ１とＴ２をｄＴ１Ｍ１にする。
・その他は、前述したｄＴ１とＴ２に基づく処理と同じ考え方で処理する。
【００８２】
図１４は、「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」におけるジョインＭＱＴの演算例を示したものである。Ｔ１、Ｔ２、Ｔ３を参照するＳＥＬＥＣＴ文の結果を保持する例を用いて、Ｔ１の差分データに関するＭＱＴの差分の演算について説明する。図１４(ａ)に、ＭＱＴに関連付けられているＳＥＬＥＣＴ文の例を示す。ここで、ｄＴ１に関するｄＭＱＴを得る式を展開すると、以下のようになり、これらの結果をステージングテーブルに挿入してゆく。尚、Ｔ１、Ｔ２、Ｔ３の差分データを保持する差分テーブルをｄＴ１、ｄＴ２、ｄＴ３とする。
【００８３】
【数８】
2008146264.tif 000010
【００８４】
この展開された式を構成するテーブルのうち、第１項のテーブルは、図１４(ｂ)に示したＳＱＬ文によって得ることができる。このＳＱＬ文は、ＭＱＴに関連付けられたＳＥＬＥＣＴ文を次のような規則によって変換したものである。
・ＭＱＴに関連付けられたＳＥＬＥＣＴ文のＴ１をｄＴ１に置き換える。
・ジョインＭＱＴのステージングテーブルは差分テーブルと同様、オペレーションタイプを保持する。差分テーブルを１つ使用する場合は、差分テーブルのオペレーションタイプの値をステージングテーブルのオペレーションタイプの値とする。オペレーションタイプがステージングテーブルの最後の列に定義されているとすると、図１４(ｂ)の演算式が成り立つ。
・差分テーブルで処理するデータはプロセスフラグが「１」のものなので、それを条件に加える。
【００８５】
上記の展開された式を構成するテーブルのうち、第２項(マイナスを含む)のテーブルは、図１４(ｃ)に示したＳＱＬ文によって得ることができる。このＳＱＬ文は、ＭＱＴに関連付けられたＳＥＬＥＣＴ文を次のような規則によって変換したものである。
・ＭＱＴに関連付けられたＳＥＬＥＣＴ文のＴ１をｄＴ１に、Ｔ２をｄＴ２に置き換える。
・集約ＭＱＴの場合と同様の考え方で、ステージングテーブルのオペレーションタイプの値は、ｄＴ１とｄＴ２のオペレーションタイプの積が正であれば「１」(追加)、負であれば「−１」(削除)とする。更にこの結果を減算する必要があるので、加算と減算を逆にする。
・その他は、差分テーブルが１つの場合と同じ考え方で処理する。
また、上記の展開された式を構成するテーブルのうち、第３項(マイナスを含む)のテーブルも、同様の規則で変換したＳＱＬ文によって得ることができる。
【００８６】
上記の展開された式を構成するテーブルのうち、第４項のテーブルは、図１４(ｄ)に示したＳＱＬ文によって得ることができる。この場合、３つの差分テーブルを使用するが、１つの差分テーブルを使用する場合や２つの差分テーブルを使用する場合と同様の変換を行うことで、このＳＱＬ文も得ることができる。
【００８７】
図１５は、「Ｏｎｅ  ｂｙ  ｏｎｅ」におけるジョインＭＱＴの演算例を示したものである。「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」と同様の例を用いて、Ｔ１の差分データに関するＭＱＴの差分の演算について説明する。図１５(ａ)に、ＭＱＴに関連付けられているＳＥＬＥＣＴ文の例を示す。ここで、ｄＴ１に関するｄＭＱＴを得る式を展開すると、以下のようになる。
【００８８】
【数９】
2008146264.tif 000011
【００８９】
この場合、ｄＭＱＴを求める方法としては、ｄＴ１とＴ２とに基づく一時テーブルをｄＴ１Ｍ１に格納した後、ｄＴ１Ｍ１とＴ３とに基づいて求める方法と、ｄＴ１とＴ３とに基づく一時テーブルをｄＴ１Ｍ１に格納した後、ｄＴ１Ｍ１とＴ２とに基づいて求める方法とがある。しかし、本実施の形態は、どの順番で処理するかを限定するものではないので、ここではｄＴ１とＴ２とに基づく演算を先に行う方法を説明する。
【００９０】
ｄＴ１とＴ２とに基づく一時テーブルは、図１５(ｂ)に示したＳＱＬ文によって得ることができる。ここで、このＳＱＬ文は、ＭＱＴに関連付けられたＳＥＬＥＣＴ文を次のような規則によって変換したものである。
・ＭＱＴに関連付けられたＳＥＬＥＣＴ文からＴ１とＴ２に関するものを抜き出す。
・条件等において、Ｔ１とＴ２のカラムが他のテーブルのカラムと使用されているものは、そのＴ１とＴ２のカラムを投影(プロジェクション)する。この例では、Ｔ１．Ｃ４＝Ｔ３．Ｃ４が該当する。従って、この条件を削除し、Ｔ１．Ｃ４を投影する。
・その他は、「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」の場合と同じ考え方で処理する。
【００９１】
ｄＴ１Ｍ１とＴ３とに基づくテーブルは、図１５(ｃ)に示したＳＱＬ文によって得ることができる。このＳＱＬ文は、ＭＱＴに関連付けられたＳＥＬＥＣＴ文を次のような規則によって変換したものである。
・ＭＱＴに関連付けられたＳＥＬＥＣＴ文からｄＴ１Ｍ１(Ｔ１とＴ２)とＴ３に関するものを抜き出す。
・前述したｄＴ１とＴ２に基づく処理で評価が終わっているものについては削除する。この例では、ＷＨＥＲＥ節のＴ１．Ｃ４＝Ｔ２．Ｃ４とＴ１．ＰＲＯＣＥＳＳＦＬＡＧ＝１を削除する。
・Ｔ１とＴ２をｄＴ１Ｍ１にする。
・その他は、前述したｄＴ１とＴ２に基づく処理と同じ考え方で処理する。
【００９２】
次いで、本実施の形態によるｄＭＱＴの演算時間やテーブルのロック時間を計測した実験結果について説明する。図１６−１〜２は、集約ＭＱＴを演算する場合の実験結果を示したものである。図１６−１(ａ)に、ＤＢとテーブルとの対応を示す。この実験では、このように複数のテーブルが複数のＤＢに分散配置された環境を用いた。また、集約ＭＱＴは、連合サーバ(Federation Server)に作成した。尚、図では、集約ＭＱＴが参照しているテーブルに下線を付して示している。
【００９３】
かかる環境において、今回の実験では、テーブル「ＯＲＤＥＲＳ」において３００行を、テーブル「ＬＩＮＥＩＴＥＭ」において１１５９行を、追加又は削除し、その後、ＭＱＴをリフレッシュした。これにより、ｄＭＱＴの演算時間、テーブル「ＯＲＤＥＲＳ」のロック時間、テーブル「ＬＩＮＥＩＴＥＭ」のロック時間は、図１６−１(ｂ)に示すようなものとなった。まず、「Ｅａｃｈ  ｄｅｌｔａ  ａｔ  ｏｎｃｅ」における「ＯＲＤＥＲＳのロック」に対する「データの追加」欄は４．０秒となっている。現状では、６．３秒ロックする必要があるので、本実施の形態により、テーブルに必要なロックの時間が短くなった。また、「Ｏｎｅ  ｂｙ  ｏｎｅ」における「ＯＲＤＥＲＳのロック」欄は０．１６秒となっており、現状よりもロック時間を短くすることができた。尚、今回の実験に使用した集約ＭＱＴのＳＥＬＥＣＴ文を図１６−２(ｃ)に示す。
【００９４】
図１７−１〜２は、ジョインＭＱＴを演算する場合の実験結果を示したものである。図１７−１(ａ)に、ＤＢとテーブルとの対応を示す。この実験では、このように複数のテーブルが複数のＤＢに分散配置された環境を用いた。また、ジョインＭＱＴは、連合サーバ(Federation Server)に作成した。尚、図では、ジョインＭＱＴが参照しているテーブルに下線を付して示している。
【００９５】
かかる環境において、今回の実験では、テーブル「ＯＲＤＥＲＳ」において３００行を、テーブル「ＬＩＮＥＩＴＥＭ」において１１５９行を、追加又は削除し、その後、ＭＱＴをリフレッシュした。これにより、ｄＭＱＴの演算時間、テーブル「ＯＲＤＥＲＳ」のロック時間、テーブル「ＬＩＮＥＩＴＥＭ」のロック時間は、図１７−１(ｂ)に示すようなものとなった。尚、今回の実験に使用した集約ＭＱＴのＳＥＬＥＣＴ文を図１７−２(ｃ)に示す。
【００９６】
最後に、本実施の形態を適用するのに好適なコンピュータのハードウェア構成について説明する。図１８は、このようなコンピュータのハードウェア構成の一例を示した図である。図示するように、コンピュータは、演算手段であるＣＰＵ(Central Processing Unit)１０ａと、Ｍ/Ｂ(マザーボード)チップセット１０ｂを介してＣＰＵ１０ａに接続されたメインメモリ１０ｃと、同じくＭ/Ｂチップセット１０ｂを介してＣＰＵ１０ａに接続された表示機構１０ｄとを備える。また、Ｍ/Ｂチップセット１０ｂには、ブリッジ回路１０ｅを介して、ネットワークインターフェイス１０ｆと、磁気ディスク装置(ＨＤＤ)１０ｇと、音声機構１０ｈと、キーボード/マウス１０ｉと、フレキシブルディスクドライブ１０ｊとが接続されている。
【００９７】
尚、図１８において、各構成要素は、バスを介して接続される。例えば、ＣＰＵ１０ａとＭ/Ｂチップセット１０ｂの間や、Ｍ/Ｂチップセット１０ｂとメインメモリ１０ｃの間は、ＣＰＵバスを介して接続される。また、Ｍ/Ｂチップセット１０ｂと表示機構１０ｄとの間は、ＡＧＰ(Accelerated Graphics Port)を介して接続されてもよいが、表示機構１０ｄがＰＣＩ Ｅｘｐｒｅｓｓ対応のビデオカードを含む場合、Ｍ/Ｂチップセット１０ｂとこのビデオカードの間は、ＰＣＩ Ｅｘｐｒｅｓｓ(ＰＣＩｅ)バスを介して接続される。また、ブリッジ回路１０ｅと接続する場合、ネットワークインターフェイス１０ｆについては、例えば、ＰＣＩ Ｅｘｐｒｅｓｓを用いることができる。また、磁気ディスク装置１０ｇについては、例えば、シリアルＡＴＡ(AT Attachment)、パラレル転送のＡＴＡ、ＰＣＩ(Peripheral Components Interconnect)を用いることができる。更に、キーボード/マウス１０ｉ、及び、フレキシブルディスクドライブ１０ｊについては、ＵＳＢ(Universal Serial Bus)を用いることができる。
【００９８】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム(装置又は機器)、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(ＲＡＭ)、リードオンリーメモリ(ＲＯＭ)、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ(ＣＤ−ＲＯＭ)、コンパクトディスク−リード/ライト(ＣＤ−Ｒ/Ｗ)及びＤＶＤが含まれる。
【００９９】
以上述べたように、本実施の形態では、異なるベーステーブルの差分データのみをサマリーテーブルの差分に反映させる演算を、異なるトランザクションで行うようにした。これにより、サマリーテーブルの差分リフレッシュを行う際に、ベーステーブルをロックする時間が短くなった。特に、分散ＤＢ環境において、ＭＱＴの差分リフレッシュを複数のトランザクションを用いて行うことで、業務への影響を抑えることが可能となった。
【図面の簡単な説明】
【０１００】
【図１】本発明の実施の形態におけるコンピュータシステムの構成を示した図である。
【図２】本発明の実施の形態で用いるベーステーブル及び差分テーブルの例を示した図である。
【図３】本発明の実施の形態における差分データ処理について示した図である。
【図４】本発明の実施の形態における差分データ処理部の動作を示したフローチャートである。
【図５】本発明の実施の形態における差分演算処理部の第１の動作を示したフローチャートである。
【図６】本発明の実施の形態における差分演算処理部の第１の動作のイメージを示した図である。
【図７】本発明の実施の形態における差分演算処理部の第１の動作のイメージを示した図である。
【図８】本発明の実施の形態における差分演算処理部の第２の動作を示したフローチャートである。
【図９】本発明の実施の形態における差分演算処理部の第２の動作のイメージを示した図である。
【図１０】本発明の実施の形態において更に改善されるべき点について説明するための図である。
【図１１】本発明の実施の形態におけるコンピュータシステムの構成の具体例を示した図である。
【図１２−１】本発明の実施の形態においてＭＱＴの差分を演算するのに用いるＳＱＬ文の例を示した図である。
【図１２−２】本発明の実施の形態においてＭＱＴの差分を演算するのに用いるＳＱＬ文の例を示した図である。
【図１３−１】本発明の実施の形態においてＭＱＴの差分を演算するのに用いるＳＱＬ文の例を示した図である。
【図１３−２】本発明の実施の形態においてＭＱＴの差分を演算するのに用いるＳＱＬ文の例を示した図である。
【図１４】本発明の実施の形態においてＭＱＴの差分を演算するのに用いるＳＱＬ文の例を示した図である。
【図１５】本発明の実施の形態においてＭＱＴの差分を演算するのに用いるＳＱＬ文の例を示した図である。
【図１６−１】本発明の実施の形態に関する実験の結果を示した図である。
【図１６−２】本発明の実施の形態に関する実験の結果を示した図である。
【図１７−１】本発明の実施の形態に関する実験の結果を示した図である。
【図１７−２】本発明の実施の形態に関する実験の結果を示した図である。
【図１８】本発明の実施の形態を適用可能なコンピュータのハードウェア構成を示した図である。
【符号の説明】
【０１０１】
１１１〜１１ｎ…ベーステーブル記憶部、１２…サマリーテーブル記憶部、１３１〜１３ｎ…差分データ処理部、１４…差分演算処理部、１４１…制御部、１４２…生成部
【図１】
2008146264.tif 000012
【図２】
2008146264.tif 000013
【図３】
2008146264.tif 000014
【図４】
2008146264.tif 000015
【図５】
2008146264.tif 000016
【図６】
2008146264.tif 000017
【図７】
2008146264.tif 000018
【図８】
2008146264.tif 000019
【図９】
2008146264.tif 000020
【図１０】
2008146264.tif 000021
【図１１】
2008146264.tif 000022
【図１２−１】
2008146264.tif 000023
【図１２−２】
2008146264.tif 000024
【図１３−１】
2008146264.tif 000025
【図１３−２】
2008146264.tif 000026
【図１４】
2008146264.tif 000027
【図１５】
2008146264.tif 000028
【図１６−１】
2008146264.tif 000029
【図１６−２】
2008146264.tif 000030
【図１７−１】
2008146264.tif 000031
【図１７−２】
2008146264.tif 000032
【図１８】
2008146264.tif 000033