特許第6239697号(P6239697)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社Murakumoの特許一覧

<>
  • 特許6239697-データベースの管理方法 図000002
  • 特許6239697-データベースの管理方法 図000003
  • 特許6239697-データベースの管理方法 図000004
  • 特許6239697-データベースの管理方法 図000005
  • 特許6239697-データベースの管理方法 図000006
  • 特許6239697-データベースの管理方法 図000007
  • 特許6239697-データベースの管理方法 図000008
  • 特許6239697-データベースの管理方法 図000009
  • 特許6239697-データベースの管理方法 図000010
  • 特許6239697-データベースの管理方法 図000011
  • 特許6239697-データベースの管理方法 図000012
  • 特許6239697-データベースの管理方法 図000013
  • 特許6239697-データベースの管理方法 図000014
  • 特許6239697-データベースの管理方法 図000015
  • 特許6239697-データベースの管理方法 図000016
  • 特許6239697-データベースの管理方法 図000017
  • 特許6239697-データベースの管理方法 図000018
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6239697
(24)【登録日】2017年11月10日
(45)【発行日】2017年11月29日
(54)【発明の名称】データベースの管理方法
(51)【国際特許分類】
   G06F 12/00 20060101AFI20171120BHJP
【FI】
   G06F12/00 533J
   G06F12/00 535B
   G06F12/00 518A
【請求項の数】11
【全頁数】25
(21)【出願番号】特願2016-123887(P2016-123887)
(22)【出願日】2016年6月22日
(62)【分割の表示】特願2014-503377(P2014-503377)の分割
【原出願日】2012年3月8日
(65)【公開番号】特開2016-184432(P2016-184432A)
(43)【公開日】2016年10月20日
【審査請求日】2016年7月22日
(73)【特許権者】
【識別番号】301014269
【氏名又は名称】株式会社Murakumo
(74)【代理人】
【識別番号】100100549
【弁理士】
【氏名又は名称】川口 嘉之
(74)【代理人】
【識別番号】100123319
【弁理士】
【氏名又は名称】関根 武彦
(74)【代理人】
【識別番号】100145838
【弁理士】
【氏名又は名称】畑添 隆人
(72)【発明者】
【氏名】山田 浩之
【審査官】 大桃 由紀雄
(56)【参考文献】
【文献】 特開2006−164097(JP,A)
【文献】 特許第4719318(JP,B2)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、
いずれかの下位マスタノードのセッションにおいて、上位マスタノードに対して、当該下位のマスタノードのデータベースの更新対象となったテーブル情報を書込セットに登録して上位マスタノードに送信するステップと、
前記上位マスタノードにおいて、データベースのテーブルに対するロック獲得命令が発生したときには、当該ロック獲得情報を下位マスタノードに通知するとともに、そのロック獲得情報を上位マスタノードに保持するステップと、
前記上位マスタノードにおいて、前記下位マスタノードから受信した前記書込セット中のテーブル情報と前記で保持されたロック獲得情報とを比較して、競合するときには、前記書込セットをアボートし、競合しないときには、前記書込セットを用いて、前記上位マスタノードのデータベースを更新するステップと、
前記上位マスタノードからロック獲得情報を受信した前記下位マスタノードでは、ロック獲得情報が対象としているテーブルに対するトランザクションが存在しているときには、前記下位マスタノードにおいて当該トランザクションを廃棄するステップと、
前記下位マスタノードにおいて前記上位マスタノードからのロック獲得情報に基づいて対象となるテーブルのロックを獲得するステップと
前記書込セットを用いて前記上位マスタノードのデータベースが更新された場合に、該更新とともに、前記上位マスタノードにおいて該上位マスタノードの更新記録をトランザクションログとして生成するステップと、
前記トランザクションログを、前記送信元の下位マスタノードを含む下位マスタノードに配信するステップと、
前記下位マスタノードのトランザクションログ処理部が、受信したトランザクションログに基づいて自身のデータベースを更新するステップと、
が実行される、追記型データベースの管理方法。
【請求項2】
前記書込セットは、下位マスタノードのデータベースのシャドウコピーと、自身のメモリ上に展開されたテーブルとタプルとの組み合わせ情報を含むヒープタプルマップとからなり、
上位マスタノードが前記書込セットを受信すると、前記ロック獲得情報との比較によっ
てアボートされなかったときに、当該書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているタプルのデータベースにおける更新の有無を検証するステップと、
前記で更新がなされているときには書込セットをアボートするステップと、
前記で更新がなされていないときには前記シャドウコピーを用いて自身のデータベースを更新するステップと、
が実行される、請求項1記載の追記型データベースの管理方法。
【請求項3】
前記下位マスタノードは、前記上位マスタノードからのロック獲得情報に基づいて当該テーブルに対するロックを獲得したときには、ロック獲得結果情報として前記上位マスタノードに通知する、
請求項1または2に記載の追記型データベースの管理方法。
【請求項4】
前記上位マスタノードで発生したロック獲得情報はトランザクションログに格納されて下位マスタノードに通知される、
請求項1から3のいずれか1項に記載の追記型データベースの管理方法。
【請求項5】
前記上位マスタノードから送信されるロック獲得情報はシーケンシャルに管理されたロック番号がそれぞれ付与されており、
前記下位マスタノードでの前記ロックの獲得結果情報は、当該下位マスタノードにおいてロックが獲得された最大値のロック番号をノードロック番号として前記上位マスタノードに通知する、
請求項4記載の追記型データベースの管理方法。
【請求項6】
前記上位マスタノードと、前記下位マスタノードとの間に1または2以上の中位マスタノードが構築された階層構造を有しており、
前記各中位マスタノードは、1または2以上の下位マスタノードからノードロック番号の通知を受領すると、受領した各ノードロック番号を、自身が保持するノードロック番号と比較して、その中の最小値をツリーロック番号として更新するとともに、該ツリーロック番号をさらに上層の中位マスタノードまたは上位マスタノードに通知し、
前記1または2以上の中位マスタノードから前記通知を受領した前記上層の中位マスタノードは、受領した各ツリーロック番号を自身が保持するノードロック番号と比較して、その中の最小値を新たなツリーロック番号として更新するとともに、該ツリーロック番号をさらに上層の上位マスタノードに通知し、
前記下位マスタノードまたは前記上層の中位マスタノードから通知を受領した上位マスタノードは、通知された前記ツリーロック番号の中の最小値を新たなクラスタロック番号として更新し、当該クラスタロック番号よりも等しいか小さいロック番号に該当するロック獲得命令がクラスタ全体で完了したことを認識する、
請求項5記載の追記型データベースの管理方法。
【請求項7】
前記中位マスタノードは1階層または2以上の階層で構成されている、
請求項6記載の追記型データベースの管理方法。
【請求項8】
前記中位マスタノードが存在せずに、上位マスタノードと下位マスタノードとの2階層で構成されている、
請求項6または7のいずれかに記載の追記型データベースの管理方法。
【請求項9】
前記ロック獲得情報に基づくノードロック番号は前記書込セットに格納されて中位マスタノードまたは上位マスタノードに通知される、
請求項5から8のいずれか1項に記載の追記型データベースの管理方法。
【請求項10】
前記書込セットを受領した上位マスタノードは、当該書込セットからノードロック番号を読み出して、自身が保持するロック獲得命令に対応するロック番号と比較して、当該ノードロック番号よりも大きいロック番号に該当するロック獲得情報のみを前記書込セット中のテーブル情報との比較対象とする、
請求項9記載の追記型データベースの管理方法。
【請求項11】
前記シーケンシャルに管理されたロック番号は、上位マスタノードで生成されるトランザクションログに付与されるログシーケンス番号を用いることを特徴とする、
請求項5から10のいずれか1項に記載の追記型データベースの管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースの管理方法、特に複数のマスタノードがネットワークにより階層的に接続されているデータベースの管理方法に関する。
【背景技術】
【0002】
本出願人は、トランザクションログを用いてデータベースを管理する技術に着目し、特開2006−293910号公報(特許文献1)において、1対1のマスタ・スレーブ方式のデータ同期方法について提案し、さらにその後国際公開第2010/106991号(特許文献2)において、1対N個(Nは正整数)のマスタ・スレーブ方式のデータ同期方法の提案を行っている。
【0003】
ここで、トランザクションログとは、データベースに加えられた変更の履歴を、データベースの記録領域とは異なる領域に記録することにより、変更の永続性を維持しながら同時に操作の高速性を実現する技術である。
【0004】
特に特許文献1は、トランザクションログを利用してレプリケーションシステムを実現する点に着目しており、一方特許文献2は、クライアントより検索指示を受領したスレーブノードがマスタノードにリクエストメッセージを送信し、所定時間以内にマスタノードから返信メッセージを受領しなかったときに、マスタノードに対してマスタデータベースの更新にかかる最新バージョンまでのトランザクションログを要求し、該要求を受領したマスタノードは、スレーブノードへ該トランザクションログを送信し、このログを参照してスレーブノードは自身のレプリカデータベースを更新するものであった。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2006−293910号公報
【特許文献2】国際公開第2010/106991号
【発明の概要】
【発明が解決しようとする課題】
【0006】
ところで、前記特許文献2では、そのノード構成が単一のマスタノードに対して複数のミラーノードを備えたネットワーク構成であることが前提だった。
【0007】
そのためミラーノードが独自にデータ更新命令(INSERT、UPDATE、DELETE)を実行することはないため、マスタノードからのトランザクションログを参照して自身のデータベースをアップデートしてやればよかった。
【0008】
一方、データベースの多様化・複雑化にともなって、マスタノードを複数有する所謂マルチマスタ方式が注目されるようになってきている。この点について、マスタノード同士に対称性があるネットワーク構成(マスタノード同士が並列関係にあるとき)では、マスタノード間の更新情報に順位付けを行い、マスタノード間の同期をとるための理論等が提案されているが全ノードの同期をとるための手続きが複雑となり、競合時の解決策が現実的でなかった。
【0009】
本発明者はこのような点に鑑みて本発明をなし得たものであり、マスタノードを階層的に構築するとともに、その階層構造を利用して下位マスタノードの複数テーブルで更新が行われた場合でもノード間のデータベースの更新を確実かつ効率的に行うことのできるデ
ータベースの管理方法を実現することを技術的課題とする。
【課題を解決するための手段】
【0010】
本発明は、前記課題を解決するために、以下の手段を採用した。
本発明の第1の側面は、レコード更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、所定の下位マスタノードでデータベースの複数テーブルに対する更新命令が生じたときに、当該下位マスタノードのデータベース処理部が上位マスタノードに対して、自身のメモリ上に展開されたデータベースのテーブル毎のシャドウコピーとヒープタプルマップとの組み合わせを束にしたテーブル別書込セットとして生成・送信するステップと、前記上位マスタノードにおいて、前記下位マスタノードから受信した前記テーブル別書込セット中のテーブル毎のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当するテーブルの該当行が別のテーブル別書込セット等で更新されているか否かを検証するステップと、前記更新がなされているときには前記所定の下位マスタノードから送信されたテーブル別書込セット全体をアボートし、更新がなされていないときには前記テーブル別書込セット中のテーブル毎の前記シャドウコピーを用いて上位マスタノードのデータベースの該当テーブルの該当行を更新するとともに、上位マスタノードのテーブル番号を含む更新記録をトランザクションログとして生成するステップと、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信するステップと、前記下位マスタノードのトランザクションログ処理部は、前記で受信したトランザクションログに基づいて自身のデータベースの該当テーブルの該当行を更新するステップとからなるデータベースの管理方法である。
【0011】
本発明の第2の側面は、レコード更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、所定の下位マスタノードでデータベースの複数テーブルに対する更新命令が生じたときに、当該下位マスタノードのデータベース処理部が上位マスタノードに対して、自身のメモリ上に展開されたデータベースのテーブル番号を含むシャドウコピーとヒープタプルマップとを単一の統合書込セットとして生成・送信するステップと、前記上位マスタノードにおいて、前記下位マスタノードから受信した統合書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースのテーブル番号に対応するテーブルの該当行が別の統合書込セット等で更新されているか否かを検証するステップと、いずれかのテーブルで前記更新がなされているときには当該統合書込セット全体をアボートし、更新がなされていないときには前記統合書込セットのシャドウコピーを用いて上位マスタノードのデータベースのテーブル番号に対応するテーブルを更新するとともに、上位マスタノードでテーブル番号を含む更新記録をトランザクションログとして生成するステップと、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信するステップと、前記下位マスタノードのトランザクションログ処理部は、前記で受信したトランザクションログに基づいて自身のデータベースの該当テーブルの該当行を更新するステップとからなるデータベースの管理方法である。
【0012】
本発明の第3の側面は、前記下位マスタノードにおけるテーブル別書込セットに含まれるテーブル毎のシャドウコピーは、新規の追加行のみで構成する第1の側面記載のデータベースの管理方法である。
【0013】
本発明の第4の側面は、前記下位マスタノードにおける統合書込セットのシャドウコピーは、新規の追加行のみで構成する第2の側面記載のデータベースの管理方法である。
【0014】
本発明の第5の側面は、前記下位マスタノードで前記テーブル別書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行され
たとき、前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、前記テーブルに対応するヒープタプルマップを参照して検索処理において該当行番号がエントリされているか否かを判定し、エントリされていないときには前記マスタデータベースのテーブルを直接の検索対象とし、前記該当行番号がエントリされているときには、前記エントリが削除指示であるか更新指示であるかを判定し、削除指示であるときには該当行番号を検索対象から除外し、更新指示である場合には前記ヒープタプルマップ内の前記テーブルに対応するシャドウコピーのエントリを検索対象とするステップを実行する第1または第3の側面に記載のデータベースの管理方法である。
【0015】
本発明の第6の側面は、前記下位マスタノードで前記統合書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、ヒープタプルマップを参照して検索処理において該当テーブルの該当行番号がエントリされているか否かを判定し、エントリされていないときには前記マスタデータベースを直接の検索対象とし、前記該当行番号がエントリされているときには、前記エントリが削除指示であるか更新指示であるかを判定し、削除指示であるときには該当行番号を検索対象から除外し、更新指示である場合には前記ヒープタプルマップ内のシャドウコピーのエントリを検索対象とするステップを実行する第2または第4の側面に記載のデータベースの管理方法である。
【0016】
本発明の第7の側面は、前記下位マスタノードで前記テーブル別書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、前記テーブルに対応するヒープタプルマップの全体を参照して、検索対象となっている行番号のエントリを抽出してエントリされている行番号を全て削除されたものとして検索対象から除外するステップと、前記テーブルに対応するシャドウコピーを参照して、シャドウコピー内で追加されたエントリの行番号を参照して当該行番号のみを検索対象とするステップとを実行する第1または第3の側面に記載のデータベースの管理方法である。
【0017】
本発明の第8の側面は、前記下位マスタノードで前記統合書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、前記ヒープタプルマップの全体を参照して、検索対象となっているテーブル番号と行番号を持つエントリを抽出してエントリされている行番号を全て削除されたものとして検索対象から除外するステップと、前記シャドウコピーを参照して、シャドウコピー内で追加された検索対象となっているテーブルのエントリの行番号を参照して当該行番号のみを検索対象とするステップとを実行する第2または第4の側面に記載のデータベースの管理方法である。
【0018】
本発明の第9の側面は、前記下位マスタノードにおいてテーブル別書込セットまたは統合書込セットを生成したときに、これらを登録する下位マスタノード内のバックエンドメモリ(BEM)の領域は、少なくとも上位マスタノードから配信されたトランザクションデータによる更新命令を実行するトランザクションログ処理部が参照できるようにし、前記トランザクションログ処理部は、前記バックエンドメモリ(BEM)を参照して、この更新命令によって更新しようとしているテーブルの該当行が前記テーブル別書込セットの対応するテーブルのヒープタプルマップ(HTM)に含まれている場合、または統合書込セットのヒープタプルマップ(HTM)に含まれている場合には、当該ヒープタプルマップ(HTM)を生成しているトランザクションをアボートさせる第1〜4の側面のいずれか1項に記載のデータベースの管理方法である。
【0019】
本発明の第10の側面は、更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、いずれかの下位マスタノードのセッションにおいて、上位マスタノードに対して、当該下位のマスタノードのデータベースの更新対象となったテーブル情報を書込セットに登録して上位マスタノードに送信するステップと、前記上位マスタノードにおいて、データベースのテーブルに対するロック獲得命令が発生したときには、当該ロック獲得情報を下位マスタノードに通知するとともに、そのロック獲得情報を上位マスタノードに保持するステップと、前記上位マスタノードにおいて、前記下位マスタノードから受信した前記書込セット中のテーブル情報と前記で保持されたロック獲得情報とを比較して、競合するときには、前記書込セットをアボートするステップと、前記上位マスタノードからロック獲得情報を受信した前記下位マスタノードでは、ロック獲得情報と競合するトランザクションが存在しているときには、前記下位マスタノードにおいて当該トランザクションを廃棄するステップと、前記下位マスタノードにおいて前記上位マスタノードからのロック獲得情報に基づいて対象となるテーブルのロックを獲得するステップとからなる追記型データベースの管理方法である。
【発明の効果】
【0020】
本発明によれば、マルチマスタノードを階層的に構築し、下位マスタノードから上位マスタノードに対しては、自身のメモリ上に展開されたシャドウコピーとヒープタプルマップとを書込セットとして送信し、これを受信した上位マスタノードでは、当該行が既に別の書込セットによって更新されているか否かを検証して、更新されていないときには前記シャドウコピーとヒープタプルマップとを用いてデータベースの更新処理を行う。そして、その更新記録をトランザクションログとして下位マスタノードに送信することで、下位マスタノードから上位マスタノード、さらに上位マスタノードから配下の下位マスタノードに対して効率的に矛盾のないデータベース更新が可能となる。特に、上位マスタノードおよび下位マスタノードで複数のテーブルが更新されている場合に有効である。
【図面の簡単な説明】
【0021】
図1】本発明の実施形態1である階層的マスタノードのデータベース構造を示す概念図
図2】実施形態1のマスタノードの機能ブロック図
図3】実施形態1のマスタノードのハードウエアブロック図
図4】実施形態1の下位マスタノードのデータベースのページと生成される書込セット(ヒープタプルマップ(HTM)とシャドウコピー(SC))の関係を示す図
図5】実施形態1において、下位マスタノードから送信された書込セットを用いて上位マスタノードを更新する際の説明図
図6】実施形態1の上位マスタノードで生成されるトランザクションログを示す図
図7】実施形態1の変形例で、書込セットをテーブル(テーブル別書込セット)毎に生成する場合の説明図
図8】実施形態1の変形例で、単一の書込セット中にテーブル番号を付加した場合(統合書込セット)の説明図
図9】複数テーブルに対応したトランザクションログを示す図
図10】実施形態2の階層的マスタノードのデータベース構造を示す概念図
図11】実施形態2のマスタノードの機能ブロック図
図12】実施形態2の下位マスタノードのデータベースのページと生成される書込セット(ヒープタプルマップ(HTM)とシャドウコピー(SC))の関係を示す図
図13】実施形態2の書込セットとマスタデータベース(11a)との関係を示す図
図14】実施形態2の上位マスタノードで生成されるトランザクションログを示す説明図
図15】実施形態2の階層的マスタノードのデータベース構造において、ロック獲得情報の伝搬方法の説明図
図16】実施形態2においてテーブル毎に書込セットを作成する場合の説明図
図17】実施形態2において書込セット中にテーブル情報を記録する場合の説明図
【発明を実施するための形態】
【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)の集計作業をしなければならないため、負荷が大きくなってしまう。
【産業上の利用可能性】
【0126】
本発明は、階層構造を備えたマルチマスタノード構造のデータベース管理システムに利用できる。
【符号の説明】
【0127】
MS101 上位マスタノード
SL スレーブ
MS201,MS202・・・MS20n 下位マスタノード(中位マスタノード)
MS301,MS302・・・MS30n 下位マスタノード
CL クライアント端末
11a マスタデータベース
11b データベース処理部
11c トランザクションログ処理部
11d 通信モジュール
CPU 中央処理装置
MM 主記憶装置
BUS バス
HD 大規模記憶装置
I/O 通信インターフェース
HTM ヒープタプルマップ
SC シャドウコピー
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17