(58)【調査した分野】(Int.Cl.,DB名)
前記書込セットは、下位マスタノードのデータベースのシャドウコピーと、自身のメモリ上に展開されたテーブルとタプルとの組み合わせ情報を含むヒープタプルマップとからなり、
上位マスタノードが前記書込セットを受信すると、前記ロック獲得情報との比較によっ
てアボートされなかったときに、当該書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているタプルのデータベースにおける更新の有無を検証するステップと、
前記で更新がなされているときには書込セットをアボートするステップと、
前記で更新がなされていないときには前記シャドウコピーを用いて自身のデータベースを更新するステップと、
が実行される、請求項1記載の追記型データベースの管理方法。
前記下位マスタノードは、前記上位マスタノードからのロック獲得情報に基づいて当該テーブルに対するロックを獲得したときには、ロック獲得結果情報として前記上位マスタノードに通知する、
請求項1または2に記載の追記型データベースの管理方法。
前記書込セットを受領した上位マスタノードは、当該書込セットからノードロック番号を読み出して、自身が保持するロック獲得命令に対応するロック番号と比較して、当該ノードロック番号よりも大きいロック番号に該当するロック獲得情報のみを前記書込セット中のテーブル情報との比較対象とする、
請求項9記載の追記型データベースの管理方法。
【発明を実施するための形態】
【0022】
<実施形態1>
本発明を図に基づいて説明する。
【0023】
図1は、本実施形態の階層的マスタノードの構造を示している。同図に示すように、上位マスタノード(MS101)の下に階層的に下位マスタノード(MS201,MS202・・・MS20nや、MS301,MS302・・・MS30n)を有するノード構成となっている。各ノード(情報処理装置)にはデータベースを有している。また上位マスタノード(MS101)にはスレーブを有しているが、他の下位マスタノードにもスレーブを有していてもよい。このようなマスタ・スレーブ構成の場合には両者間のデータベースの更新には本出願人によるPCT/JP2010/054311(本出願人による特許文献2に係る先行出願)に記載された更新管理技術を適用することができる。
【0024】
上記特許文献2がマスタノードのトランザクションログを下位のノードに複製(レプリケーション)すればよかったのに対して、本実施形態では、階層的なマルチマスタノードで構成されており下位マスタノードでもアップデート命令が実行されていた場合、上位からのトランザクションログの参照だけでは全下位ノードの整合性を保つことができない点に着目した点が特徴である。以下に説明する。
【0025】
図2は、下位マスタノード(MS201)の機能ブロック図であるが、上位マスタノード(MS101)も同様の機能を有している。
【0026】
同図に示すように、クライアント(CL)からデータベースの更新命令が入力されるとデータベース処理部(11b)は、メインメモリ(MM)上に構築されたバックエンドメモリ(BEM)上で書込セットを生成する。この書込セットは
図4に示すようにヒープタプルマップ(HTM)とシャドウコピー(SC)とで構成される。ここでは、マスタデータベース(11a)の行番号4を削除(DELETE)し、行番号5を新たな値(sc1)に書き換える(UPDATE)する更新命令が入力されたものと仮定する。
【0027】
このとき、データベース処理部11bは、マスタデータベース(11a)を参照しながら当該マスタデータベース(11a)に直接書き込むことは行わずに、バックエンドメモリ(BEM)で生成された書込セットを通信モジュール(11d)より上位マスタに送信する。
【0028】
このような処理は上位マスタノード(MS101)においても、下位マスタノード(MS201,MS202・・・MS20nや、MS301,MS302・・・MS30n)においても同様である。
【0029】
図3は、前記機能を実現するためのハードウエア構成を示している。上位マスタノード(MS101)は汎用の情報処理装置であり、中央処理装置(CPU)およびメインメモリ(MM)を中心にバス(BUS)で接続された大規模記憶装置(HD)、マスタデータベース(11a)、外部との通信のための通信インターフェース(I/O)(通信モジュール11d)を有している。なお、当該バス(BUS)又は通信インターフェース(I/O)を介してクライアント端末(CL)が接続されており、命令を受け付けるようになっている。なお、マスタデータベース(11a)は、大規模記憶装置(HD)上に構築され
ていてもよいし、メインメモリ(MM)上に構築されていてもよい。要するにマスタデータベース(11a)の構築場所は限定されるものではない。
【0030】
大規模記憶装置(HD)には、オペレーティングシステム(OS)とともに、アプリケーションプログラム(APL)が格納されており、当該プログラムをバス(BUS)および主記憶装置(MM)を介して中央処理装置(CPU)が読み込んで順次実行処理することによって、前述のマスタノードとしての機能が実現される。なお、説明は省略するが、下位マスタノード(MS201,MS202・・・MS20nや、MS301,MS302・・・MS30n)も同様の構成である。
【0031】
次に、
図2で説明したデータベース処理部(11b)による処理を
図4を用いてさらに詳細に説明する。なお、以下の説明では、下位マスタノードにおける書込セットの生成を簡略して説明するために、下位マスタノードにおいて所定のトランザクションに基づいて単一のテーブル上でしか更新が実行されていないことを前提として説明するが、巨大なデータベースシステムでは一つのトランザクションで複数のテーブルが更新される場合が通例であり、上位マスタノードはもとより下位マスタノードでも一つのトランザクションによって複数のテーブルが更新される。この点については
図7〜
図9を用いて後述する。
【0032】
同図は、下位マスタノード(MS201)におけるマスタデータベース(11a)と、書込セットとの関係を示している。マスタデータベース(11a)は行番号と、命令内容と、ポインタとによって構成されており、新たな命令がクライアント端末(CL)からなされる毎に行番号が追加されていく追記型のデータベースである。同図の場合、前記で説明したように、行番号4を削除(DELETE)し、行番号5を新たな命令内容に書き換える(sc1にUPDATE)する場合を示している。
【0033】
下位マスタノード(MS201)においてクライアント端末(CL)からの命令によりマスタデータベースに対してこのような更新命令がなされると、前述のように、バックエンドメモリ(BEM)上でヒープタプルマップ(HTM、ヒープファイル)とシャドウコピー(SC)とからなる書込セットが生成される。
【0034】
ヒープタプルマップ(HTM)には、元の行番号(ctid)と、新しい行の行番号(sctid)が関係付けられて登録されるようになっている。このようにヒープタプルマップ(HTM)はデータベースの更新毎に追加生成されていく。なお、行番号5の命令内容(sc1)が書き込まれる行番号はこの段階ではまだ不明であるため、sctidには新しい命令(sc1)を書き込んでおく。
【0035】
一方、シャドウコピー(SC)には、マスタデータベース(11a)を参照して書き換えられるべき行番号のシャドウコピーを生成する。このとき、新たに追加される行番号はこの段階では不明であるので、行番号には新たな命令(sc1)を書き込んでおく。
【0036】
なお、この段階で下位マスタノード(MS201)のデータベース処理部(11b)は、ヒープタプルマップ(HTM)の生成によりDELETE命令が適用される行番号4と、UPDATE命令が適用される旧行番号5は削除されることが既にわかるため、シャドウコピー(SC)としては新たな命令(sc1)だけを書き込んでおいてもよい。
【0037】
このようにして生成された書込セットは、当該下位マスタノード(MS201)から上位マスタノード(MS101)に送信される。
【0038】
上位マスタノード(MS101)において、データベース処理部11b(中央処理装置(CPU))は、前記下位マスタノード(MS201)から前記書込セットを受信すると
、前記更新命令にともなってトランザクションログ処理部(11c)を起動してトランザクションログの生成を開始する。そして、前記で受信した書込セットからヒープタプルマップ(HTM)を読み出して、自身のマスタデータベース(11a)と比較する。ここで、ターゲットとなっているタプル(ここでは行番号4,5および7)の内容がマスタデータベース(11a)上で更新されているか否かを検証する。
図5では、行番号4〜6については未更新であるため、行番号4に削除ポインタを付与し、書き換えられる旧番号5にも削除ポインタを付与する。そして、新たな行番号7に新しい命令(sc1)が書き込まれる。
【0039】
一方、下位マスタノード(M201)からの書込セット中のヒープタプルマップ(HTM)と自身のデータベースを比較して、上位マスタノード(M201)において既に別の書込セットによって当該行が更新されているときには、当該書込セットによる処理はアボート(中断)される。
【0040】
図6は、上位マスタノード(MS101)のマスタデータベース(11a)が上記により更新されたときにトランザクションログ処理部(11c)で生成されるトランザクションログの一例である。このトランザクションログは、少なくとも命令とトランザクション内容(行番号とそれに対する実行処理内容)が時系列で連続的に記録されたファイルである。
【0041】
同図によればトランザクションの開始命令(XB1)に続いて、命令番号と行番号とが対になったログが順次生成されている。たとえば、最初にDELETE命令(D1)として行番号4を削除し(D14)、次にUPDATE命令(U1)として行番号5を削除し行番号7を追加し(U157)、最後にこれらのコミット命令(XC1)を発行する。
【0042】
このトランザクションログは、通信モジュール(11d)より前記送信元の下位マスタノード(MS201)をはじめ、すべての下位マスタノード(MS202・・・MS20nや、MS301,MS302・・・MS30n)に対して配信される。
【0043】
前記トランザクションログを受信した下位マスタノードでは、当該トランザクションログを自身のデータベースに複製(レプリケーション)する。
【0044】
具体的には、下位マスタノード(たとえばM202)が
図6に示したトランザクションログを通信モジュール(11d)で受信すると、トランザクションログ処理部(11c)を起動してこのトランザクションログを自身のマスタデータベース(11a)にレプリケーションする。この結果、行番号4と5に削除ポインタが付与され、新たな行番号7が追加される。
【0045】
このように、下位マスタノードでは上位マスタノードから送信されるトランザクションログのレプリケーションによって統一的にデータベースが管理されることになる。
【0046】
以上の説明では、下位マスタノードにおける書込セットの生成を簡略して説明するために、下位マスタノードにおいて所定のトランザクションに基づいて単一のテーブル上でしか更新が実行されていないことを前提としたが、次に
図7〜
図9を用いて複数テーブルが更新された場合について説明する。
【0047】
図7および
図8はこのような複数のテーブルに対応したものであり、
図7はテーブル別(図ではT1〜T4)のヒープタプルマップ(HTM)とシャドウコピー(SC)との組み合わせを束にした書込セット(以下、「テーブル別書込セット」という)として上位マスタノードに送信する方法を示している。また、
図8はヒープタプルマップ(HTM)と
シャドウコピー(SC)の組み合わせ中にテーブル番号を記入して単一の書込セット(以下、「統合書込セット」という)として上位マスタノードに送信する方法を示している。
【0048】
このようなテーブル別書込セット(
図7)および統合書込セット(
図8)においても、ヒープタプルマップ(HTM)の生成によりDELETE命令が適用される行番号とUPDATE命令が適用される旧行番号は削除されることが既にわかるため、シャドウコピー(SC)としては新たな命令だけを書き込んでおいてもよいことは単一テーブルの場合と同様である。
【0049】
図7に示す例において、たとえばあるトランザクションによってテーブルT1およびT2のそれぞれが所定の下位マスタノードで更新されたとすると、このテーブルT1とT2のそれぞれについてヒープタプルマップ(HTM)とシャドウコピー(SC)との組み合
わせが生成され、この束がテーブル別書込セットとなる。
【0050】
テーブル別書込セットが上位マスタノードで受信されると、上位マスタノードではこのテーブル別書込セットの内容を自身のデータベースに反映させる。このとき、まずテーブル毎のヒープタプルマップ(HTM)に基づいて自身のデータベースにアクセスして当該タプルが既に別のテーブル別書込セット(通常の書込セットまたは後述の統合書込セットを含む)により更新されていないかをチェックする。このとき、更新されていない場合は、このテーブル別書込セット中のテーブル毎のシャドウコピーを参照し、当該タプルを更新する。他方、既に更新されていることを検出した場合には、このテーブル別書込セット全体をアボートする。具体的には、一つのテーブル(たとえばT1)のヒープタプルマップ(HTM)に対する上位マスタノードの該当行との間の競合が検出された場合、つまりテーブルT1のヒープタプルマップ(HTM)の該当行が既に他の書込セット等により更新されているときは、当該テーブル別書込セット全体(T1に対するヒープタプルマップ(HTM)とシャドウコピー(SC)の組み合わせ、およびテーブルT2に対するヒープタプルマップ(HTM)とシャドウコピー(SC)の組み合わせの双方)をアボートする。この理由は、テーブル別書込セットに含まれるテーブル毎のヒープタプルマップ(HTM)とシャドウコピー(SC)の組み合わせは単一のトランザクションに基づいて生成されているので、そのトランザクションの全ての処理が上位マスタノードのデータベースに反映されるか、あるいは全く反映されないものでなければデータベース内容に矛盾を生じてしまう。したがって、たとえ一つのテーブル(T1)についてのヒープタプルマップ(HTM)でも上位マスタノードのデータベースの更新情報と競合することが検出された場合には、テーブル別書込セット(T1およびT2それぞれに対するヒープタプルマップ(HTM)とシャドウコピー(SC)の組み合わせ)全体をアボートしなければならない。
【0051】
図8に示すヒープタプルマップ(HTM)とシャドウコピー(SC)の組み合わせ中にテーブル番号を記載した統合書込セットを上位マスタノードに適用する場合にも同様である。すなわち、
図8の統合書込セットが上位マスタノードで受信されると、ヒープタプルマップ(HTM)のエントリそれぞれについて、エントリに含まれるテーブル番号に該当する
テーブルの該当行がすでに別の統合書込セット等(通常の書込セットまたは前述のテーブ
ル別書込セット)により更新されていないかをチェックする。このとき、更新されていな
い場合は、この統合書込セットのシャドウコピーを参照して、当該テーブルの当該タプルを更新する。他方、すでに更新されていることを検出した場合には、この統合書込セット全体をアボートする。たとえばテーブルT1のヒープタプルマップ(HTM)の該当行が既に他の統合書込セット等(通常の書込セットまたは前述のテーブル別書込セットを含む)により更新されているときは、この統合書込セット全体がアボートされる。
【0052】
以上のように下位マスタノードで複数のテーブル情報を含むテーブル別書込セットまたは統合書込セット(
図7および
図8の場合)によって上位マスタノードが更新された場合
、上位マスタノードで生成されるトランザクションログもテーブル番号が付加されたフォーマットとなる。
図9はその一例を示したものである。
【0053】
同図によれば、トランザクションログのフォーマットは「XB1」、「D114」、「U1257」、「XC1」であるが、これはそれぞれ以下の意味を有している。
【0054】
トランザクション1の開始命令(XB1)に続いて、命令番号とテーブル番号と行番号とが組み合わされたログが順次生成されている。たとえば、最初にトランザクション1のDELETE命令(D1)としてテーブル1の行番号4を削除し(D114)、次にトランザクション1のUPDATE命令(U1)としてテーブル2の行番号5を削除し行番号7を追加し(U1257)最後にこれらのコミット命令(XC1)を発行する。
【0055】
このトランザクションログは、通信モジュール(11d)より前記送信元の下位マスタノード(MS201)をはじめ、すべての下位マスタノード(MS202・・・MS20nや、MS301,MS302・・・MS30n)に対して配信される。
【0056】
前記トランザクションログを受信した下位マスタノードでは、当該トランザクションログを自身のデータベースに複製(レプリケーション)する。
【0057】
具体的には、下位マスタノード(たとえばM202)が
図9に示したトランザクションログを通信モジュール(11d)で受信すると、トランザクションログ処理部(11c)を起動してこのトランザクションログを自身のマスタデータベース(11a)にレプリケーションする。この結果、トランザクション1としてテーブル1の行番号4に削除ポインタが付与され、テーブル2の行番号5に削除ポインタが付与されるとともに新たな行番号7が追加される。
【0058】
以上、本発明を実施形態に基づいて説明したが、本発明はこれに限定されるものではない。以下、その変形例について説明する。
【0059】
<上位マスタノードMS101でデータベースの更新が行われる場合>
下位マスタノード(たとえばMS201)でマスタデータベースの更新命令が発生した場合の処理については、
図2で説明したように、バックエンドメモリ(BEM)上でヒープタプルマップ(HTM、ヒープファイル)とシャドウコピー(SC)とからなる書込セット(複数テーブルの場合には
図7に示すテーブル別書込セットまたは
図8に示す統合書込セット)が生成されるが、上位マスタノード(MS101)でマスタデータベースの更新命令が発生した場合には、上位ノードに通知する必要がないため、書込セットは生成されない。すなわち、このような場合、上位ノード(MS101)では、
図5の左図に示すようにマスタデータベース(11a)に対して直接更新データの書込が行われるとともに、
図6に示すトランザクションログ(複数テーブルの場合には
図9に示すトランザクションログ)が生成される。このトランザクションログは下位マスタノードに配信され、前記トランザクションログを受信した下位マスタノードでは、当該トランザクションログを自身のマスタデータベースにレプリケーションする。
【0060】
<下位マスタノードで書込セットを生成している段階で検索処理が実行されたとき>
下位マスタノード(たとえばMS201)において、
図4に示すような書込セットを生成している段階で、当該下位マスタノードのマスタデータベースに対して検索が実行されたとき、書込セットの生成された行番号以外の行番号を対象とした検索であれば問題はないが、該当行(ここでは行番号4および行番号5)に対する検索が実行された場合、これらの行番号は既に削除されているため、検索対象にはできない。
【0061】
このとき、下位マスタノードで生成されている書込セットが
図7や
図8に示すような複数テーブルを前提としている場合も同様であるので、検索対象にはできない。
【0062】
このような場合には以下の2通りの対応が考えられる。
第1の類型は、データベース処理部(11b)は、マスタデータベース(11a)を参照した後に、ヒープタプルマップ(HTM)を参照する。そしてこのヒープタプルマップ(HTM)上で検索該当行番号がエントリされているか否かをチェックする。そしてエントリがあった場合には当該エントリが削除か更新かを判定し、更新の場合にはさらにシャドウコピー(SC)を参照して当該シャドウコピー(SC)のエントリ(sc1)を検索対象とする。たとえば
図4に示す例で、検索対象が行番号3である場合、データベース処理部(11b)は、メインメモリ(MM)上に構築されたバックエンドメモリ(BEM)上の書込セット内のヒープタプルマップ(HTM)を参照して、該当行(行番号3)がエントリされているか否かを判定する。
図4の例では、該当行はエントリされていない。その場合には、マスタデータベース11aに直接アクセスして該当行(行番号3)を検索する。
【0063】
一方、
図4に示す例で、検索対象が行番号4である場合、データベース処理部(11b)は書込セット内のヒープタプルマップ(HTM)を参照したときに、該当行(行番号4)がエントリされていることを検出する。この場合、マスタデータベース11aにアクセスしても、残存する該当行は既に削除する更新命令の対象となっているため、検索対象とはならない。データベース処理部(11b)は、ヒープタプルマップ(HTM)を参照して該当行(行番号4)が削除されていることを検出する。このように、検索対象行が削除されているため、データベース処理部(11b)は該当行を検索対象とはしない。
【0064】
一方、
図4に示す例で、検索対象が行番号5である場合、上記と同様に、ヒープタプルマップ(HTM)を参照して該当行(行番号5)に対応するシャドウコピー(SC)のエントリ(sc1)が作成されていることを検出する。
【0065】
このとき、データベース処理部(11b)は、シャドウコピー(SC)を参照して、行番号5を書き換えたエントリ(sc1)を検索対象とすればよい。
【0066】
以上単一のテーブルを更新する場合について説明したが、複数テーブルを更新する場合についても同様である。
【0067】
具体的には、
図7のテーブル別書込セットの場合には、検索の対象とするテーブルに対応するヒープタプルマップ(HTM)とシャドウコピー(SC)の組み合わせを取り出して用いる。
【0068】
マスタデータベースの検索対象のテーブルを参照した後に、そのテーブルに対応するヒープタプルマップ(HTM)を参照し、検索該当行番号がエントリされているか否かをチェックする。エントリが存在しない場合は、マスタデータベースの検索対象テーブルの該当行を検索対象とする。そしてエントリがあった場合には当該エントリが削除か更新かを判定し、更新の場合にはさらにシャドウコピー(SC)を参照して当該シャドウコピー(SC)のエントリを検索対象とする。削除の場合には、該当行を検索対象とはしない。
【0069】
図8の統合書込セットの場合には、ヒープタプルマップ(HTM)とシャドウコピー(SC)のエントリのうち、検索対象テーブルに対応するテーブル番号が付与されたエントリを取り出して用いる。
【0070】
マスタデータベースの検索対象のテーブルを参照した後に、上記で取り出した検索対象
テーブルに対応するヒープタプルマップ(HTM)のエントリを参照し、検索該当行番号が含まれているか否かをチェックする。エントリが含まれていない場合には、マスタデータベースの検索対象テーブルの該当行を検索対象とする。そしてエントリが含まれている場合には当該エントリが削除か更新かを判定し、更新の場合にはさらに上記で取り出したシャドウコピー(SC)のエントリを参照して当該エントリを検索対象とする。また、削除の場合には、該当行を検索対象とはしない。
【0071】
第2の類型では、データベース処理部(11b)はまずマスタデータベース(11a)を参照した後に、ヒープタプルマップ(HTM)の全体を参照する。このとき、検索対象となっている行がエントリされているか否かをチェックし、エントリされている行番号(ここでは行番号4および5)を全て削除されたものとする(検索対象から除外する)。次に、データベース処理部11bは、シャドウコピー(SC)を参照して、シャドウコピー内の追加されたエントリ(sc1)を参照しこれを検索対象とすればよい。
【0072】
図7のテーブル別書込セットの場合は、検索対象テーブルに対応するヒープタプルマップ(HTM)とシャドウコピー(SC)の組み合わせについて同様の処理を行う。
【0073】
図8の統合書込セットの場合は、ヒープタプルマップ(HTM)とシャドウコピー(SC)のエントリのうち、検索対象テーブルに対応するテーブル番号が付与されたエントリを取り出して、それらのエントリを用いて同様の処理を行う。
【0074】
<下位マスタで上位マスタからのトランザクションログによる更新が行われているときの競合が生じた場合>
上位マスタから配信されたトランザクションログによって下位マスタノードのデータベースにレプリケーションが行われているときに、該当行に対して下位マスタのデータベースの更新命令が実行されている場合、競合が発生することになる。
【0075】
具体的には、下位マスタノードへの更新命令に基づいて行番号4と5とを更新しているときに、上位マスタから行番号5がエントリされたトランザクションログが配信されてきたときがこれに該当する。
【0076】
このような場合には、下位マスタノードで作成された書込セットが上位マスタノードに送信されたとしても、上位マスタノードでは既に該当行に関するトランザクションログが配信されているため、前記書込セットは上位マスタノードで競合が検出されてアボートされることになる。したがって、当該下位マスタノードにおける競合は無視して差し支えない。なお、下位マスタノードで生成されている書込セットが複数テーブルに対応している場合(
図7および
図8に示す)でも同様である。
【0077】
一方、このような下位マスタノードでの競合を解決する別の方法としては、下位マスタノードにおいて書込セット(ヒープタプルマップ(HTM)とシャドウコピー(SC))を生成したときに、これらを当該下位マスタノード内のバックエンドメモリ(BEM)上に登録し、これらの領域を2以上のプロセス(具体的にはレプリケーションプロセスと書込セットの生成プロセス)から参照できるようにしておいてもよい。つまり、下位マスタノードにおいて、書込セット、さらに限定すればヒープタプルマップ(
図7および
図8に示したテーブル別書込セットおよび統合書込セットも含む)のみを共有メモリに配置しておくことが望ましい。
【0078】
この場合には、下位マスタノードがマスタデータベース11aのレプリケーションを実行する際に、バックエンドメモリ(BEM)上の書込セットを参照することによって、更新命令と矛盾する書込セットを下位マスタノードの段階でアボートさせることができる。
具体的には、トランザクションログ処理部11cは、前記バックエンドメモリ(BEM)を参照して、この更新命令によって更新しようとしている該当行がヒープタプルマップ(HTM)に含まれている場合には、当該ヒープタプルマップ(HTM)を生成しているトランザクションをアボートさせる。
【0079】
下位マスタノードで生成されている書込セットが複数テーブルに対応している場合(
図7および
図8に示す)でも同様である。
図7に示すテーブル別書込セットの場合、下位マスタノードにおいてテーブル別書込セット(ヒープタプルマップ(HTM)とシャドウコピー(SC)の束)を生成したときに、これらを当該下位マスタノード内のバックエンドメモリ(BEM)上に登録し、これらの領域を2以上のプロセス(具体的にはレプリケーションプロセスとテーブル別書込セットの生成プロセス)から参照できるようにしておいてもよい。つまり、下位マスタノードにおいて、テーブル別書込セット、さらに限定すればテーブル毎のヒープタプルマップのみを共有メモリに配置しておくことが望ましい。
【0080】
この場合には、下位マスタノードがマスタデータベース11aのレプリケーションを実行する際に、バックエンドメモリ(BEM)上のテーブル別書込セットを参照することによって、更新命令と矛盾するテーブル別書込セットを下位マスタノードの段階でアボートさせることができる。
【0081】
図8に示す統合書込セットの場合、単一のテーブル構成の場合と同様である。すなわち、ヒープタプルマップ中にテーブル番号が登録されているため、統合書込セット(ヒープタプルマップ(HTM)とシャドウコピー(SC))を生成したときに、これらを当該下位マスタノード内のバックエンドメモリ(BEM)上に登録し、その後の処理は単一のテーブル構成の場合と同じである。
【0082】
このように、ヒープタプルマップ(HTM)を共有メモリに配置して、複数プロセスから参照できるようにしたことにより、マルチマスタ方式のデータベースにおいても下位マスタノードの段階で、競合を防止できる。さらに、ヒープタプルマップ(HTM)のみを共有メモリに配置しておけばよいので、貴重な共有メモリを占有してしまうこともない。
【0083】
<実施形態2>
本発明の別の実施形態(実施形態2)を図に基づいて説明する。
【0084】
図10は、本実施形態の階層的マスタノードの構造を示している。同図に示すように、上位マスタノード(MS101)の下に階層的に中位マスタノード(MS201,MS202・・・MS20n)や、下位マスタノード(MS301,MS302・・・MS30n)を有するノード構成となっている。各ノード(情報処理装置)にはデータベースを有している。また上位マスタノード(MS101)にはスレーブ(SL)を有しているが、他の中位・下位マスタノードにもスレーブを有していてもよい。このようなマスタ・スレーブ構成の場合、両者間のデータベースの更新には本出願人による特開2006−293910号公報(本出願人による公開先行出願)に記載された更新管理技術を適用することができる。
【0085】
上記先行出願がマスタノードのトランザクションログデータを下位のノードに複製(レプリケーション)すればよかったのに対して、PCT/JP2011/068057号(本出願人による未公開出願)では階層的なマルチマスタノードで構成されたデータベースにおいて下位マスタノードでもアップデート命令が実行されていた場合、上位からのトランザクションログの参照だけでは全下位ノードの整合性を保つことができない点に着目して、下位マスタノードで自身のメモリ上に展開されたデータベースのシャドウコピーとヒープタプルマップとを書込セットとして上位マスタノードに送信して上位マスタノードの
更新を行う点が特徴だった。しかしこれらの先行技術では上位マスタノードでテーブル自体を削除したりテーブル構造に変更を加えるような場合は想定していなかった。そのために書込セットによる更新によってデータベースの整合性がとれなくなる事態を生じる可能性があった。本実施形態はこのような場合にデータベースのロック機能を利用してマルチマスタノード構造全体で整合性を保つ技術である。以下に説明する。
【0086】
図11は、中位マスタノード(MS201)・下位マスタノード(MS301)の機能ブロック図であるが、上位マスタノード(MS101)も同様の機能を有している。
【0087】
同図に示すように、クライアント(CL)からデータベースの更新命令が入力されるとデータベース処理部(11b)は、図示しないメインメモリ上に構築されたバックエンドメモリ(BEM)上で書込セットを生成する。この書込セットは
図12に示すようにヒープタプルマップ(HTM)とシャドウコピー(SC)とで構成される。ここでは、マスタデータベース(11a)の行番号4を削除(DELETE)し、行番号5を新たな値(sc1)に書き換える(UPDATE)する更新命令が入力されたものと仮定する。
【0088】
このとき、データベース処理部11bは、マスタデータベース(11a)を参照しながら当該マスタデータベース(11a)に直接書き込むことは行わずに、バックエンドメモリ(BEM)で生成された書込セットを通信モジュール(11d)を介して上位マスタに送信する。
【0089】
このような書込セットの生成・送信は、中位マスタノード(MS201,MS202・・・MS20n)や下位マスタノード(MS301,MS302・・・MS30n)においても同様である。
【0090】
ここで、上位マスタノード(MS101)で、テーブルを排他的に制御しなければならいような命令、たとえばテーブルの構造変更やテーブルの削除が発生したときには、そのテーブルに対するロック獲得命令を実行しそれに対応するロック番号を保持する。たとえば、テーブル1とテーブル3とテーブル2とテーブル4・・・に対するロック獲得命令が順次実行されたときには、テーブル1に対するロック番号は1番、テーブル3に対するロック番号は2番、テーブル2に対するロック番号は3番、テーブル4に対するロック番号は4番となり、これらのロック番号(1〜4)が保持される。
【0091】
このように、上位マスタノードでデータベースのテーブルに対するロック獲得命令が発生したときには、これをロック獲得情報として中位マスタノードおよび下位マスタノードに単独で通知するようにしてもよいし、後述のように上位マスタノードで生成されるトランザクションログに格納して中位マスタノードおよび下位マスタノードに通知してもよい。そして、前記上位マスタノードからロック獲得情報を受信した前記下位マスタノードでは、ロック獲得情報と競合するトランザクション、たとえばロック獲得情報が対象としているテーブルに対して更新を行っているトランザクションの有無をチェックして、そのようなトランザクションが存在しているときには、上位マスタノードで発生したロック獲得情報が優先されるため、この下位マスタノードにおけるトランザクションが廃棄される。
【0092】
以上、トランザクションが競合する場合の一例として、ロック獲得情報が対象としているテーブルに対して更新を行っているトランザクションが存在している場合を説明したが、トランザクションの競合とはこれに限られない。たとえば、上位マスタノードから通知されたロック獲得情報がテーブルを削除する際に獲得するロック獲得情報である場合には、下位マスタノードにおいて該当するテーブルを単に参照するだけのトランザクションが存在しているだけであっても、前記ロック獲得情報とは競合することになるため、このような下位マスタノードにおけるトランザクションは廃棄される。
【0093】
そして、当該ロック獲得情報を格納したトランザクションログ(
図14参照)を生成する。同図に示したトランザクションログは、XB1で命令開始、LT1でテーブル1のロック、DT1で当該テーブル1のデリート、XC1でそのコミットを意味している。トランザクションログにはこのような一群の命令が繰り返されて格納されている。本実施形態では、ロック獲得情報毎にシーケンシャルな番号を付与して管理している。たとえば、LT1はテーブル1に対するもので1番目のロック獲得命令、LT3はテーブル3に対するもので2番目のロック獲得命令、LT2はテーブル2に対するもので3番目のロック獲得命令。すなわち、この例ではLT1→LT3→LT2→LT4の順番でシーケンシャルにロック獲得番号1〜4が付与されて管理されている。
【0094】
しかし、このようなロック獲得命令をシーケンシャルに管理する方法としては、ログ毎に付与されているログシーケンス番号(LSN)を用いてもよい。
図14では、LT1はLSN=2,LT3はLSN=8、LT2はLSN=13、LT4はLSN=18となる。
【0095】
このトランザクションログは、前記上位マスタノード(MS101)から中位・下位マスタノード(MS201,MS202,MS20n,MS301,MS302,MS30n・・・)に送信される。
【0096】
それぞれの中位・下位マスタノードでは、前記トランザクションログを受信すると、前記トランザクションログの内容を自身のデータベースに対してレプリケーションする。
【0097】
ここで、ロック獲得命令についてのみ説明すれば、ロック獲得命令LT1,LT3,LT2,LT4を順次実行して自身の共有メモリ上のテーブルを排他ロック状態として、中位・下位マスタノードでの他のトランザクションによるメモリアクセスを制限する。このとき、ロック獲得命令(ロック獲得情報)と競合するトランザクション、たとえばロック獲得命令が対象としているテーブルに対して更新を行っているトランザクションの有無をチェックして、そのようなトランザクションが存在しているときには、上位マスタノードで発生したロック獲得命令が優先されるため、この下位マスタノードにおけるトランザクションが廃棄される。
【0098】
下位マスタノードにおいて、前記ロック獲得命令(LT1,LT3,LT2,LT4・・・)に基づいて順番にロックが獲得されると、当該下位マスタノードにおいてロックが獲得された最大値のロック獲得番号をノードロック番号(NLKN)として中位・上位マスタノードに通知する。
図15では、下位マスタノード(MS301)は3番目のロック獲得命令(LT2)まで完了しているのでNLKN=3(
図15では丸付き数字の3)、下位マスタノード(MS302)は2番目のロック獲得命令(LT3)まで完了しているのでNLKN=2(
図15で丸付き数字の2)となる。
【0099】
図12は、下位マスタノード(MS301)におけるマスタデータベース(11a)と、書込セットとの関係を示している。下位マスタノードにおけるマスタデータベース(11a)は行番号と、命令内容と、ポインタとによって構成されており、新たな命令がクライアント端末(CL)からなされる毎に行番号が追加されていく追記型のデータベースである。同図の場合、前記で説明したように、行番号4を削除(DELETE)し、行番号5を新たな命令内容に書き換える(sc1にUPDATE)する場合を示している。
【0100】
下位マスタノード(MS301)においてクライアント端末(CL)からの命令によりマスタデータベース(11a)に対してこのような更新命令がなされると、前述のように、バックエンドメモリ(BEM)上でヒープタプルマップ(HTM、ヒープファイル)と
シャドウコピー(SC)とからなる書込セットが生成される。
【0101】
ヒープタプルマップ(HTM)には、元の行番号(ctid)と、新しい行の行番号(sctid)が関係付けられて登録されるようになっている。このようにヒープタプルマップ(HTM)はデータベースの更新毎に追加生成されていく。なお、行番号5の命令内容(sc1)が書き込まれる行番号はこの段階ではまだ不明であるため、sctidには新しい命令(sc1)を書き込んでおく。
【0102】
一方、シャドウコピー(SC)には、マスタデータベース(11a)を参照して書き換えられるべき行番号のシャドウコピーを生成する。このとき、新たに追加される行番号はこの段階では不明であるので、行番号には新たな命令(sc1)を書き込んでおく。
【0103】
なお、この段階で下位マスタノード(MS301)のデータベース処理部(11b)は、ヒープタプルマップ(HTM)の生成によりDELETE命令が適用される行番号4と、UPDATE命令が適用される旧行番号5は削除されることが既にわかるため、シャドウコピー(SC)としては新たな命令(sc1)だけを書き込んでおいてもよい。
【0104】
このような書込セットは、
図16に示すようにテーブル毎に作成されるが、
図17に示すように単一の書込セット中のヒータプルマップ(HTM)の行番号(ctid)に関係付けてテーブル番号(T)を登録するようにしてもよい。
【0105】
前記書込セットには、前述のノードロック番号(NLKN)も格納される。このノードロッック番号(NLKN)は、前述のように、上位マスタノード(MS101)から配信(通知)されたトランザクションログ(
図14参照)に格納されたロック獲得命令(LT1,LT3,LT2,LT4)に対応して実行されたロック獲得番号の最大値である。
【0106】
前述の説明を繰り返すと、下位マスタノード(MS301)が
図14に示すようなトランザクションログを受信して、このトランザクションログのロック獲得命令(LT1,LT3,LT2,LT4)に基づいて3番目のロック獲得命令(LT2)まで完了している場合、このノードロック番号(NLKN)は「3」となり(NLKN=3)、
図15に示すように下位マスタノード(MS301)で生成される書込セットに格納される。一方、下位マスタノード(MS302)は、2番目のロック獲得命令(LT3)まで完了している場合、このノードロック番号(NLKN)は「2」となり(NLKN=2)、同図に示すように下位マスタノード(MS302)で生成される書込セットに格納される。
【0107】
このようにして生成された書込セットは、当該下位マスタノード(MS301,MS302)から上位マスタノード(MS101)に送信される。当該書込セットは、その間の中位マスタノード(MS202)を経由するが、当該中位マスタノード(MS202)は当該書込セットに対して何らの処理は行わない。
【0108】
上位マスタノード(MS101)において、データベース処理部11b(中央処理装置(CPU))は、前記下位マスタノード(MS301,MS302)から前記書込セットを受信すると、そこからヒープタプルマップ(HTM)を読み出して、自身のマスタデータベース(11a)と比較する。
図12ではターゲットとなっているタプル(ここでは行番号4,5および7)の内容がマスタデータベース(11a)上で更新されているか否かを検証する。ここでは行番号4〜6については未更新であるため、行番号4に削除ポインタを付与し、書き換えられる旧番号5にも削除ポインタを付与する。そして、新たな行番号7に新しい命令(sc1)が書き込まれる。
【0109】
このとき、本実施形態では全ての書込セットをマスタデータベース(11a)と比較す
るものではない。つまり、前述の比較ステップに先立って、書込セットに格納されたノードロック番号(NLKN)を読み出しておき、ノードロック番号(NLKN)よりも大きなロック番号に該当するロック獲得情報を参照し、そのロック獲得情報と書込セットが修正しようとしているテーブルとが競合していないかどうかを検証する。競合している場合には書込セットをアボートして当該書込セットを比較対象から除外する。このような検証を行う理由は、上位マスタノード(MS101)でロックが獲得されているにもかかわらず、下位マスタノードで前記ロックの獲得前のテーブルに基づいてそのテーブルに対してタプルの更新を行いその情報が書込セットとして上位マスタノード(MS101)に届いて当該タプルを含むテーブルを更新してしまった場合、上位マスタノード(MS101)がロック獲得中に行ったテーブルの構造の変更や削除と競合してマスタデータベース(11a)の整合性が損なわれてしまうためである。
【0110】
後述のヒープタプルマップ(HTM)を用いた競合の検出方法では、このようなデータベースの整合性の破壊を検出できないため、このようにロック獲得情報との比較を行い、事前に競合を検出しておく必要がある。
【0111】
一方、前記のロック番号との比較でアボートされなかった書込セットであっても、書込セット中のヒープタプルマップ(HTM)と上位マスタノードのマスタデータベース(11a)とを比較した結果、マスタデータベース(11a)の該当行が既に別の書込セットによって更新されているときには、マスタデータベース(11a)の更新が競合することになるため当該書込セットはアボートされる。
【0112】
次に、前記書込セットとは別に、下位マスタノード(MS301,MS302)において、トランザクションログでレプリケーションされたロック獲得命令に対応するロック獲得結果情報が中位マスタノード(MS202)を介して上位マスタノード(MS101)に通知される機構について
図15を用いて説明する。
【0113】
下位マスタノード(MS301,302)では、前述のトランザクションログに格納されたロック獲得命令(LT1,LT3,LT2,LT4・・・)を順次レプリケーション
して、そのロック獲得結果情報を得る。ここでは、具体的にはロック獲得命令順に付与されたロック獲得命令番号で管理すればよい。すなわちテーブル1のロック獲得命令(LT1)のロック獲得命令番号は「1」、次のテーブル3のロック獲得命令(LT3)のロック獲得命令番号は「2」、次のテーブル2のロック獲得命令(LT2)のロック獲得命令番号は「3」、さらに次のテーブル4のロック獲得命令(LT4)のロック番号は「4」
となる。
【0114】
そして、それぞれの下位マスタノード(MS301,MS302)では、ロックが獲得されたロック獲得命令番号の数値の最大値をノードロック番号(NLKN)で管理していることは前述の通りである。
【0115】
各下位マスタノード(MS301,MS302)からそれぞれのノードロック番号(NLKN)を上層の中位マスタノード(MS202)に送信する。中位マスタノード(MS202)では、自身が保有しているノードロック番号(NLKN=2)と、各下位マスタノードから通知されたノードロック番号(NLKN=3,2)とを比較して、その最も小さい値(ここでは2)を自身のツリーロック番号(TLKN=2)として更新する。
【0116】
なお、
図15において、中位マスタノード(MS201)ではその配下の下位マスタノードが存在しないため、自身のノードロック番号(NLKN=3)がそのまま当該中位マスタノード(MS201)を頂点としたツリーロック番号(TLKN=3)となる。
【0117】
各中位マスタノード(MS201,MS202)は、それぞれのツリーロック番号(TLKN=3,2)を上位マスタノード(MS101)に送信する。これを受信した上位マスタノード(MS101)では、これらの中から最小値(ここではTLKN=2)をクラスタロック番号(CLKN=2)として更新する。
【0118】
このクラスタロック番号(CLKN=2)は、前述のように全階層から収集されたクラスタ全体の全てのノードロック番号(NLKN)の最小値であるため、上位マスタノード(MS101)ではこのクラスタロック番号(CLKN=2)によってクラスタ全体のロック獲得状況を把握することができる。すなわち、クラスタロック番号(CLKN)が2である場合、この番号と等しいか小さいロック獲得命令は全てのノードで完了していることを意味する。
【0119】
したがって、上位マスタノード(MS101)はクラスタロック番号と等しいか小さいロック番号を持つロック獲得命令は、獲得が完了したと認識する。
【0120】
ここで、中位・下位マスタノードから順次受信したツリーロック番号(TLKN)との比較の他に、前記書込セットに格納された下位マスタノード(MS301,302)のノードロック番号(NLKN)と上位マスタノードにおいて自身が保持しているロック獲得命令番号との比較をも行う理由は以下の通りである。
【0121】
一般に下位マスタノード(MS301,302)で実行されたロック獲得結果情報(ノードロック番号:NLKN)が中位ノードのツリーロック番号(TLKN)を更新しながら上位マスタノード(MS101)に到達するまでには時間を要する。特にツリー階層構造が複雑なデータベースであればその到達遅延により処理効率が大幅に低下してしまう。特に各階層で最小値の比較を行っているため、どれか1個でも小さいNLKN(たとえばNLKN=2)があるとクラスタロック番号(CLKN)はいつまでも大きな値をとれないため、上位マスタノードでは、全ての書込セットをチェックしなければならない。
【0122】
一方、書込セットを発行した下位マスタノード(MS301)はNLKN=3が設定されているため、3番目のロック獲得命令までは既に完了していることになる。つまり、このノード(MS301)に関する限り、これよりも大きいロック番号「4」(LT4)に該当するロック獲得情報のみを前記書込セット中のテーブル情報との比較対象とすれば、上位マスタノード(MS101)における比較処理による負荷を低減できることになる。
【0123】
以上本発明を実施形態に基づいて説明したが、本願発明はこれに限定されるものではない。たとえば、ノードの階層構造については、上位マスタノード、中位マスタノードおよび下位マスタノードの3層構造(
図10,
図15および
図16)を例示したが、上位マスタノードと下位マスタノードの2層構造のものであってもよい。また、中位マスタノードが2層以上のものであってもよい。
【0124】
また、以上の説明では、ノードロック番号(NLKN)を中位、上位マスタノードに通知して順次ツリーロック番号(TLKN)、クラスタロック番号(CLKN)を更新する実施例を説明したが、これに限定されることはない。たとえば、上位マスタノード(MS101)は、中位マスタノード(MS201,MS202)または下位マスタノード(MS301,MS302)から送信される書込セットに含まれるノードロック番号(NLKN)をそれぞれの下位・中位マスタノードのノードロック番号(NLKN)とみなし、上位マスタノード(MS101)では、各中位・下位マスタノードから発行される書込セットを収集して、その書込セット中に格納されている全てのノードロック番号(NLKN)の最小値をクラスタロック番号(CLKN)とみなしてもよい。
【0125】
このように書込セットのノードロック番号(NLKN)を収集してクラスタロック番号(CLKN)を更新する利点としては、これらの書込セットとは別にノードロック番号(NLKN)を中位・上位マスタノードに通知してそれぞれのツリーロック番号(TLKN)を更新しながらさらに上層に送信する必要がないため、通知システムを簡略化できる。一方、この方法では、上位マスタノード(MS101)が全ての書込セットからノードロック番号(NLKN)の集計作業をしなければならないため、負荷が大きくなってしまう。