Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP4380692B2 - サマリーテーブルをリフレッシュするための装置、方法、及びプログラム - Google Patents
[go: Go Back, main page]

JP4380692B2 - サマリーテーブルをリフレッシュするための装置、方法、及びプログラム - Google Patents

サマリーテーブルをリフレッシュするための装置、方法、及びプログラム Download PDF

Info

Publication number
JP4380692B2
JP4380692B2 JP2006331213A JP2006331213A JP4380692B2 JP 4380692 B2 JP4380692 B2 JP 4380692B2 JP 2006331213 A JP2006331213 A JP 2006331213A JP 2006331213 A JP2006331213 A JP 2006331213A JP 4380692 B2 JP4380692 B2 JP 4380692B2
Authority
JP
Japan
Prior art keywords
base
base table
difference
tables
update
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006331213A
Other languages
English (en)
Other versions
JP2008146264A (ja
Inventor
昌弘 大川
裕史 松澤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2006331213A priority Critical patent/JP4380692B2/ja
Priority to US11/876,520 priority patent/US8271440B2/en
Publication of JP2008146264A publication Critical patent/JP2008146264A/ja
Application granted granted Critical
Publication of JP4380692B2 publication Critical patent/JP4380692B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするための装置、方法、プログラムに関し、より詳しくは、ベーステーブルの差分データに基づいてサマリーテーブルをリフレッシュするための装置、方法、プログラムに関する。
近年、オンライン分析処理(On-Line Analytical Processing(OLAP))により、企業等が保持する情報を分析する動きが盛んになっている。このOLAPでは、SQL文を用いてデータベース(以下、「DB」という)内のテーブル(ベーステーブル)を検索したり集計したりすることで、分析したい情報を作成する。しかし、その処理には時間がかかるため、事前に演算した結果をテーブルに保存しておき、それを利用するのが普通である。ここで、そのようなSQL文の実行結果を保存しておくテーブルは、一般に「サマリーテーブル」と呼ばれる。尚、サマリーテーブルは、製品によっては、「マテリアライズド照会表」と呼んだり、「マテリアライズドビュー」と呼んだりすることもあるが、本明細書では、マテリアライズド照会表の略称である「MQT」を主として用いることとする。
ところで、事前に演算してMQTを作成した後に、参照しているベーステーブルの情報が更新されると、MQTとベーステーブルとの間に不整合が生じてしまう。そこで、不整合を解消するため、同期し直す処理を行う必要がある。この処理は、一般に、「リフレッシュ」と呼ばれる。かかるMQTのリフレッシュは、まず、フルリフレッシュと差分リフレッシュとに分類することができる。このうち、フルリフレッシュとは、MQTに関連付けられているSELECT文を実行することにより、MQTを再作成する方法である。また、差分リフレッシュとは、参照しているベーステーブルの更新内容に相当する差分データを用いてMQTを演算する方法である。
また、MQTのリフレッシュは、リフレッシュを行うタイミングの観点から、即時リフレッシュ(Refresh Immediate)と、遅延リフレッシュ(Refresh Deferred)とに分類することもできる(非特許文献1、2参照)。このうち、即時リフレッシュとは、参照しているテーブルでデータの挿入、更新、削除がなされると、自動的にMQTでデータの挿入、更新、削除がなされる、という方法である。また、遅延リフレッシュとは、参照しているテーブルでデータの挿入、更新、削除がなされると、自動的にMQTでデータの挿入、更新、削除がなされるわけではないが、リフレッシュコマンドによっていつでもデータをリフレッシュできる、という方法である。差分リフレッシュを遅延リフレッシュで行う場合、ベーステーブルの情報が更新されると、MQTの差分はステージングテーブルに挿入される。そして、リフレッシュコマンドを発行すると、ステージングテーブルを用いて、MQTがリフレッシュされる。ここで、従来、MQTの差分リフレッシュは、参照しているベーステーブルの情報を更新するトランザクションを用いて行われていた。
Roman B. Melnyk、"DB2 Basics: An introduction to materialized query tables"、[online]、2005年9月8日、[2006年11月24日検索]、インターネット<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]、2006年5月23日、[2006年11月24日検索]、インターネット<URL:http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0605lin/>
このように、従来技術においては、MQTの差分リフレッシュにおける演算処理を1トランザクションで行っているため、その処理が行われている間は、MQTが参照しているベーステーブルを全てロックする必要があった。ここで、ベーステーブルがロックされている時間を短縮することができれば、ベーステーブルのデータを更新できない時間が減少するので、業務に与える影響を抑えることができる。
また、従来から、企業等が保持する情報は、分散管理されるのが一般的である。例えば、部門ごとに情報を管理する、といったシステム形態である。かかるシステム形態では、1つのDBから構成されるDB環境ではなく、複数のDBから構成されるDB環境が採用されることが多い。つまり、複数のDBを統合し、それぞれのDBに存在するテーブルを1つのDBにあるかのように扱うことができる分散DB環境である。ここで、「DB環境」とは、DBにSQL文でアクセスし、その結果を取得するシステムのことをいう。
そして、近年、分散DB環境下でも、分散された情報を統合することにより、情報の有効かつ効率的な利用を図り、企業の競争力を高めることが求められている。そこで、このような環境下でもOLAPによる情報の分析は行われており、MQTが作成されることがある。しかしながら、分散DB環境下では、現状、フルリフレッシュしかできない。つまり、MQTの差分リフレッシュ機能は提供されていない。また、仮に、分散DB環境下で従来の手法を用いて差分リフレッシュを行おうとした場合、全てのベーステーブルをロックしなければならない。更に、分散されたベーステーブルを用いて差分リフレッシュを行う必要があるため、その演算処理に時間がかかり、かつ、その演算処理中は全てのベーステーブルがロックされているため業務で発生したデータを登録・更新・削除することができず、業務に影響を与えてしまうことになる。
本発明は、以上のような技術的課題を解決するためになされたものであって、その目的は、サマリーテーブルの差分リフレッシュを行う際に、ベーステーブルをロックする時間を短くすることにある。
かかる目的のもと、本発明では、複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルのリフレッシュを複数のトランザクションを用いて行うようにした。即ち、本発明の装置は、複数のベーステーブルのうちの指定されたベーステーブルの所定の時点までの変更をサマリーテーブルに反映させるための差分情報を、その指定されたベーステーブルのその所定の時点以降の変更が可能な状態で生成する生成部と、異なるベーステーブルを指定した場合に異なるトランザクションで生成部が差分情報を生成するように制御する制御部とを備えている。
ここで、生成部は、複数のベーステーブルのうちの指定されたベーステーブル以外の全てのベーステーブルの変更が不可能な状態で、その全てのベーステーブルを参照して、差分情報を1つのトランザクションで生成するようにしてもよい。或いは、生成部は、複数のベーステーブルのうちの指定されたベーステーブル以外の全てのベーステーブルから1つずつベーステーブルを選択し、その選択されたベーステーブルの変更が不可能な状態でその選択されたベーステーブルを参照した処理を1つのトランザクションで行うことにより、差分情報を生成するようにしてもよい。また、生成部は、指定されたベーステーブルの変更を管理する領域において、差分情報の生成処理中は、所定の時点までの変更と、その所定の時点以降の変更とを区別して管理することによって、その指定されたベーステーブルのその所定の時点以降の変更が可能な状態にすることができる。或いは、生成部は、差分情報の生成処理中は、指定されたベーステーブルの変更を管理する領域で所定の時点以降の変更を管理する処理を停止することによっても、その指定されたベーステーブルのその所定の時点以降の変更が可能な状態にすることができる。
また、本発明は、複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルのリフレッシュを複数のトランザクションを用いて行う方法として捉えることもできる。その場合、本発明の第1の方法は、複数のベーステーブルのうちの特定のベーステーブルの所定の時点までの変更を特定するステップと、複数のベーステーブルのうちの特定のベーステーブル以外のn個(n≧1)のベーステーブルの変更を受け付けないようにするステップと、特定するステップで特定された変更をサマリーテーブルに反映させるための差分情報を、特定のベーステーブルの所定の時点以降の変更を受け付けつつ、n個のベーステーブルを参照して生成するステップと、n個のベーステーブルの変更を受け付けるようにするステップとを含んでいる。また、本発明の第2の方法は、複数のベーステーブルのうちの第1のベーステーブルの所定の時点までの変更を特定するステップと、複数のベーステーブルのうちの第2のベーステーブルの変更を受け付けないようにするステップと、特定するステップで特定された変更をサマリーテーブルに反映させるための差分情報を、第1のベーステーブルの所定の時点以降の変更を受け付けつつ、第2のベーステーブルを参照して生成するステップと、第2のベーステーブルの変更を受け付けるようにするステップと、複数のベーステーブルのうちの第3のベーステーブルの変更を受け付けないようにするステップと、差分情報を第3のベーステーブルを参照して更新するステップと、第3のベーステーブルの変更を受け付けるようにするステップとを含んでいる。
一方、本発明は、複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルのリフレッシュを複数のトランザクションを用いて行うためのコンピュータプログラムとして捉えることもできる。その場合、本発明のプログラムは、複数のベーステーブルのうちの指定されたベーステーブルの所定の時点までの変更をサマリーテーブルに反映させるための差分情報を、その指定されたベーステーブルのその所定の時点以降の変更が可能な状態で生成する機能と、異なるベーステーブルを指定した場合に異なるトランザクションで差分情報が生成されるように制御する機能とを実現させる。
本発明によれば、サマリーテーブルの差分リフレッシュを行う際に、ベーステーブルをロックする時間が短くなる。
以下、添付図面を参照して、本発明を実施するための最良の形態(以下、「実施の形態」という)について詳細に説明する。まず、本実施の形態の原理について説明する。MQTが、T1、T2、T3の3つのテーブルを参照するSELECT文の実行結果を保持する場合、本明細書では、これらのテーブル間の関係を以下の式で表すこととする。
Figure 0004380692
また、MQTが、T1からTnのn個のテーブルを参照するSELECT文の実行結果を保持する場合、本明細書では、これらのテーブル間の関係を以下の式で表すこととする。
Figure 0004380692
ここで、T1からTnのそれぞれの差分データを保持する差分テーブルを設け、これらの差分テーブルをそれぞれdT1、dT2、・・・とする。また、古いMQTをMQTold、最新のMQTをMQT、その差分をdMQTとすると、以下の式が成り立つ。
Figure 0004380692
この式から、この演算処理中、TiとdTi(i=1〜n)は一貫性を保つ必要があり、T1からTnまでの全てのテーブルを更新できないことが分かる。そこで、本実施の形態では、dMQTを演算する処理を、複数のトランザクションに分けて行うようにする。まず、T1の差分データdT1に関するMQTの差分dMQTは、以下の式で表される。
Figure 0004380692
この式において、dT1は使用しているが、T1は使用していない。従って、この演算中にT1を更新することは可能である。但し、dT1、Ti、dTi(i=2〜n)は、この演算中、一貫性を保つ必要がある。尚、この式に基づく処理で、dT1に関するMQTの差分が反映されるので、この処理の終了後、利用したdT1を削除する。また、同様の処理をT2〜Tnに対しても行う。ここでも、dTi(i=2〜n)に関するdMQTの演算中にTiを更新することは可能である。dT1からdTnに関するMQTの差分演算処理は、それぞれ1つのトランザクションで行う。つまり、トータルでn個のトランザクションで処理する。従って、dT1、dT2、dT3に関するdMQTを順に演算する場合、1つ目のトランザクションでT1を更新でき、2つ目のトランザクションでT2を更新でき、3つ目のトランザクションでT3を更新できるようになる。
以下、かかる原理のコンピュータシステムによる具現化について述べる。まず、本実施の形態が適用されるコンピュータシステムについて説明する。図1は、本実施の形態におけるコンピュータシステムの構成例を示した図である。図示するように、このコンピュータシステムは、ベーステーブル記憶部111〜11nと、サマリーテーブル記憶部12と、差分データ処理部131〜13nと、差分演算処理部14とを備えている。
ベーステーブル記憶部111〜11nは、ベーステーブルと、ベーステーブルの差分データを保持する差分テーブルとを記憶する。ここで、ベーステーブル記憶部111〜11nは、原理の説明で用いた例に従い、それぞれ、T1及びdT1、T2及びdT2、T3及びdT3、・・・、Tn及びdTnを記憶するものとする。尚、ここでは、T1及びdT1、T2及びdT2、T3及びdT3、・・・、Tn及びdTnが、それぞれ、別々の記憶媒体に記憶されているように図示したが、このような構成には限らない。これらの中から幾つかの組を選択し、それを1つの記憶媒体に記憶する構成としてもよい。
サマリーテーブル記憶部12は、サマリーテーブルと、サマリーテーブルをリフレッシュするための差分情報とを記憶する。ここで、サマリーテーブル記憶部12は、原理の説明で用いた例に従い、MQT及びdMQTを記憶するものとする。差分データ処理部131〜13nは、それぞれ、ベーステーブル記憶部111〜11nに記憶されたベーステーブルの差分データを処理する。即ち、ベーステーブルが更新された場合に、その更新内容を示す差分データを対応する差分テーブルに格納する。尚、差分データを差分テーブルに格納する処理は、後述するように、既存のDBMS(DataBase Management System)にて提供されるトリガーの機能や、データベースに対して行われた変更を格納するトランザクションログをキャプチャする機能を用いて行うことができる。尚、トランザクションログは、製品によっては、「リカバリーログ」と呼んだり、「データベースログ」と呼んだりすることもあるが、本明細書では、トランザクションログを用いることとする。
差分演算処理部14は、ベーステーブル記憶部111〜11nに記憶されたベーステーブルの差分データに基づいて、サマリーテーブルをリフレッシュするための差分を演算する。また、この差分演算処理部14は、制御部141と、生成部142とを備える。このうち、制御部141は、差分演算処理部14の全体を制御する。即ち、ベーステーブル記憶部111〜11nにそれぞれ記憶されたT1、T2、T3、・・・、Tnの中から1つを指定し、その指定されたテーブルの更新を受け付けるようにした上で、そのテーブルの差分データに関するdMQTの生成を生成部142に指示する。このとき、指定するテーブルが異なれば、異なるトランザクションで生成部142による処理が行われるように制御する。また、制御部141は、T1、T2、T3、・・・、Tnのロックや、dT1、dT2、dT3、・・・、dTnの更新や、トランザクションのコミットも行う。また、生成部142は、制御部141が指定したテーブルの差分データに関するdMQTを生成してサマリーテーブル記憶部12に記憶する。
ここで、Tiの差分データを保持するdTiについて具体的に説明する。dTiは、MQTの差分を演算する際に利用するTiの列名の他に、以下の列(カラム)を持つ。まず、データが追加されたのか削除されたのかを示すフラグである。本実施の形態では、この列を「オペレーションタイプ」と呼び、追加の場合は「1」を格納し、削除の場合は「−1」を格納するものとする。尚、図では、これを「OPERATIONTYPE」と表記している。次に、データが演算処理中なのか未処理なのかを表すフラグである。本実施の形態では、この列を「プロセスフラグ」と呼び、演算処理中の場合は「1」、未処理の場合は「0」を格納するものとする。尚、図では、これを「PROCESSFLAG」と表記している。
例えば、データは、dTiに対して次のように格納される。Tiにデータが挿入されたとすると、その中でMQTに利用する列に、オペレーションタイプとして「1」を、プロセスフラグとして「0」を付加したデータ(レコード)をdTiに挿入する。Tiのデータが削除されたとすると、その中でMQTに利用する列に、オペレーションタイプとして「−1」を、プロセスフラグとして「0」を付加したデータ(レコード)をdTiに挿入する。また、Tiのデータが更新された場合は、古いデータが削除され、新しいデータが挿入されたものとして処理する。
ここで、Tiの更新及びdTiへの差分データの挿入について具体的に説明する。図2は、T1の更新による差分データのdT1への挿入例を示したものである。この例において、T1は、C1、C2、C3という3つの列からなるものとする。また、MQTでこのうちC1及びC3の列を使用しているとすると、dT1の列は、C1、C3、オペレーションタイプ、プロセスフラグとなる。ある時点で、T1が図2(a)に示したようなデータを保持し、dT1が図2(b)に示したように空であるとする。ここで、図2(c)に示すように、T1のC1=3、C2=‘JAPAN’、C3=‘OSAKA’のレコードが、C1=3、C2=‘ITALY’、C3=‘ROME’に更新された場合を考える。この場合、dT1は、図2(d)に示したようなデータを保持するようになる。つまり、C1=3、C2=‘JAPAN’、C3=‘OSAKA’のレコードが削除され、C1=3、C2=‘ITALY’、C3=‘ROME’のレコードが追加されたことを示す差分データが挿入されている。
次いで、図1に示したコンピュータシステムの各処理部の動作について説明する。まず、差分データ処理部131〜13nの動作を説明する。差分データ処理部131〜13nは、既に述べたように、T1〜Tnの差分データを保持する目的で差分テーブルdT1〜dTnを作成し、T1〜Tnの差分データをdT1〜dTnに挿入する。ここで、差分データの差分テーブルへの挿入は、データベースのトリガーの機能を用いて、或いは、トランザクションログをキャプチャする機能を用いて行われる。
そこで、まず、トリガーの機能を用いて差分データを差分テーブルに挿入する場合について説明する。尚、ここでは、差分データ処理部131〜13nのうち、差分データ処理部131について述べる。図3は、トリガーの機能を用いた差分テーブルの作成について説明するための図である。図3(a)に、このときの処理の流れについて示す。図示するように、トリガーの機能を用いる場合、まず、dT1を作成し(ステップ301)、次に、トリガーを作成する(ステップ302)。
ここで、ステップ301でのdT1の作成、及び、ステップ302でのトリガーの作成のためのSQL文を図3(b)に示す。まず、1つ目のSQL文により、T1が作成されていることが前提である。次に、2つ目のSQL文により、dT1を作成する。このとき、前述したように、dT1においてオペレーションタイプとプロセスフラグとを保持できるようにしておく。そして、3つ目から5つ目のSQL文により、トリガーを作成する。このとき、追加であればオペレーションタイプを「1」に設定したレコードを、削除であればオペレーションタイプを「−1」に設定したレコードを、更新であればオペレーションタイプを「1」に設定したレコードと「−1」に設定したレコードとを挿入するように指定しておく。また、プロセスフラグはいずれの場合も「0」に設定されるように指定する。このように予めトリガーを作成しておくことで、後は、DBが、差分データを自動的に差分テーブルに挿入する。
次に、トランザクションログをキャプチャする機能を用いて差分データを差分テーブルに挿入する場合について説明する。尚、ここでも、差分データ処理部131〜13nのうち、差分データ処理部131について述べる。図4は、このときの差分データ処理部131の動作を示したフローチャートである。差分データ処理部131は、定期的に以下の処理を行う。まず、差分データ処理部131は、トランザクションログをチェックし、コミット済みの差分データを取得する(ステップ351)。
次に、差分データ処理部131は、差分データに対し、オペレーションタイプ及びプロセスフラグを付加し、dT1に挿入する(ステップ352)。ここで、追加であればオペレーションタイプを「1」に設定したレコードを、削除であればオペレーションタイプを「−1」に設定したレコードを、更新であればオペレーションタイプを「1」に設定したレコードと「−1」に設定したレコードとを挿入する。また、プロセスフラグはいずれの場合も「0」に設定する。
このようにしてdTi(i=1〜n)に差分データが格納されると、差分演算処理部14が、dMQTの演算処理を行う。ところで、本実施の形態では、制御部141がT1〜TnからTiを指定し、生成部142に対し、dTiに関するdMQTを演算するよう指示する。これに応じて、生成部142は、他のテーブルが指定された場合とは異なるトランザクションでdMQTを生成する。
ここで、生成部142によるdMQTの生成方法には、2つの方法がある。1つは、dTiに関するdMQTの演算を、全dTj(j=1〜nかつj≠i)にロックをかけ、1つのトランザクションで行う方法である。本明細書では、この方法を「Each delta at once」と称する。もう1つは、dTiに関するdMQTの演算を、dTiと他の1つのテーブルとの組み合わせによる演算と、その結果と更に他の1つのテーブルとの組み合わせによる演算とに分け、それぞれの演算を別々のトランザクションで行うことで、更に細かくトランザクションを分ける方法である。本明細書では、この方法を「One by one」と称する。
以下、本実施の形態の動作を、これら2つの方法に分けて説明する。まず、「Each delta at once」における動作について説明する。図5は、このときの差分演算処理部14の動作を示したフローチャートである。差分演算処理部14では、まず、制御部141が、T1〜Tnの中から1つのベーステーブルを指定し、これをTiとする。そして、このTiについて、iループの処理を開始する(ステップ401)。このとき、制御部141は、1回のiループの処理が1つのトランザクションで実行されるよう制御する。
そして、iループでは、dTiに関するMQTの差分を演算する。即ち、まず、制御部141が、その時点でdTiに存在する全てのデータのプロセスフラグを「1」にし、演算処理中であることを示す状態にしておく(ステップ402)。また、この処理を開始する時点での最新の状態でTj(j=1〜n、j≠i)をロックする(ステップ403)。
次に、制御部141による制御の下、生成部142が、dTiに関するdMQTを演算し、演算結果をステージングテーブルに追加する(ステップ404)。ここで、dMQTの演算には、dTiのデータのうち、プロセスフラグが「1」のもののみを用いる。この場合、Tj(j=1〜n、j≠i)はロックされているが、Tiはロックされていないので、dTiに関するdMQTの演算中にTiが更新され、dTiに差分データが挿入されてくることがある。しかしながら、その差分データのプロセスフラグは「0」となっているので、これは今回のdMQTの演算には用いられず、次回のdMQTの演算に用いられる。
このようにしてdMQTがステージングテーブルに追加されると、制御部141は、dTiのデータのうち、プロセスフラグが「1」のデータを削除する(ステップ405)。つまり、dMQTの演算に使用したデータを削除する。そして、制御部141は、最後に、コミットし、処理を確定させる(ステップ406)。これにより、ステップ403でなされたTj(j=1〜n、j≠i)のロックは解除される。以上により、iループの処理は、終了する(ステップ407)。このような処理をdT1〜dTnについて行うことで、dT1〜dTnの全てを反映したdMQTが得られる。そして、ステージングテーブルに記憶されたdMQTは、既存技術を用いてMQTに反映される。
ここで、以上述べた処理のイメージを説明する。尚、ここでは、T1、T2、T3からdMQTを生成する場合を考える。まず、トリガーの機能を用いて差分データ処理を行った場合について説明する。図6(a)に、この場合の本実施の形態の処理に対する比較例として、プロセスフラグを使用しなかった場合について示す。この例においては、dT1に関するdMQTを演算している間にT1が更新されると、トリガーの機能が、dT1に差分データを挿入しようとする。しかしながら、dMQTの演算にdT1が使用されているためブロックされ、T1の更新は、dMQTの演算が終わるまで、待たされることになる。
これに対し、図6(b)に、プロセスフラグを使用した場合について示す。この例において、dT1に関するdMQTの演算は、dT1のプロセスフラグが「1」のデータを用いて行われる。従って、T1の差分データは、プロセスフラグを「0」に設定することで、dMQTの演算処理中でもブロックされることなく挿入できる。尚、この場合は、テーブルの更新を管理する領域である時点までの更新とその時点以降の更新とを区別して管理する方法の一例として、プロセスフラグを用いた管理方法を採用している。
また、トランザクションログを用いて差分データ処理を行った場合について説明する。図7に、この場合の本実施の形態の処理イメージを示す。この例においても、dT1に関するdMQTの演算は、dT1のプロセスフラグが「1」のデータを用いて行われる。従って、T1の差分データは、プロセスフラグを「0」に設定することで、dMQTの演算処理中でもブロックされることなく挿入できる。尚、この場合も、テーブルの更新を管理する領域である時点までの更新とその時点以降の更新とを区別して管理する方法の一例として、プロセスフラグを用いた管理方法を採用している。或いは、トランザクションログをキャプチャする機能をdMQTの演算処理中は停止させるようにしてもよい。つまり、定期的にトランザクションログをチェックし、差分データをdT1に挿入するキャプチャの動作を止めることで、dMQTの演算処理中であってもT1を更新することが可能になる。尚、この場合は、テーブルの更新を管理する領域においてある時点以降の更新を管理する処理の一例として、トランザクションログをキャプチャする処理を採用している。
次に、「One by one」における動作について説明する。図8は、このときの差分演算処理部14の動作を示したフローチャートである。差分演算処理部14では、まず、制御部141が、T1〜Tnの中から1つのベーステーブルを指定し、これをTiとする。そして、このTiについて、iループの処理を開始する(ステップ451)。
そして、iループでは、dTiに関するMQTの差分を演算する。即ち、まず、制御部141が、その時点でdTiに存在する全てのデータのプロセスフラグを「1」にし、演算処理中であることを示す状態にしておく(ステップ452)。また、図示しない順序制御部に対し、dTiに関するdMQTを演算する際のTj(j=1〜n、j≠i)の参照順序の見積もりを要求しておく(ステップ453)。尚、この順序制御部による参照順序の見積もりは、DBのコンパイラの機能で行うことができる。その後、制御部141は、j=1〜n−1について、jループの処理を開始する(ステップ454)。このとき、制御部141は、1回のjループの処理が1つのトランザクションで実行されるよう制御する。
そして、jループでは、dTiと他の1つのテーブルとから一時テーブルを演算する処理、一時テーブルと他の1つのテーブルとから他の一時テーブルを演算する処理、一時テーブルと他の1つのテーブルとからdMQTを演算する処理のいずれかを行う。即ち、まず、制御部141が、順序制御部による見積もりの結果に基づいて、次に参照すべきテーブルTkを特定する(ステップ455)。ここで、kは、1〜nのうちのi以外の整数である。また、この処理を開始する時点での最新の状態でTkをロックする(ステップ456)。
次に、制御部141は、j=1であるかどうかを判定する(ステップ457)。即ち、今回の処理がjループにおける最初の処理であるかどうかを判定する。ここで、j=1であると判定された場合は、制御部141による制御の下、生成部142が、dTiと(Tk−dTk)とに基づく一時テーブルdTiM1を保存する(ステップ458)。ここで、dMQTの演算には、dTiのデータのうち、プロセスフラグが「1」のもののみを用いる。この場合、Tkはロックされているが、Tiはロックされていないので、dTiに関するdMQTの演算中にTiが更新され、dTiに差分データが挿入されてくることがある。しかしながら、その差分データのプロセスフラグは「0」となっているので、これは今回のdMQTの演算には用いられず、次回のdMQTの演算に用いられる。一方、ステップ457でj=1でないと判定された場合、制御部141は、j=n−1であるかどうかを判定する(ステップ459)。即ち、今回の処理がjループにおける最後の処理であるかどうかを判定する。
ここで、j=n−1でないと判定された場合は、制御部141による制御の下、生成部142が、dTiMj−1と(Tk−dTk)とに基づく一時テーブルdTiMjを保存する(ステップ460)。尚、この場合の演算には、一時テーブルのデータが用いられ、dTiのデータは用いられないので、dTiに差分データを挿入することはできる。つまり、Tiは更新可能な状態になっている。一方、ステップ459でj=n−1であると判定された場合、制御部141による制御の下、生成部142は、dTiMn−2と(Tk−dTk)とからdMQTを生成し、これをステージングテーブルに追加する(ステップ461)。その後、制御部141は、Tkを参照するトランザクションをコミットし、処理を確定させる(ステップ462)。これにより、ステップ456でなされたTkのロックは解除される。以上により、jループの処理は、終了する(ステップ463)。
このようにしてdMQTがステージングテーブルに追加されると、制御部141は、dTiのデータのうち、プロセスフラグが「1」のデータを削除する(ステップ464)。つまり、dMQTの演算に使用したデータを削除する。そして、制御部141は、最後に、コミットし、処理を確定させる(ステップ465)。以上により、iループの処理は、終了する(ステップ466)。このような処理をdT1〜dTnについて行うことで、dT1〜dTnの全てを反映したdMQTが得られる。そして、ステージングテーブルに追加されたdMQTは、既存技術を用いてMQTに反映される。
ここで、以上述べた処理のイメージを説明する。尚、ここでは、T1、T2、T3からdMQTを生成する場合を考える。また、この「One by one」においても、トリガーの機能を用いて差分データ処理を行う場合と、トランザクションログを用いて差分データ処理を行う場合とがあるが、ここでは、トリガーの機能を用いる場合について説明する。図9に、この場合の本実施の形態の処理イメージを示す。この例において、dT1に関するdMQTの演算は、dT1のプロセスフラグが「1」のデータを用いて行われる。従って、T1の差分データは、プロセスフラグを「0」に設定することで、dMQTの演算処理中でもブロックされることなく挿入できる。そして、(1)で示したように、まず、dT1、T2、dT2を用いて中間結果(一時テーブル)を生成する。その後、(2)で示したように、この中間結果、T3、dT3を用いてdMQTを生成する。
以上、「Each delta at once」及び「One by one」における動作について説明した。この動作により、iループにおいては、TiをロックすることなくdMQTを生成することが可能となった。しかしながら、これらの処理には、更なる改善が望まれる点もある。即ち、dT1に関するdMQTの演算中に発生したT1の差分データは次回の処理に持ち越される。一方で、dT1に関するdMQTの演算終了後、dT2に関するdMQTの演算が行われるため、ほぼ同時に発生したT2の差分データが、次回の処理に持ち越されずに、今回の処理でdMQTに反映されるという現象が起こり得るということである。
図10は、このような現象が起こる仕組みを時間の流れに沿って示したものである。ここでは、T1とT2とからMQTを演算する例で示している。まず、(1)でT1にレコードが追加されたとする。すると、このレコードの追加に相当する差分データがdT1に挿入される。このとき、差分データのプロセスフラグは「0」に設定される。尚、図では、この差分データを斜線で示している。この状態で、図示するように、dT1に関するdMQTの演算が開始したとする。この場合、dT1の全ての差分データのプロセスフラグは「1」となる。そして、これがdMQTの演算対象となる。また、T2はロックされ、更新できない状態になる。
その後、(2)でT1に新たなレコードが追加されたとする。すると、このレコードの追加に相当する差分データがdT1に挿入される。このとき、差分データのプロセスフラグは「0」に設定される。そして、ここではプロセスフラグが「1」の差分データのみがdMQTの演算対象となっているので、この差分データは演算対象外となる。尚、図では、この差分データを淡い網掛けで示している。その後、(3)でT2に新たなレコードが追加されたとする。このとき、T2はロックされているので、ロックの解除待ちとなる。この状態で、図示するように、dT1に関するdMQTの演算が終了したとする。この場合、図示するように、dMQTの演算に使用したデータがdT1から削除される。また、この時点で、T2のロックは解除され、T2の更新が可能となり、ロック待ちのレコードが追加される。
すると、このレコードの追加に相当する差分データがdT2に挿入される。このとき、差分データのプロセスフラグは「0」に設定される。尚、図では、この差分データを濃い網掛けで示している。この状態で、図示するように、dT2に関するdMQTの演算が開始したとする。この場合、dT2の全ての差分データのプロセスフラグは「1」となる。そして、これがdMQTの演算対象となる。
即ち、この例では、(2)におけるT1へのレコードの追加と、(3)におけるT2へのレコードの追加とがほぼ同じタイミングで行われているにも関わらず、後者はdMQTの演算対象となり、前者はdMQTの演算対象とはなっていない。
但し、典型的なOLAPでは、1つのファクトテーブルと複数のディメンションテーブルとが設けられ、通常、ファクトテーブルが更新される。その場合、このような現象は生じない。また、業務によっては、このような現象が許容される場合もある。
これに対し、このような現象が許容されないのであれば、次のような方法で対処すればよい。第1の方法は、上記の方法でdMQTを演算した後、いずれかのベーステーブルに差分データが存在すれば、全てのベーステーブルをロックして再度演算する、というものである。例えば、10分間隔でdMQTを演算する場合を考える。この場合、dMQTの演算に20秒かかったとする。演算終了後、差分テーブルに20秒の間に溜まったデータが存在すれば、全てのベーステーブルをロックして再度dMQTを演算する。この場合、20秒の間に溜まった少量のデータを処理すればよいので、短時間(例えば、5秒)で処理は終了する。
また、第2の方法は、上記の方法でdMQTを演算した後、再度同じ手法でdMQTを演算し、その後、いずれかのベーステーブルに差分データが存在すれば、全てのベーステーブルをロックして演算する、というものである。例えば、10分間隔でdMQTを演算する場合を考える。この場合、dMQTの演算に20秒かかったとする。演算終了後、差分テーブルに20秒の間に溜まったデータが存在すれば、再度同じ手法で演算する。この場合、20秒の間に溜まった少量のデータを処理すればよいので、短時間(例えば、5秒)で処理は終了する。また、この演算終了後、差分テーブルに5秒の間に溜まったデータが存在すれば、全てのベーステーブルをロックして再度dMQTを演算する。この場合、5秒の間に溜まった少量のデータを処理すればよいので、更に短時間(例えば、2秒)で処理は終了する。
この処理は、具体的には以下のようなことを意図している。例えば、10分間隔でdMQTの演算が行われる場合において、ほぼ同じタイミングで、地域テーブルに地域情報が、製品テーブルに製品情報が、更に追加された地域と既存製品に関する売り上げ情報、既存地域と追加された製品に関する売り上げ情報が順に追加されたものとする。このとき、図10で説明したような現象が生じ、既存地域と追加された製品に関する売り上げ情報の追加が先にdMQTに反映され、追加された地域と既存製品に関する売り上げ情報が10分後にdMQTに反映されたのでは、好ましくない場合もある。そこで、追加された地域と既存製品に関する売り上げ情報の追加についても今回のdMQT演算で拾い上げてdMQTに反映させているのである。
次に、本実施の形態を適用可能なコンピュータシステムの具体的な構成例について説明する。図11は、かかるコンピュータシステムの具体的な構成例を示した図である。このコンピュータシステムは、ローカルDB11aと、リモートDB11b及び11cとから構成される。このうち、ローカルDB11aには、MQTに関連付けられているSELECT文が参照するテーブル(ベーステーブル)N1及びその差分データを保持するテーブル(差分テーブル)dN1と、ベーステーブルN2及びこれに対する差分テーブルdN2と、ベーステーブルN3及びこれに対する差分テーブルdT3と、ベーステーブルT4及びこれに対する差分テーブルdT4とが記憶されている。
ここで、Txは実テーブルを表し、Nxは仮想テーブルを表す。この仮想テーブルは、リモートDBに存在する実テーブルを参照するために、ローカルDBに仮想的に定義されたテーブルである。仮想テーブルは、ニックネームによって参照することで、実テーブルと同様に扱うことができる。具体的には、N1は実テーブルT1に対する仮想テーブル、N2は実テーブルT2に対する仮想テーブル、N3は実テーブルT3に対する仮想テーブルである。また、リモートDB11b及び11cではTiに対する差分テーブルdTiが作成されており、dNiはその実テーブルdTiに対する仮想テーブルを表している(i=1,2,3)。
更に、このコンピュータシステムにおいては、ローカルDB11aにステージングテーブルが設けられている。このステージングテーブルは、MQTの差分を保持するテーブルである。また、このコンピュータシステムは、T1の差分データをdT1に挿入する処理、T2の差分データをdT2に挿入する処理、T3の差分データをdT3に挿入する処理、T4の差分データをdT4に挿入する処理をそれぞれ行う差分データ処理部13a、13b、13c、13dを備えている。更にまた、差分テーブル等を利用してMQTの差分を演算し、演算結果をステージングテーブルに挿入する差分演算処理部14を備えている。
尚、このコンピュータシステムにおいても、差分テーブルは、前述した通り、MQTの差分を演算する際に利用するベーステーブルの列の他に、以下の列を持つ。
・オペレーションタイプ
データが追加されたのか削除されたのかを示すフラグであり、「1」が追加を、「−1」が削除を示す。
・プロセスフラグ
データが演算処理中なのか未処理なのかを表すフラグであり、「1」が演算処理中を、「0」が未処理を表す。
また、ステージングテーブルは、MQTに関連付けられているSELECT文の構造により、以下の2種類に分けられる。
・集約MQTのステージングテーブル
SELECT文がSUM()、COUNT()等の集約関数を使用している場合のステージングテーブルである。テーブルの列は、MQTと同じ列を持つ。
・ジョインMQTのステージングテーブル
SELECT文が集約関数を使用していない場合のステージングテーブルである。テーブルの列は、MQTと同じ列の他、データが追加されたのか削除されたのかを示す列を持つ。つまり、差分テーブルのオペレーションタイプと同様であり、「1」が追加を、「−1」が削除を表す。
次いで、図11に示した構成例における処理の流れについて説明する。この構成例で示したMQTは、N1、N2、N3、T4のテーブルを参照しているSELECT文の結果を保持しており、以下の式で表されるものとする。
Figure 0004380692
また、ここでは、N1、N2、N3、T4の差分テーブルをdN1、dN2、dN3、dT4と表記するものとする。まず、「Each delta at once」の場合の処理の流れを図5のフローチャートに沿って説明する。この構成例では、まず、i=1に対するiループで、N1の差分データに関するMQTの差分を演算する。即ち、ステップ402で、dN1のプロセスフラグを「1」にし、演算処理中であることを示す。そして、ステップ403で、N2、N3、T4をロックする。その後、ステップ404で、dN1と、(N2−dN2)と、(N3−dN3)と、(T4−dT4)とから、dMQTを求め、これをステージングテーブルに挿入する。但し、dN1については、プロセスフラグが「1」のデータを対象とする。そして、最後に、ステップ405で、dN1のプロセスフラグが「1」のデータを削除し、ステップ406で、コミットする。
次に、i=2に対するiループで、N2の差分データに関するMQTの差分を演算する。その演算処理はN1の場合と同様である。但し、この場合は、N1、N3、T4をロックし、(N1−dN1)と、dN2と、(N3−dN3)と、(T4−dT4)とから、dMQTを求め、ステージングテーブルに挿入する。更に、i=3に対するiループで、N3の差分データに関するMQTの差分を演算する。その演算処理もN1の場合と同様である。但し、この場合は、N1、N2、T4をロックし、(N1−dN1)と、(N2−dN2)と、dN3と、(T4−dT4)とから、dMQTを求め、ステージングテーブルに挿入する。更にまた、i=4に対するiループで、T4の差分データに関するMQTの差分を演算する。その演算処理もN1の場合と同様である。但し、この場合は、N1、N2、N3をロックし、(N1−dN1)と、(N2−dN2)と、(N3−dN3)と、dT4とから、dMQTを求め、ステージングテーブルに挿入する。
次に、「One by one」の場合の処理の流れを図8のフローチャートに沿って説明する。尚、ここでは、dMQTを演算する際に、N1、N2、N3、T4の順でテーブルを参照するものとする。この構成例では、まず、i=1に対するiループで、N1の差分データに関するMQTの差分を演算する。即ち、ステップ452で、dN1のプロセスフラグを「1」にし、演算処理中であることを示す。そして、j=1に対するjループを開始し、ステップ456で、N2をロックする。その後、ステップ458で、dN1と(N2−dN2)とを用いて演算を行い、結果を一時テーブルdN1M1に挿入する。但し、dN1については、プロセスフラグが「1」のデータを対象とする。そして、最後に、ステップ462で、コミットする。また、j=2に対するjループを開始し、ステップ456で、N3をロックする。その後、ステップ458で、dN1M1と(N3−dN3)とを用いて演算を行い、結果を一時テーブルdN1M2に挿入する。そして、最後に、ステップ462で、コミットする。更に、j=3に対するjループを開始し、ステップ456で、T4をロックする。その後、ステップ458で、dN1M2と(T4−dT4)とを用いて演算を行い、結果をステージングテーブルに挿入する。そして、最後に、ステップ462で、コミットする。その後、ステップ464で、dN1のプロセスフラグが「1」のデータを削除し、ステップ465で、コミットする。
次に、i=2に対するiループで、N2の差分データに関するMQTの差分を演算する。その演算処理はN1の場合と同様である。また、i=3に対するiループで、N3の差分データに関するMQTの差分を演算する。その演算処理もN1の場合と同様である。更に、i=4に対するiループで、T4の差分データに関するMQTの差分を演算する。その演算処理もN1の場合と同様である。
以下、dMQTを求めるためのSQLの例を説明する。図12−1〜2は、「Each delta at once」における集約MQTの演算例を示したものである。T1、T2、T3を参照するSELECT文の結果を保持する例を用いて、T1の差分データに関するMQTの差分の演算について説明する。図12−1(a)に、MQTに関連付けられているSELECT文の例を示す。ここで、dT1に関するdMQTを得る式を展開すると、以下のようになり、これらの結果をステージングテーブルに挿入してゆく。尚、T1、T2、T3の差分データを保持する差分テーブルをdT1、dT2、dT3とする。
Figure 0004380692
この展開された式を構成するテーブルのうち、第1項のテーブルは、図12−1(b)に示したSQL文によって得ることができる。このSQL文は、MQTに関連付けられたSELECT文を次のような規則によって変換したものである。
・MQTに関連付けられたSELECT文のT1をdT1に置き換える。
・SUMについては、オペレーションタイプが「1」(追加)のデータはそのまま加算し、オペレーションタイプが「−1」(削除)のデータは減算する(「−1」倍する)。
・COUNTやCOUNT_BIGは、オペレーションタイプが「1」(追加)のデータは「1」を加算すると考え、オペレーションタイプが「−1」(削除)のデータは、「1」を減算すると考える。COUNT_BIGのデータタイプはDECIMALなので、DECIMAL関数を使用して、DECIMAL型にする。
・差分テーブルで処理するデータはプロセスフラグが「1」のものなので、それを条件に加える。
上記の展開された式を構成するテーブルのうち、第2項(マイナスを含む)のテーブルは、図12−2(c)に示したSQL文によって得ることができる。このSQL文は、MQTに関連付けられたSELECT文を次のような規則によって変換したものである。
・MQTに関連付けられたSELECT文のT1をdT1に、T2をdT2に置き換える。
・差分テーブルが2つ存在し、それぞれがオペレーションタイプを保持する。従って、2つのオペレーションタイプの積が正であれば加算し、負であれば減算する。更にこの結果を減算する必要があるので、加算と減算を逆にする。
・その他は、差分テーブルが1つの場合と同じ考え方で処理する。
また、上記の展開された式を構成するテーブルのうち、第3項(マイナスを含む)のテーブルも、同様の規則で変換したSQL文によって得ることができる。
上記の展開された式を構成するテーブルのうち、第4項のテーブルは、図12−2(d)に示したSQL文によって得ることができる。この場合、3つの差分テーブルを使用するが、1つの差分テーブルを使用する場合や2つの差分テーブルを使用する場合と同様の変換を行うことで、このSQL文も得ることができる。
図13−1〜2は、「One by one」における集約MQTの演算例を示したものである。「Each delta at once」と同様の例を用いて、T1の差分データに関するMQTの差分の演算について説明する。図13−1(a)に、MQTに関連付けられているSELECT文の例を示す。ここで、dT1に関するdMQTを得る式を展開すると、以下のようになる。
Figure 0004380692
この場合、dMQTを求める方法としては、dT1とT2とに基づく一時テーブルをdT1M1に格納した後、dT1M1とT3とに基づいて求める方法と、dT1とT3とに基づく一時テーブルをdT1M1に格納した後、dT1M1とT2とに基づいて求める方法とがある。しかし、本実施の形態は、どの順番で処理するかを限定するものではないので、ここではdT1とT2とに基づく演算を先に行う方法を説明する。
dT1とT2とに基づく一時テーブルは、図13−1(b)に示したSQL文によって得ることができる。ここで、このSQL文は、MQTに関連付けられたSELECT文を次のような規則によって変換したものである。
・MQTに関連付けられたSELECT文からT1とT2に関するものを抜き出す。COUNTやCOUNT_BIGもT1とT2に関するものであり、これも残す。
・条件等において、T1とT2のカラムが他のテーブルのカラムと使用されるものは、そのT1とT2のカラムを投影(プロジェクション)し、GROUP BYに追加する。この例では、T1.C7=T3.C7が該当する。従って、この条件を削除し、T1.C7を投影し、GROUP BYに追加する。また、T1.OPERATIONTYPEも、T3.C6のSUMを得る際に使用しているので、これも投影し、GROUP BYに追加する。
・その他は、「Each delta at once」の場合と同じ考え方で処理する。
dT1M1とT3とに基づくテーブルは、図13−2(c)に示したSQL文によって得ることができる。このSQL文は、MQTに関連付けられたSELECT文を次のような規則によって変換したものである。
・MQTに関連付けられたSELECT文からdT1M1(T1とT2)とT3に関するものを抜き出す。
・前述したdT1とT2に基づく処理で評価が終わっているものについては削除する。この例では、WHERE節のT1.C7=T2.C7とT1.PROCESSFLAG=1を削除する。また、S1とS2とCに関するT1.OPERATIONTYPEの評価も終わっているので、T1.OPERATIONTYPEの評価はせず、SUMのみ行う。
・T1とT2をdT1M1にする。
・その他は、前述したdT1とT2に基づく処理と同じ考え方で処理する。
図14は、「Each delta at once」におけるジョインMQTの演算例を示したものである。T1、T2、T3を参照するSELECT文の結果を保持する例を用いて、T1の差分データに関するMQTの差分の演算について説明する。図14(a)に、MQTに関連付けられているSELECT文の例を示す。ここで、dT1に関するdMQTを得る式を展開すると、以下のようになり、これらの結果をステージングテーブルに挿入してゆく。尚、T1、T2、T3の差分データを保持する差分テーブルをdT1、dT2、dT3とする。
Figure 0004380692
この展開された式を構成するテーブルのうち、第1項のテーブルは、図14(b)に示したSQL文によって得ることができる。このSQL文は、MQTに関連付けられたSELECT文を次のような規則によって変換したものである。
・MQTに関連付けられたSELECT文のT1をdT1に置き換える。
・ジョインMQTのステージングテーブルは差分テーブルと同様、オペレーションタイプを保持する。差分テーブルを1つ使用する場合は、差分テーブルのオペレーションタイプの値をステージングテーブルのオペレーションタイプの値とする。オペレーションタイプがステージングテーブルの最後の列に定義されているとすると、図14(b)の演算式が成り立つ。
・差分テーブルで処理するデータはプロセスフラグが「1」のものなので、それを条件に加える。
上記の展開された式を構成するテーブルのうち、第2項(マイナスを含む)のテーブルは、図14(c)に示したSQL文によって得ることができる。このSQL文は、MQTに関連付けられたSELECT文を次のような規則によって変換したものである。
・MQTに関連付けられたSELECT文のT1をdT1に、T2をdT2に置き換える。
・集約MQTの場合と同様の考え方で、ステージングテーブルのオペレーションタイプの値は、dT1とdT2のオペレーションタイプの積が正であれば「1」(追加)、負であれば「−1」(削除)とする。更にこの結果を減算する必要があるので、加算と減算を逆にする。
・その他は、差分テーブルが1つの場合と同じ考え方で処理する。
また、上記の展開された式を構成するテーブルのうち、第3項(マイナスを含む)のテーブルも、同様の規則で変換したSQL文によって得ることができる。
上記の展開された式を構成するテーブルのうち、第4項のテーブルは、図14(d)に示したSQL文によって得ることができる。この場合、3つの差分テーブルを使用するが、1つの差分テーブルを使用する場合や2つの差分テーブルを使用する場合と同様の変換を行うことで、このSQL文も得ることができる。
図15は、「One by one」におけるジョインMQTの演算例を示したものである。「Each delta at once」と同様の例を用いて、T1の差分データに関するMQTの差分の演算について説明する。図15(a)に、MQTに関連付けられているSELECT文の例を示す。ここで、dT1に関するdMQTを得る式を展開すると、以下のようになる。
Figure 0004380692
この場合、dMQTを求める方法としては、dT1とT2とに基づく一時テーブルをdT1M1に格納した後、dT1M1とT3とに基づいて求める方法と、dT1とT3とに基づく一時テーブルをdT1M1に格納した後、dT1M1とT2とに基づいて求める方法とがある。しかし、本実施の形態は、どの順番で処理するかを限定するものではないので、ここではdT1とT2とに基づく演算を先に行う方法を説明する。
dT1とT2とに基づく一時テーブルは、図15(b)に示したSQL文によって得ることができる。ここで、このSQL文は、MQTに関連付けられたSELECT文を次のような規則によって変換したものである。
・MQTに関連付けられたSELECT文からT1とT2に関するものを抜き出す。
・条件等において、T1とT2のカラムが他のテーブルのカラムと使用されているものは、そのT1とT2のカラムを投影(プロジェクション)する。この例では、T1.C4=T3.C4が該当する。従って、この条件を削除し、T1.C4を投影する。
・その他は、「Each delta at once」の場合と同じ考え方で処理する。
dT1M1とT3とに基づくテーブルは、図15(c)に示したSQL文によって得ることができる。このSQL文は、MQTに関連付けられたSELECT文を次のような規則によって変換したものである。
・MQTに関連付けられたSELECT文からdT1M1(T1とT2)とT3に関するものを抜き出す。
・前述したdT1とT2に基づく処理で評価が終わっているものについては削除する。この例では、WHERE節のT1.C4=T2.C4とT1.PROCESSFLAG=1を削除する。
・T1とT2をdT1M1にする。
・その他は、前述したdT1とT2に基づく処理と同じ考え方で処理する。
次いで、本実施の形態によるdMQTの演算時間やテーブルのロック時間を計測した実験結果について説明する。図16−1〜2は、集約MQTを演算する場合の実験結果を示したものである。図16−1(a)に、DBとテーブルとの対応を示す。この実験では、このように複数のテーブルが複数のDBに分散配置された環境を用いた。また、集約MQTは、連合サーバ(Federation Server)に作成した。尚、図では、集約MQTが参照しているテーブルに下線を付して示している。
かかる環境において、今回の実験では、テーブル「ORDERS」において300行を、テーブル「LINEITEM」において1159行を、追加又は削除し、その後、MQTをリフレッシュした。これにより、dMQTの演算時間、テーブル「ORDERS」のロック時間、テーブル「LINEITEM」のロック時間は、図16−1(b)に示すようなものとなった。まず、「Each delta at once」における「ORDERSのロック」に対する「データの追加」欄は4.0秒となっている。現状では、6.3秒ロックする必要があるので、本実施の形態により、テーブルに必要なロックの時間が短くなった。また、「One by one」における「ORDERSのロック」欄は0.16秒となっており、現状よりもロック時間を短くすることができた。尚、今回の実験に使用した集約MQTのSELECT文を図16−2(c)に示す。
図17−1〜2は、ジョインMQTを演算する場合の実験結果を示したものである。図17−1(a)に、DBとテーブルとの対応を示す。この実験では、このように複数のテーブルが複数のDBに分散配置された環境を用いた。また、ジョインMQTは、連合サーバ(Federation Server)に作成した。尚、図では、ジョインMQTが参照しているテーブルに下線を付して示している。
かかる環境において、今回の実験では、テーブル「ORDERS」において300行を、テーブル「LINEITEM」において1159行を、追加又は削除し、その後、MQTをリフレッシュした。これにより、dMQTの演算時間、テーブル「ORDERS」のロック時間、テーブル「LINEITEM」のロック時間は、図17−1(b)に示すようなものとなった。尚、今回の実験に使用した集約MQTのSELECT文を図17−2(c)に示す。
最後に、本実施の形態を適用するのに好適なコンピュータのハードウェア構成について説明する。図18は、このようなコンピュータのハードウェア構成の一例を示した図である。図示するように、コンピュータは、演算手段であるCPU(Central Processing Unit)10aと、M/B(マザーボード)チップセット10bを介してCPU10aに接続されたメインメモリ10cと、同じくM/Bチップセット10bを介してCPU10aに接続された表示機構10dとを備える。また、M/Bチップセット10bには、ブリッジ回路10eを介して、ネットワークインターフェイス10fと、磁気ディスク装置(HDD)10gと、音声機構10hと、キーボード/マウス10iと、フレキシブルディスクドライブ10jとが接続されている。
尚、図18において、各構成要素は、バスを介して接続される。例えば、CPU10aとM/Bチップセット10bの間や、M/Bチップセット10bとメインメモリ10cの間は、CPUバスを介して接続される。また、M/Bチップセット10bと表示機構10dとの間は、AGP(Accelerated Graphics Port)を介して接続されてもよいが、表示機構10dがPCI Express対応のビデオカードを含む場合、M/Bチップセット10bとこのビデオカードの間は、PCI Express(PCIe)バスを介して接続される。また、ブリッジ回路10eと接続する場合、ネットワークインターフェイス10fについては、例えば、PCI Expressを用いることができる。また、磁気ディスク装置10gについては、例えば、シリアルATA(AT Attachment)、パラレル転送のATA、PCI(Peripheral Components Interconnect)を用いることができる。更に、キーボード/マウス10i、及び、フレキシブルディスクドライブ10jについては、USB(Universal Serial Bus)を用いることができる。
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム(装置又は機器)、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ(CD−ROM)、コンパクトディスク−リード/ライト(CD−R/W)及びDVDが含まれる。
以上述べたように、本実施の形態では、異なるベーステーブルの差分データのみをサマリーテーブルの差分に反映させる演算を、異なるトランザクションで行うようにした。これにより、サマリーテーブルの差分リフレッシュを行う際に、ベーステーブルをロックする時間が短くなった。特に、分散DB環境において、MQTの差分リフレッシュを複数のトランザクションを用いて行うことで、業務への影響を抑えることが可能となった。
本発明の実施の形態におけるコンピュータシステムの構成を示した図である。 本発明の実施の形態で用いるベーステーブル及び差分テーブルの例を示した図である。 本発明の実施の形態における差分データ処理について示した図である。 本発明の実施の形態における差分データ処理部の動作を示したフローチャートである。 本発明の実施の形態における差分演算処理部の第1の動作を示したフローチャートである。 本発明の実施の形態における差分演算処理部の第1の動作のイメージを示した図である。 本発明の実施の形態における差分演算処理部の第1の動作のイメージを示した図である。 本発明の実施の形態における差分演算処理部の第2の動作を示したフローチャートである。 本発明の実施の形態における差分演算処理部の第2の動作のイメージを示した図である。 本発明の実施の形態において更に改善されるべき点について説明するための図である。 本発明の実施の形態におけるコンピュータシステムの構成の具体例を示した図である。 本発明の実施の形態においてMQTの差分を演算するのに用いるSQL文の例を示した図である。 本発明の実施の形態においてMQTの差分を演算するのに用いるSQL文の例を示した図である。 本発明の実施の形態においてMQTの差分を演算するのに用いるSQL文の例を示した図である。 本発明の実施の形態においてMQTの差分を演算するのに用いるSQL文の例を示した図である。 本発明の実施の形態においてMQTの差分を演算するのに用いるSQL文の例を示した図である。 本発明の実施の形態においてMQTの差分を演算するのに用いるSQL文の例を示した図である。 本発明の実施の形態に関する実験の結果を示した図である。 本発明の実施の形態に関する実験の結果を示した図である。 本発明の実施の形態に関する実験の結果を示した図である。 本発明の実施の形態に関する実験の結果を示した図である。 本発明の実施の形態を適用可能なコンピュータのハードウェア構成を示した図である。
符号の説明
111〜11n…ベーステーブル記憶部、12…サマリーテーブル記憶部、131〜13n…差分データ処理部、14…差分演算処理部、141…制御部、142…生成部

Claims (12)

  1. 複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするための装置であって、
    前記複数のベーステーブルのうちの指定されたベーステーブルの所定の時点までの更新内容を前記サマリーテーブルに反映させるための差分情報を、当該指定されたベーステーブルの更新内容を示す差分データを保持する差分テーブルと、当該指定されたベーステーブル以外の他のベーステーブルと、当該他のベーステーブルの更新内容を示す差分データを保持する差分テーブルとを用いて、当該指定されたベーステーブルの当該所定の時点以降の更新が可能で当該所定の時点以降の更新内容が当該差分情報の生成に用いられない状態で生成する生成部と、
    異なるベーステーブルを指定した場合に異なるトランザクションで前記生成部が前記差分情報を生成するように制御する制御部と
    を備えた、装置。
  2. 前記生成部は、前記複数のベーステーブルのうちの前記指定されたベーステーブル以外の全てのベーステーブルの更新が不可能な状態で、当該指定されたベーステーブル以外の全てのベーステーブルを参照して、前記差分情報を1つのトランザクションで生成する、請求項1の装置。
  3. 前記生成部は、1つのトランザクションで実行される処理であって、前記複数のベーステーブルのうちの前記指定されたベーステーブル以外の全てのベーステーブルから1つのベーステーブルを選択し、当該選択されたベーステーブルの更新が不可能な状態で当該選択されたベーステーブルを参照して、前記差分情報の元となる情報又は前記差分情報を生成する処理を、当該指定されたベーステーブル以外の全てのベーステーブルのうちの当該選択されたベーステーブル以外のベーステーブルについて行うことにより、前記差分情報を生成する、請求項1の装置。
  4. 前記生成部は、前記指定されたベーステーブルの更新内容を管理する領域において、前記差分情報の生成処理中は、前記所定の時点までの更新内容と、当該所定の時点以降の更新内容とを区別して管理することにより、当該指定されたベーステーブルの当該所定の時点以降の更新が可能で当該所定の時点以降の更新内容が当該差分情報の生成に用いられない状態にする、請求項1の装置。
  5. 前記生成部は、前記差分情報の生成処理中は、前記指定されたベーステーブルの更新内容を管理する領域で前記所定の時点以降の更新内容を管理する処理を停止することにより、当該指定されたベーステーブルの当該所定の時点以降の更新が可能で当該所定の時点以降の更新内容が当該差分情報の生成に用いられない状態にする、請求項1の装置。
  6. 複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするための方法であって、
    前記複数のベーステーブルのうちの特定のベーステーブルの所定の時点までの更新内容を特定するステップと、
    前記複数のベーステーブルのうちの前記特定のベーステーブル以外のn個(n≧1)のベーステーブルの更新を受け付けないようにするステップと、
    前記特定するステップで特定された更新内容を前記サマリーテーブルに反映させるための差分情報を、前記特定のベーステーブルの更新内容を示す差分データを保持する差分テーブルと、前記n個のベーステーブルと、当該n個のベーステーブルのそれぞれの更新内容を示す差分データを保持するn個の差分テーブルとを用いて、前記特定のベーステーブルの前記所定の時点以降の更新を受け付けつつ、当該所定の時点以降の更新内容を用いることなく、生成するステップと、
    前記n個のベーステーブルの更新を受け付けるようにするステップと
    を含む、方法。
  7. 前記生成するステップでは、前記特定するステップで特定された更新内容と、前記特定のベーステーブルの前記所定の時点以降の更新内容とを区別して管理することにより、当該所定の時点以降の更新を受け付けつつ、当該所定の時点以降の更新内容を用いないようにする、請求項6の方法。
  8. 複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするための方法であって、
    前記複数のベーステーブルのうちの第1のベーステーブルの所定の時点までの更新内容を特定するステップと、
    前記複数のベーステーブルのうちの第2のベーステーブルの更新を受け付けないようにするステップと、
    前記特定するステップで特定された更新内容を前記サマリーテーブルに反映させるための差分情報を、前記第1のベーステーブルの更新内容を示す差分データを保持する差分テーブルと、前記第2のベーステーブルと、当該第2のベーステーブルの更新内容を示す差分データを保持する差分テーブルとを用いて、前記第1のベーステーブルの前記所定の時点以降の更新を受け付けつつ、当該所定の時点以降の更新内容を用いることなく、生成するステップと、
    前記第2のベーステーブルの更新を受け付けるようにするステップと、
    前記複数のベーステーブルのうちの第3のベーステーブルの更新を受け付けないようにするステップと、
    前記差分情報を、前記第1のベーステーブルの更新内容を示す差分データを保持する差分テーブルと、前記第3のベーステーブルと、当該第3のベーステーブルの更新内容を示す差分データを保持する差分テーブルとを用いて、再生成するステップと、
    前記第3のベーステーブルの更新を受け付けるようにするステップと
    を含む、方法。
  9. 前記生成するステップでは、前記特定するステップで特定された更新内容と、前記第1のベーステーブルの前記所定の時点以降の更新内容とを区別して管理することにより、当該所定の時点以降の更新を受け付けつつ、当該所定の時点以降の更新内容を用いないようにする、請求項8の方法。
  10. 複数のベーステーブルに対するクエリーの結果を格納するサマリーテーブルをリフレッシュするためのプログラムであって、コンピュータに、
    前記複数のベーステーブルのうちの指定されたベーステーブルの所定の時点までの更新内容を前記サマリーテーブルに反映させるための差分情報を、当該指定されたベーステーブルの更新内容を示す差分データを保持する差分テーブルと、当該指定されたベーステーブル以外の他のベーステーブルと、当該他のベーステーブルの更新内容を示す差分データを保持する差分テーブルとを用いて、当該指定されたベーステーブルの当該所定の時点以降の更新が可能で当該所定の時点以降の更新内容が当該差分情報の生成に用いられない状態で生成する機能と、
    異なるベーステーブルを指定した場合に異なるトランザクションで前記差分情報が生成されるように制御する機能と
    を実現させる、プログラム。
  11. 前記生成する機能では、前記複数のベーステーブルのうちの前記指定されたベーステーブル以外の全てのベーステーブルの更新が不可能な状態で、当該指定されたベーステーブル以外の全てのベーステーブルを参照して、前記差分情報を1つのトランザクションで生成する、請求項10のプログラム。
  12. 前記生成する機能では、1つのトランザクションで実行される処理であって、前記複数のベーステーブルのうちの前記指定されたベーステーブル以外の全てのベーステーブルから1つのベーステーブルを選択し、当該選択されたベーステーブルの更新が不可能な状態で当該選択されたベーステーブルを参照して、前記差分情報の元となる情報又は前記差分情報を生成する処理を、当該指定されたベーステーブル以外の全てのベーステーブルのうちの当該選択されたベーステーブル以外のベーステーブルについて行うことにより、前記差分情報を生成する、請求項10のプログラム。
JP2006331213A 2006-12-07 2006-12-07 サマリーテーブルをリフレッシュするための装置、方法、及びプログラム Expired - Fee Related JP4380692B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2006331213A JP4380692B2 (ja) 2006-12-07 2006-12-07 サマリーテーブルをリフレッシュするための装置、方法、及びプログラム
US11/876,520 US8271440B2 (en) 2006-12-07 2007-10-22 Apparatus, method and program for refreshing a summary table

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006331213A JP4380692B2 (ja) 2006-12-07 2006-12-07 サマリーテーブルをリフレッシュするための装置、方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2008146264A JP2008146264A (ja) 2008-06-26
JP4380692B2 true JP4380692B2 (ja) 2009-12-09

Family

ID=39275752

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006331213A Expired - Fee Related JP4380692B2 (ja) 2006-12-07 2006-12-07 サマリーテーブルをリフレッシュするための装置、方法、及びプログラム

Country Status (2)

Country Link
US (1) US8271440B2 (ja)
JP (1) JP4380692B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10198494B2 (en) * 2006-05-18 2019-02-05 Allotz.Com Limited Control of distributed databases
JP5181283B2 (ja) * 2008-06-30 2013-04-10 インターナショナル・ビジネス・マシーンズ・コーポレーション データ処理装置、ワークフローシステム、データ処理方法及びコンピュータプログラム
US8239389B2 (en) * 2008-09-29 2012-08-07 International Business Machines Corporation Persisting external index data in a database
US9087105B2 (en) * 2012-10-04 2015-07-21 Adobe Systems Incorporated Rule-based extraction, transformation, and loading of data between disparate data sources
GB2524075A (en) 2014-03-14 2015-09-16 Ibm Advanced result cache refill
US10229150B2 (en) * 2015-04-23 2019-03-12 Splunk Inc. Systems and methods for concurrent summarization of indexed data

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6353828B1 (en) * 1999-05-14 2002-03-05 Oracle Corp. Concurrency control for transactions that update base tables of a materialized view using different types of locks
US6882993B1 (en) * 2002-01-28 2005-04-19 Oracle International Corporation Incremental refresh of materialized views with joins and aggregates after arbitrary DML operations to multiple tables
US7321898B1 (en) * 2002-04-04 2008-01-22 Ncr Corp. Locking mechanism for materialized views in a database system
US6952692B1 (en) * 2002-05-17 2005-10-04 Ncr Corporation Execution of requests in a parallel database system
US7818297B2 (en) * 2003-03-31 2010-10-19 Hewlett-Packard Development Company, L.P. System and method for refreshing a table using epochs
US20050102326A1 (en) * 2003-10-22 2005-05-12 Nitzan Peleg Method and apparatus for performing conflict resolution in database logging
US7302441B2 (en) * 2004-07-20 2007-11-27 International Business Machines Corporation System and method for gradually bringing rolled in data online with incremental deferred integrity processing
JP4488825B2 (ja) 2004-07-29 2010-06-23 タキロン株式会社 制電性樹脂成形体
US7930297B2 (en) * 2004-12-03 2011-04-19 Oracle International Corporation Materialized view maintenance and change tracking

Also Published As

Publication number Publication date
JP2008146264A (ja) 2008-06-26
US8271440B2 (en) 2012-09-18
US20080086449A1 (en) 2008-04-10

Similar Documents

Publication Publication Date Title
US10055440B2 (en) Database table re-partitioning using trigger-based capture and replay
CN105630863B (zh) 用于多版本并发提交状态的事务控制块
US9411866B2 (en) Replication mechanisms for database environments
JP6448609B2 (ja) データ取得方法及びシステム
CN107077495B (zh) 数据库管理系统中的高性能事务
US9336262B2 (en) Accelerated transactions with precommit-time early lock release
US10042910B2 (en) Database table re-partitioning using two active partition specifications
US9286300B2 (en) Archiving data in database management systems
US10452629B2 (en) Automatic maintenance of a set of indexes with different currency characteristics in a database management system
EP3519986B1 (en) Direct table association in in-memory databases
US8296269B2 (en) Apparatus and method for read consistency in a log mining system
US9053153B2 (en) Inter-query parallelization of constraint checking
JP2010257426A (ja) データベース間でデータを同期するための方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム
US20090319581A1 (en) Online Table Move
US20180137115A1 (en) High performance parallel indexing for forensics and electronic discovery
US11669535B1 (en) Maintaining at a target database system a copy of a source table of a source database system
US20190065495A1 (en) Offloading constraint enforcement in a hybrid dbms
US11144574B2 (en) System and method for managing database
US20090030880A1 (en) Model-Based Analysis
US8271440B2 (en) Apparatus, method and program for refreshing a summary table
US8719315B2 (en) Representation of business object in analytical application by combining replicated, analytical, and locally enriched data
US12254024B2 (en) Conditional replication of data
US20180150498A1 (en) Database management device, information processing system, and database management method
Fang et al. MaLT: A Framework for Managing Large Transactions in OceanBase
JP7024432B2 (ja) データベース管理システム、データ変換プログラム、データ変換方法及びデータ変換装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090421

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20090421

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20090515

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090602

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090722

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090901

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20090903

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090914

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121002

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131002

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees