(57)【特許請求の範囲】
【請求項１】
レコード更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、
所定の下位マスタノードでデータベースの複数テーブルに対する更新命令が生じたときに、当該下位マスタノードのデータベース処理部が上位マスタノードに対して、自身のメモリ上に展開されたデータベースのテーブル毎のシャドウコピーとヒープタプルマップとの組み合わせを束にしたテーブル別書込セットとして生成・送信するステップと、
前記上位マスタノードにおいて、前記下位マスタノードから受信した前記テーブル別書込セット中のテーブル毎のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当するテーブルの該当行が別のテーブル別書込セット等で更新されているか否かを検証するステップと、
前記更新がなされているときには前記所定の下位マスタノードから送信されたテーブル別書込セット全体をアボートし、更新がなされていないときには前記テーブル別書込セット中のテーブル毎の前記シャドウコピーを用いて上位マスタノードのデータベースの該当テーブルの該当行を更新するとともに、上位マスタノードのテーブル番号を含む更新記録をトランザクションログとして生成するステップと、
前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信するステップと、前記下位マスタノードのトランザクションログ処理部は、前記で受信したトランザクションログに基づいて自身のデータベースの該当テーブルの該当行を更新するステップと
からなるデータベースの管理方法。
【請求項２】
レコード更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、
所定の下位マスタノードでデータベースの複数テーブルに対する更新命令が生じたときに、当該下位マスタノードのデータベース処理部が上位マスタノードに対して、自身のメモリ上に展開されたデータベースのテーブル番号を含むシャドウコピーとヒープタプルマップとを単一の統合書込セットとして生成・送信するステップと、
前記上位マスタノードにおいて、前記下位マスタノードから受信した統合書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースのテーブル番号に対応するテーブルの該当行が別の統合書込セット等で更新されているか否かを検証するステップと、
いずれかのテーブルで前記更新がなされているときには当該統合書込セット全体をアボートし、更新がなされていないときには前記統合書込セットのシャドウコピーを用いて上位マスタノードのデータベースのテーブル番号に対応するテーブルを更新するとともに、上位マスタノードでテーブル番号を含む更新記録をトランザクションログとして生成するステップと、
前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信するステップと、
前記下位マスタノードのトランザクションログ処理部は、前記で受信したトランザクションログに基づいて自身のデータベースの該当テーブルの該当行を更新するステップと
からなるデータベースの管理方法。
【請求項３】
前記下位マスタノードにおけるテーブル別書込セットに含まれるテーブル毎のシャドウコピーは、新規の追加行のみで構成する請求項１記載のデータベースの管理方法。
【請求項４】
前記下位マスタノードにおける統合書込セットのシャドウコピーは、新規の追加行のみで構成する請求項２記載のデータベースの管理方法。
【請求項５】
前記下位マスタノードで前記テーブル別書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、
前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、
前記テーブルに対応するヒープタプルマップを参照して検索処理において該当行番号がエントリされているか否かを判定し、エントリされていないときには前記マスタデータベースのテーブルを直接の検索対象とし、
前記該当行番号がエントリされているときには、前記エントリが削除指示であるか更新指示であるかを判定し、削除指示であるときには該当行番号を検索対象から除外し、更新指示である場合には前記ヒープタプルマップ内の前記テーブルに対応するシャドウコピーのエントリを検索対象とするステップ    
を実行する請求項１または３に記載のデータベースの管理方法。
【請求項６】
前記下位マスタノードで前記統合書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、
前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、
ヒープタプルマップを参照して検索処理において該当テーブルの該当行番号がエントリされているか否かを判定し、エントリされていないときには前記マスタデータベースを直接の検索対象とし、
前記該当行番号がエントリされているときには、前記エントリが削除指示であるか更新指示であるかを判定し、削除指示であるときには該当行番号を検索対象から除外し、更新指示である場合には前記ヒープタプルマップ内のシャドウコピーのエントリを検索対象とするステップ    
を実行する請求項２または４に記載のデータベースの管理方法。
【請求項７】
前記下位マスタノードで前記テーブル別書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、
前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、
前記テーブルに対応するヒープタプルマップの全体を参照して、検索対象となっている行番号のエントリを抽出してエントリされている行番号を全て削除されたものとして検索対象から除外するステップと、
前記テーブルに対応するシャドウコピーを参照して、シャドウコピー内で追加されたエントリの行番号を参照して当該行番号のみを検索対象とするステップと
を実行する請求項１または３に記載のデータベースの管理方法。
【請求項８】
前記下位マスタノードで前記統合書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、
前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、
前記ヒープタプルマップの全体を参照して、検索対象となっているテーブル番号と行番号を持つエントリを抽出してエントリされている行番号を全て削除されたものとして検索対象から除外するステップと、
前記シャドウコピーを参照して、シャドウコピー内で追加された検索対象となっているテーブルのエントリの行番号を参照して当該行番号のみを検索対象とするステップと
を実行する請求項２または４に記載のデータベースの管理方法。
【請求項９】
前記下位マスタノードにおいてテーブル別書込セットまたは統合書込セットを生成したときに、これらを登録する下位マスタノード内のバックエンドメモリ（ＢＥＭ）の領域は、少なくとも上位マスタノードから配信されたトランザクションデータによる更新命令を実行するトランザクションログ処理部が参照できるようにし、
前記トランザクションログ処理部は、前記バックエンドメモリ（ＢＥＭ）を参照して、この更新命令によって更新しようとしているテーブルの該当行が前記テーブル別書込セットの対応するテーブルのヒープタプルマップ（ＨＴＭ）に含まれている場合、または統合書込セットのヒープタプルマップ（ＨＴＭ）に含まれている場合には、当該ヒープタプルマップ（ＨＴＭ）を生成しているトランザクションをアボートさせる請求項１〜４のいずれか１項に記載のデータベースの管理方法。
【請求項１０】
更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、
いずれかの下位マスタノードのセッションにおいて、上位マスタノードに対して、当該下位のマスタノードのデータベースの更新対象となったテーブル情報を書込セットに登録して上位マスタノードに送信するステップと、
前記上位マスタノードにおいて、データベースのテーブルに対するロック獲得命令が発生したときには、当該ロック獲得情報を下位マスタノードに通知するとともに、そのロック獲得情報を上位マスタノードに保持するステップと、
前記上位マスタノードにおいて、前記下位マスタノードから受信した前記書込セット中のテーブル情報と前記で保持されたロック獲得情報とを比較して、競合するときには、前記書込セットをアボートするステップと、
前記上位マスタノードからロック獲得情報を受信した前記下位マスタノードでは、ロック獲得情報と競合するトランザクションが存在しているときには、前記下位マスタノードにおいて当該トランザクションを廃棄するステップと、
前記下位マスタノードにおいて前記上位マスタノードからのロック獲得情報に基づいて対象となるテーブルのロックを獲得するステップと
からなる追記型データベースの管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースの管理方法、特に複数のマスタノードがネットワークにより階層的に接続されているデータベースの管理方法に関する。
【背景技術】
【０００２】
本出願人は、トランザクションログを用いてデータベースを管理する技術に着目し、特開２００６−２９３９１０号公報（特許文献１）において、１対１のマスタ・スレーブ方式のデータ同期方法について提案し、さらにその後国際公開第２０１０／１０６９９１号（特許文献２）において、１対Ｎ個（Ｎは正整数）のマスタ・スレーブ方式のデータ同期方法の提案を行っている。【０００３】
ここで、トランザクションログとは、データベースに加えられた変更の履歴を、データベースの記録領域とは異なる領域に記録することにより、変更の永続性を維持しながら同時に操作の高速性を実現する技術である。【０００４】
特に特許文献１は、トランザクションログを利用してレプリケーションシステムを実現する点に着目しており、一方特許文献２は、クライアントより検索指示を受領したスレーブノードがマスタノードにリクエストメッセージを送信し、所定時間以内にマスタノードから返信メッセージを受領しなかったときに、マスタノードに対してマスタデータベースの更新にかかる最新バージョンまでのトランザクションログを要求し、該要求を受領したマスタノードは、スレーブノードへ該トランザクションログを送信し、このログを参照してスレーブノードは自身のレプリカデータベースを更新するものであった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２９３９１０号公報
【特許文献２】国際公開第２０１０／１０６９９１号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、前記特許文献２では、そのノード構成が単一のマスタノードに対して複数のミラーノードを備えたネットワーク構成であることが前提だった。【０００７】
そのためミラーノードが独自にデータ更新命令（INSERT、UPDATE、DELETE）を実行することはないため、マスタノードからのトランザクションログを参照して自身のデータベースをアップデートしてやればよかった。【０００８】
一方、データベースの多様化・複雑化にともなって、マスタノードを複数有する所謂マルチマスタ方式が注目されるようになってきている。この点について、マスタノード同士に対称性があるネットワーク構成（マスタノード同士が並列関係にあるとき）では、マスタノード間の更新情報に順位付けを行い、マスタノード間の同期をとるための理論等が提案されているが全ノードの同期をとるための手続きが複雑となり、競合時の解決策が現実的でなかった。【０００９】
本発明者はこのような点に鑑みて本発明をなし得たものであり、マスタノードを階層的に構築するとともに、その階層構造を利用して下位マスタノードの複数テーブルで更新が行われた場合でもノード間のデータベースの更新を確実かつ効率的に行うことのできるデータベースの管理方法を実現することを技術的課題とする。
【課題を解決するための手段】
【００１０】
本発明は、前記課題を解決するために、以下の手段を採用した。
本発明の請求項１は、レコード更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、所定の下位マスタノードでデータベースの複数テーブルに対する更新命令が生じたときに、当該下位マスタノードのデータベース処理部が上位マスタノードに対して、自身のメモリ上に展開されたデータベースのテーブル毎のシャドウコピーとヒープタプルマップとの組み合わせを束にしたテーブル別書込セットとして生成・送信するステップと、前記上位マスタノードにおいて、前記下位マスタノードから受信した前記テーブル別書込セット中のテーブル毎のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当するテーブルの該当行が別のテーブル別書込セット等で更新されているか否かを検証するステップと、前記更新がなされているときには前記所定の下位マスタノードから送信されたテーブル別書込セット全体をアボートし、更新がなされていないときには前記テーブル別書込セット中のテーブル毎の前記シャドウコピーを用いて上位マスタノードのデータベースの該当テーブルの該当行を更新するとともに、上位マスタノードのテーブル番号を含む更新記録をトランザクションログとして生成するステップと、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信するステップと、前記下位マスタノードのトランザクションログ処理部は、前記で受信したトランザクションログに基づいて自身のデータベースの該当テーブルの該当行を更新するステップとからなるデータベースの管理方法である。【００１１】
本発明の請求項２は、レコード更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、所定の下位マスタノードでデータベースの複数テーブルに対する更新命令が生じたときに、当該下位マスタノードのデータベース処理部が上位マスタノードに対して、自身のメモリ上に展開されたデータベースのテーブル番号を含むシャドウコピーとヒープタプルマップとを単一の統合書込セットとして生成・送信するステップと、前記上位マスタノードにおいて、前記下位マスタノードから受信した統合書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースのテーブル番号に対応するテーブルの該当行が別の統合書込セット等で更新されているか否かを検証するステップと、いずれかのテーブルで前記更新がなされているときには当該統合書込セット全体をアボートし、更新がなされていないときには前記統合書込セットのシャドウコピーを用いて上位マスタノードのデータベースのテーブル番号に対応するテーブルを更新するとともに、上位マスタノードでテーブル番号を含む更新記録をトランザクションログとして生成するステップと、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信するステップと、前記下位マスタノードのトランザクションログ処理部は、前記で受信したトランザクションログに基づいて自身のデータベースの該当テーブルの該当行を更新するステップとからなるデータベースの管理方法である。【００１２】
本発明の請求項３は、前記下位マスタノードにおけるテーブル別書込セットに含まれるテーブル毎のシャドウコピーは、新規の追加行のみで構成する請求項１記載のデータベースの管理方法である。【００１３】
本発明の請求項４は、前記下位マスタノードにおける統合書込セットのシャドウコピーは、新規の追加行のみで構成する請求項２記載のデータベースの管理方法である。【００１４】
本発明の請求項５は、前記下位マスタノードで前記テーブル別書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、前記テーブルに対応するヒープタプルマップを参照して検索処理において該当行番号がエントリされているか否かを判定し、エントリされていないときには前記マスタデータベースのテーブルを直接の検索対象とし、前記該当行番号がエントリされているときには、前記エントリが削除指示であるか更新指示であるかを判定し、削除指示であるときには該当行番号を検索対象から除外し、更新指示である場合には前記ヒープタプルマップ内の前記テーブルに対応するシャドウコピーのエントリを検索対象とするステップを実行する請求項１または３に記載のデータベースの管理方法である。【００１５】
本発明の請求項６は、前記下位マスタノードで前記統合書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、ヒープタプルマップを参照して検索処理において該当テーブルの該当行番号がエントリされているか否かを判定し、エントリされていないときには前記マスタデータベースを直接の検索対象とし、前記該当行番号がエントリされているときには、前記エントリが削除指示であるか更新指示であるかを判定し、削除指示であるときには該当行番号を検索対象から除外し、更新指示である場合には前記ヒープタプルマップ内のシャドウコピーのエントリを検索対象とするステップを実行する請求項２または４に記載のデータベースの管理方法である。【００１６】
本発明の請求項７は、前記下位マスタノードで前記テーブル別書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、前記テーブルに対応するヒープタプルマップの全体を参照して、検索対象となっている行番号のエントリを抽出してエントリされている行番号を全て削除されたものとして検索対象から除外するステップと、前記テーブルに対応するシャドウコピーを参照して、シャドウコピー内で追加されたエントリの行番号を参照して当該行番号のみを検索対象とするステップとを実行する請求項１または３に記載のデータベースの管理方法である。【００１７】
本発明の請求項８は、前記下位マスタノードで前記統合書込セットを生成している段階で当該下位マスタノードのマスタデータベースのテーブルに検索処理が実行されたとき、前記下位マスタノードのデータベース処理部は、前記マスタデータベースのテーブルを参照するステップと、前記ヒープタプルマップの全体を参照して、検索対象となっているテーブル番号と行番号を持つエントリを抽出してエントリされている行番号を全て削除されたものとして検索対象から除外するステップと、前記シャドウコピーを参照して、シャドウコピー内で追加された検索対象となっているテーブルのエントリの行番号を参照して当該行番号のみを検索対象とするステップとを実行する請求項２または４に記載のデータベースの管理方法である。【００１８】
本発明の請求項９は、前記下位マスタノードにおいてテーブル別書込セットまたは統合書込セットを生成したときに、これらを登録する下位マスタノード内のバックエンドメモリ（ＢＥＭ）の領域は、少なくとも上位マスタノードから配信されたトランザクションデータによる更新命令を実行するトランザクションログ処理部が参照できるようにし、前記トランザクションログ処理部は、前記バックエンドメモリ（ＢＥＭ）を参照して、この更新命令によって更新しようとしているテーブルの該当行が前記テーブル別書込セットの対応するテーブルのヒープタプルマップ（ＨＴＭ）に含まれている場合、または統合書込セットのヒープタプルマップ（ＨＴＭ）に含まれている場合には、当該ヒープタプルマップ（ＨＴＭ）を生成しているトランザクションをアボートさせる請求項１〜４のいずれか１項に記載のデータベースの管理方法である。【００１９】
本発明の請求項１０は、更新が可能な上位と下位のマスタノードを階層的に有する追記型データベースの管理方法であって、いずれかの下位マスタノードのセッションにおいて、上位マスタノードに対して、当該下位のマスタノードのデータベースの更新対象となったテーブル情報を書込セットに登録して上位マスタノードに送信するステップと、前記上位マスタノードにおいて、データベースのテーブルに対するロック獲得命令が発生したときには、当該ロック獲得情報を下位マスタノードに通知するとともに、そのロック獲得情報を上位マスタノードに保持するステップと、前記上位マスタノードにおいて、前記下位マスタノードから受信した前記書込セット中のテーブル情報と前記で保持されたロック獲得情報とを比較して、競合するときには、前記書込セットをアボートするステップと、前記上位マスタノードからロック獲得情報を受信した前記下位マスタノードでは、ロック獲得情報と競合するトランザクションが存在しているときには、前記下位マスタノードにおいて当該トランザクションを廃棄するステップと、前記下位マスタノードにおいて前記上位マスタノードからのロック獲得情報に基づいて対象となるテーブルのロックを獲得するステップとからなる追記型データベースの管理方法である。
【発明の効果】
【００２０】
本発明によれば、マルチマスタノードを階層的に構築し、下位マスタノードから上位マスタノードに対しては、自身のメモリ上に展開されたシャドウコピーとヒープタプルマップとを書込セットとして送信し、これを受信した上位マスタノードでは、当該行が既に別の書込セットによって更新されているか否かを検証して、更新されていないときには前記シャドウコピーとヒープタプルマップとを用いてデータベースの更新処理を行う。そして、その更新記録をトランザクションログとして下位マスタノードに送信することで、下位マスタノードから上位マスタノード、さらに上位マスタノードから配下の下位マスタノードに対して効率的に矛盾のないデータベース更新が可能となる。特に、上位マスタノードおよび下位マスタノードで複数のテーブルが更新されている場合に有効である。
【図面の簡単な説明】
【００２１】
【図１】本発明の実施形態１である階層的マスタノードのデータベース構造を示す概念図
【図２】実施形態１のマスタノードの機能ブロック図
【図３】実施形態１のマスタノードのハードウエアブロック図
【図４】実施形態１の下位マスタノードのデータベースのページと生成される書込セット（ヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ））の関係を示す図
【図５】実施形態１において、下位マスタノードから送信された書込セットを用いて上位マスタノードを更新する際の説明図
【図６】実施形態１の上位マスタノードで生成されるトランザクションログを示す図
【図７】実施形態１の変形例で、書込セットをテーブル(テーブル別書込セット)毎に生成する場合の説明図
【図８】実施形態１の変形例で、単一の書込セット中にテーブル番号を付加した場合（統合書込セット）の説明図
【図９】複数テーブルに対応したトランザクションログを示す図
【図１０】実施形態２の階層的マスタノードのデータベース構造を示す概念図
【図１１】実施形態２のマスタノードの機能ブロック図
【図１２】実施形態２の下位マスタノードのデータベースのページと生成される書込セット（ヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ））の関係を示す図
【図１３】実施形態２の書込セットとマスタデータベース（１１ａ）との関係を示す図
【図１４】実施形態２の上位マスタノードで生成されるトランザクションログを示す説明図
【図１５】実施形態２の階層的マスタノードのデータベース構造において、ロック獲得情報の伝搬方法の説明図
【図１６】実施形態２においてテーブル毎に書込セットを作成する場合の説明図
【図１７】実施形態２において書込セット中にテーブル情報を記録する場合の説明図
【発明を実施するための形態】
【００２２】
＜実施形態１＞
本発明を図に基づいて説明する。
【００２３】
図１は、本実施形態の階層的マスタノードの構造を示している。同図に示すように、上位マスタノード（ＭＳ１０１）の下に階層的に下位マスタノード（ＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｎ）を有するノード構成となっている。各ノード（情報処理装置）にはデータベースを有している。また上位マスタノード（ＭＳ１０１）にはスレーブを有しているが、他の下位マスタノードにもスレーブを有していてもよい。このようなマスタ・スレーブ構成の場合には両者間のデータベースの更新には本出願人によるＰＣＴ／ＪＰ２０１０／０５４３１１（本出願人による特許文献２に係る先行出願）に記載された更新管理技術を適用することができる。
【００２４】
上記特許文献２がマスタノードのトランザクションログを下位のノードに複製（レプリケーション）すればよかったのに対して、本実施形態では、階層的なマルチマスタノードで構成されており下位マスタノードでもアップデート命令が実行されていた場合、上位からのトランザクションログの参照だけでは全下位ノードの整合性を保つことができない点に着目した点が特徴である。以下に説明する。
【００２５】
図２は、下位マスタノード（ＭＳ２０１）の機能ブロック図であるが、上位マスタノード（ＭＳ１０１）も同様の機能を有している。
【００２６】
同図に示すように、クライアント（ＣＬ）からデータベースの更新命令が入力されるとデータベース処理部（１１ｂ）は、メインメモリ（ＭＭ）上に構築されたバックエンドメモリ（ＢＥＭ）上で書込セットを生成する。この書込セットは図４に示すようにヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）とで構成される。ここでは、マスタデータベース（１１ａ）の行番号４を削除（ＤＥＬＥＴＥ）し、行番号５を新たな値（ｓｃ１）に書き換える（ＵＰＤＡＴＥ）する更新命令が入力されたものと仮定する。
【００２７】
このとき、データベース処理部１１ｂは、マスタデータベース（１１ａ）を参照しながら当該マスタデータベース（１１ａ）に直接書き込むことは行わずに、バックエンドメモリ（ＢＥＭ）で生成された書込セットを通信モジュール（１１ｄ）より上位マスタに送信する。
【００２８】
このような処理は上位マスタノード（ＭＳ１０１）においても、下位マスタノード（ＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｎ）においても同様である。
【００２９】
図３は、前記機能を実現するためのハードウエア構成を示している。上位マスタノード（ＭＳ１０１）は汎用の情報処理装置であり、中央処理装置（ＣＰＵ）およびメインメモリ（ＭＭ）を中心にバス（ＢＵＳ）で接続された大規模記憶装置（ＨＤ）、マスタデータベース（１１ａ）、外部との通信のための通信インターフェース（Ｉ／Ｏ）（通信モジュール１１ｄ）を有している。なお、当該バス（ＢＵＳ）又は通信インターフェース（Ｉ／Ｏ）を介してクライアント端末（ＣＬ）が接続されており、命令を受け付けるようになっている。なお、マスタデータベース（１１ａ）は、大規模記憶装置（ＨＤ）上に構築されていてもよいし、メインメモリ（ＭＭ）上に構築されていてもよい。要するにマスタデータベース（１１ａ）の構築場所は限定されるものではない。
【００３０】
大規模記憶装置（ＨＤ）には、オペレーティングシステム（ＯＳ）とともに、アプリケーションプログラム（ＡＰＬ）が格納されており、当該プログラムをバス（ＢＵＳ）および主記憶装置（ＭＭ）を介して中央処理装置（ＣＰＵ）が読み込んで順次実行処理することによって、前述のマスタノードとしての機能が実現される。なお、説明は省略するが、下位マスタノード（ＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｎ）も同様の構成である。
【００３１】
次に、図２で説明したデータベース処理部（１１ｂ）による処理を図４を用いてさらに詳細に説明する。なお、以下の説明では、下位マスタノードにおける書込セットの生成を簡略して説明するために、下位マスタノードにおいて所定のトランザクションに基づいて単一のテーブル上でしか更新が実行されていないことを前提として説明するが、巨大なデータベースシステムでは一つのトランザクションで複数のテーブルが更新される場合が通例であり、上位マスタノードはもとより下位マスタノードでも一つのトランザクションによって複数のテーブルが更新される。この点については図７〜図９を用いて後述する。
【００３２】
同図は、下位マスタノード（ＭＳ２０１）におけるマスタデータベース（１１ａ）と、書込セットとの関係を示している。マスタデータベース（１１ａ）は行番号と、命令内容と、ポインタとによって構成されており、新たな命令がクライアント端末（ＣＬ）からなされる毎に行番号が追加されていく追記型のデータベースである。同図の場合、前記で説明したように、行番号４を削除（ＤＥＬＥＴＥ）し、行番号５を新たな命令内容に書き換える（ｓｃ１にＵＰＤＡＴＥ）する場合を示している。
【００３３】
下位マスタノード（ＭＳ２０１）においてクライアント端末（ＣＬ）からの命令によりマスタデータベースに対してこのような更新命令がなされると、前述のように、バックエンドメモリ（ＢＥＭ）上でヒープタプルマップ（ＨＴＭ、ヒープファイル）とシャドウコピー（ＳＣ）とからなる書込セットが生成される。
【００３４】
ヒープタプルマップ（ＨＴＭ）には、元の行番号（ｃｔｉｄ）と、新しい行の行番号（ｓｃｔｉｄ）が関係付けられて登録されるようになっている。このようにヒープタプルマップ（ＨＴＭ）はデータベースの更新毎に追加生成されていく。なお、行番号５の命令内容（ｓｃ１）が書き込まれる行番号はこの段階ではまだ不明であるため、ｓｃｔｉｄには新しい命令（ｓｃ１）を書き込んでおく。
【００３５】
一方、シャドウコピー（ＳＣ）には、マスタデータベース（１１ａ）を参照して書き換えられるべき行番号のシャドウコピーを生成する。このとき、新たに追加される行番号はこの段階では不明であるので、行番号には新たな命令（ｓｃ１）を書き込んでおく。
【００３６】
なお、この段階で下位マスタノード（ＭＳ２０１）のデータベース処理部（１１ｂ）は、ヒープタプルマップ（ＨＴＭ）の生成によりＤＥＬＥＴＥ命令が適用される行番号４と、ＵＰＤＡＴＥ命令が適用される旧行番号５は削除されることが既にわかるため、シャドウコピー（ＳＣ）としては新たな命令（ｓｃ１）だけを書き込んでおいてもよい。
【００３７】
このようにして生成された書込セットは、当該下位マスタノード（ＭＳ２０１）から上位マスタノード（ＭＳ１０１）に送信される。
【００３８】
上位マスタノード（ＭＳ１０１）において、データベース処理部１１ｂ（中央処理装置（ＣＰＵ））は、前記下位マスタノード（ＭＳ２０１）から前記書込セットを受信すると、前記更新命令にともなってトランザクションログ処理部（１１ｃ）を起動してトランザクションログの生成を開始する。そして、前記で受信した書込セットからヒープタプルマップ（ＨＴＭ）を読み出して、自身のマスタデータベース（１１ａ）と比較する。ここで、ターゲットとなっているタプル（ここでは行番号４，５および７）の内容がマスタデータベース（１１ａ）上で更新されているか否かを検証する。図５では、行番号４〜６については未更新であるため、行番号４に削除ポインタを付与し、書き換えられる旧番号５にも削除ポインタを付与する。そして、新たな行番号７に新しい命令（ｓｃ１）が書き込まれる。
【００３９】
一方、下位マスタノード（Ｍ２０１）からの書込セット中のヒープタプルマップ（ＨＴＭ）と自身のデータベースを比較して、上位マスタノード（Ｍ２０１）において既に別の書込セットによって当該行が更新されているときには、当該書込セットによる処理はアボート（中断）される。
【００４０】
図６は、上位マスタノード（ＭＳ１０１）のマスタデータベース（１１ａ）が上記により更新されたときにトランザクションログ処理部（１１ｃ）で生成されるトランザクションログの一例である。このトランザクションログは、少なくとも命令とトランザクション内容（行番号とそれに対する実行処理内容）が時系列で連続的に記録されたファイルである。
【００４１】
同図によればトランザクションの開始命令（ＸＢ１）に続いて、命令番号と行番号とが対になったログが順次生成されている。たとえば、最初にＤＥＬＥＴＥ命令（Ｄ１）として行番号４を削除し（Ｄ１４）、次にＵＰＤＡＴＥ命令（Ｕ１）として行番号５を削除し行番号７を追加し（Ｕ１５７）、最後にこれらのコミット命令（ＸＣ１）を発行する。
【００４２】
このトランザクションログは、通信モジュール（１１ｄ）より前記送信元の下位マスタノード（ＭＳ２０１）をはじめ、すべての下位マスタノード（ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｎ）に対して配信される。
【００４３】
前記トランザクションログを受信した下位マスタノードでは、当該トランザクションログを自身のデータベースに複製（レプリケーション）する。
【００４４】
具体的には、下位マスタノード（たとえばＭ２０２）が図６に示したトランザクションログを通信モジュール（１１ｄ）で受信すると、トランザクションログ処理部（１１ｃ）を起動してこのトランザクションログを自身のマスタデータベース（１１ａ）にレプリケーションする。この結果、行番号４と５に削除ポインタが付与され、新たな行番号７が追加される。
【００４５】
このように、下位マスタノードでは上位マスタノードから送信されるトランザクションログのレプリケーションによって統一的にデータベースが管理されることになる。
【００４６】
以上の説明では、下位マスタノードにおける書込セットの生成を簡略して説明するために、下位マスタノードにおいて所定のトランザクションに基づいて単一のテーブル上でしか更新が実行されていないことを前提としたが、次に図７〜図９を用いて複数テーブルが更新された場合について説明する。
【００４７】
図７および図８はこのような複数のテーブルに対応したものであり、図７はテーブル別（図ではＴ１〜Ｔ４）のヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）との組み合わせを束にした書込セット（以下、「テーブル別書込セット」という）として上位マスタノードに送信する方法を示している。また、図８はヒープタプルマップ（ＨＴM）とシャドウコピー（ＳＣ）の組み合わせ中にテーブル番号を記入して単一の書込セット（以下、「統合書込セット」という）として上位マスタノードに送信する方法を示している。
【００４８】
このようなテーブル別書込セット（図７）および統合書込セット（図８）においても、ヒープタプルマップ（ＨＴＭ）の生成によりＤＥＬＥＴＥ命令が適用される行番号とＵＰＤＡＴＥ命令が適用される旧行番号は削除されることが既にわかるため、シャドウコピー（ＳＣ）としては新たな命令だけを書き込んでおいてもよいことは単一テーブルの場合と同様である。
【００４９】
図７に示す例において、たとえばあるトランザクションによってテーブルＴ１およびＴ２のそれぞれが所定の下位マスタノードで更新されたとすると、このテーブルＴ１とＴ２のそれぞれについてヒープタプルマップ（ＨＴM）とシャドウコピー（ＳＣ）との組み合わせが生成され、この束がテーブル別書込セットとなる。
【００５０】
テーブル別書込セットが上位マスタノードで受信されると、上位マスタノードではこのテーブル別書込セットの内容を自身のデータベースに反映させる。このとき、まずテーブル毎のヒープタプルマップ（ＨＴＭ）に基づいて自身のデータベースにアクセスして当該タプルが既に別のテーブル別書込セット（通常の書込セットまたは後述の統合書込セットを含む）により更新されていないかをチェックする。このとき、更新されていない場合は、このテーブル別書込セット中のテーブル毎のシャドウコピーを参照し、当該タプルを更新する。他方、既に更新されていることを検出した場合には、このテーブル別書込セット全体をアボートする。具体的には、一つのテーブル（たとえばＴ１）のヒープタプルマップ（ＨＴＭ）に対する上位マスタノードの該当行との間の競合が検出された場合、つまりテーブルＴ１のヒープタプルマップ（ＨＴＭ）の該当行が既に他の書込セット等により更新されているときは、当該テーブル別書込セット全体（Ｔ１に対するヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）の組み合わせ、およびテーブルＴ２に対するヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）の組み合わせの双方）をアボートする。この理由は、テーブル別書込セットに含まれるテーブル毎のヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）の組み合わせは単一のトランザクションに基づいて生成されているので、そのトランザクションの全ての処理が上位マスタノードのデータベースに反映されるか、あるいは全く反映されないものでなければデータベース内容に矛盾を生じてしまう。したがって、たとえ一つのテーブル（Ｔ１）についてのヒープタプルマップ（ＨＴＭ）でも上位マスタノードのデータベースの更新情報と競合することが検出された場合には、テーブル別書込セット（Ｔ１およびＴ２それぞれに対するヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）の組み合わせ）全体をアボートしなければならない。
【００５１】
図８に示すヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）の組み合わせ中にテーブル番号を記載した統合書込セットを上位マスタノードに適用する場合にも同様である。すなわち、図８の統合書込セットが上位マスタノードで受信されると、ヒープタプルマップ(HTM)のエントリそれぞれについて、エントリに含まれるテーブル番号に該当するテーブルの該当行がすでに別の統合書込セット等(通常の書込セットまたは前述のテーブル別書込セット)により更新されていないかをチェックする。このとき、更新されていない場合は、この統合書込セットのシャドウコピーを参照して、当該テーブルの当該タプルを更新する。他方、すでに更新されていることを検出した場合には、この統合書込セット全体をアボートする。たとえばテーブルT1のヒープタプルマップ（ＨＴＭ）の該当行が既に他の統合書込セット等（通常の書込セットまたは前述のテーブル別書込セットを含む）により更新されているときは、この統合書込セット全体がアボートされる。
【００５２】
以上のように下位マスタノードで複数のテーブル情報を含むテーブル別書込セットまたは統合書込セット（図７および図８の場合）によって上位マスタノードが更新された場合、上位マスタノードで生成されるトランザクションログもテーブル番号が付加されたフォーマットとなる。図９はその一例を示したものである。
【００５３】
同図によれば、トランザクションログのフォーマットは「ＸＢ１」、「Ｄ１１４」、「Ｕ１２５７」、「ＸＣ１」であるが、これはそれぞれ以下の意味を有している。
【００５４】
トランザクション１の開始命令（ＸＢ１）に続いて、命令番号とテーブル番号と行番号とが組み合わされたログが順次生成されている。たとえば、最初にトランザクション１のＤＥＬＥＴＥ命令（Ｄ１）としてテーブル１の行番号４を削除し（Ｄ１１４）、次にトランザクション１のＵＰＤＡＴＥ命令（Ｕ１）としてテーブル２の行番号５を削除し行番号７を追加し（Ｕ１２５７）最後にこれらのコミット命令（ＸＣ１）を発行する。
【００５５】
このトランザクションログは、通信モジュール（１１ｄ）より前記送信元の下位マスタノード（ＭＳ２０１）をはじめ、すべての下位マスタノード（ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｎ）に対して配信される。
【００５６】
前記トランザクションログを受信した下位マスタノードでは、当該トランザクションログを自身のデータベースに複製（レプリケーション）する。
【００５７】
具体的には、下位マスタノード（たとえばＭ２０２）が図９に示したトランザクションログを通信モジュール（１１ｄ）で受信すると、トランザクションログ処理部（１１ｃ）を起動してこのトランザクションログを自身のマスタデータベース（１１ａ）にレプリケーションする。この結果、トランザクション１としてテーブル１の行番号４に削除ポインタが付与され、テーブル２の行番号５に削除ポインタが付与されるとともに新たな行番号７が追加される。
【００５８】
以上、本発明を実施形態に基づいて説明したが、本発明はこれに限定されるものではない。以下、その変形例について説明する。
【００５９】
＜上位マスタノードＭＳ１０１でデータベースの更新が行われる場合＞
下位マスタノード（たとえばＭＳ２０１）でマスタデータベースの更新命令が発生した場合の処理については、図２で説明したように、バックエンドメモリ（ＢＥＭ）上でヒープタプルマップ（ＨＴＭ、ヒープファイル）とシャドウコピー（ＳＣ）とからなる書込セット（複数テーブルの場合には図７に示すテーブル別書込セットまたは図８に示す統合書込セット）が生成されるが、上位マスタノード（ＭＳ１０１）でマスタデータベースの更新命令が発生した場合には、上位ノードに通知する必要がないため、書込セットは生成されない。すなわち、このような場合、上位ノード（ＭＳ１０１）では、図５の左図に示すようにマスタデータベース（１１ａ）に対して直接更新データの書込が行われるとともに、図６に示すトランザクションログ（複数テーブルの場合には図９に示すトランザクションログ）が生成される。このトランザクションログは下位マスタノードに配信され、前記トランザクションログを受信した下位マスタノードでは、当該トランザクションログを自身のマスタデータベースにレプリケーションする。
【００６０】
＜下位マスタノードで書込セットを生成している段階で検索処理が実行されたとき＞
下位マスタノード（たとえばＭＳ２０１）において、図４に示すような書込セットを生成している段階で、当該下位マスタノードのマスタデータベースに対して検索が実行されたとき、書込セットの生成された行番号以外の行番号を対象とした検索であれば問題はないが、該当行（ここでは行番号４および行番号５）に対する検索が実行された場合、これらの行番号は既に削除されているため、検索対象にはできない。
【００６１】
このとき、下位マスタノードで生成されている書込セットが図７や図８に示すような複数テーブルを前提としている場合も同様であるので、検索対象にはできない。
【００６２】
このような場合には以下の２通りの対応が考えられる。
第１の類型は、データベース処理部（１１ｂ）は、マスタデータベース（１１ａ）を参照した後に、ヒープタプルマップ（ＨＴＭ）を参照する。そしてこのヒープタプルマップ（ＨＴＭ）上で検索該当行番号がエントリされているか否かをチェックする。そしてエントリがあった場合には当該エントリが削除か更新かを判定し、更新の場合にはさらにシャドウコピー（ＳＣ）を参照して当該シャドウコピー（ＳＣ）のエントリ（ｓｃ１）を検索対象とする。たとえば図４に示す例で、検索対象が行番号３である場合、データベース処理部（１１ｂ）は、メインメモリ（ＭＭ）上に構築されたバックエンドメモリ（ＢＥＭ）上の書込セット内のヒープタプルマップ（ＨＴＭ）を参照して、該当行（行番号３）がエントリされているか否かを判定する。図４の例では、該当行はエントリされていない。その場合には、マスタデータベース１１ａに直接アクセスして該当行（行番号３）を検索する。
【００６３】
一方、図４に示す例で、検索対象が行番号４である場合、データベース処理部（１１ｂ）は書込セット内のヒープタプルマップ（ＨＴＭ）を参照したときに、該当行（行番号４）がエントリされていることを検出する。この場合、マスタデータベース１１ａにアクセスしても、残存する該当行は既に削除する更新命令の対象となっているため、検索対象とはならない。データベース処理部（１１ｂ）は、ヒープタプルマップ（ＨＴＭ）を参照して該当行（行番号４）が削除されていることを検出する。このように、検索対象行が削除されているため、データベース処理部（１１ｂ）は該当行を検索対象とはしない。
【００６４】
一方、図４に示す例で、検索対象が行番号５である場合、上記と同様に、ヒープタプルマップ（ＨＴＭ）を参照して該当行（行番号５）に対応するシャドウコピー（ＳＣ）のエントリ（ｓｃ１）が作成されていることを検出する。
【００６５】
このとき、データベース処理部（１１ｂ）は、シャドウコピー（ＳＣ）を参照して、行番号５を書き換えたエントリ（ｓｃ１）を検索対象とすればよい。
【００６６】
以上単一のテーブルを更新する場合について説明したが、複数テーブルを更新する場合についても同様である。
【００６７】
具体的には、図７のテーブル別書込セットの場合には、検索の対象とするテーブルに対応するヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）の組み合わせを取り出して用いる。
【００６８】
マスタデータベースの検索対象のテーブルを参照した後に、そのテーブルに対応するヒープタプルマップ（ＨＴＭ）を参照し、検索該当行番号がエントリされているか否かをチェックする。エントリが存在しない場合は、マスタデータベースの検索対象テーブルの該当行を検索対象とする。そしてエントリがあった場合には当該エントリが削除か更新かを判定し、更新の場合にはさらにシャドウコピー（ＳＣ）を参照して当該シャドウコピー（ＳＣ）のエントリを検索対象とする。削除の場合には、該当行を検索対象とはしない。
【００６９】
図８の統合書込セットの場合には、ヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）のエントリのうち、検索対象テーブルに対応するテーブル番号が付与されたエントリを取り出して用いる。
【００７０】
マスタデータベースの検索対象のテーブルを参照した後に、上記で取り出した検索対象テーブルに対応するヒープタプルマップ（ＨＴＭ）のエントリを参照し、検索該当行番号が含まれているか否かをチェックする。エントリが含まれていない場合には、マスタデータベースの検索対象テーブルの該当行を検索対象とする。そしてエントリが含まれている場合には当該エントリが削除か更新かを判定し、更新の場合にはさらに上記で取り出したシャドウコピー（ＳＣ）のエントリを参照して当該エントリを検索対象とする。また、削除の場合には、該当行を検索対象とはしない。
【００７１】
第２の類型では、データベース処理部（１１ｂ）はまずマスタデータベース（１１ａ）を参照した後に、ヒープタプルマップ（ＨＴＭ）の全体を参照する。このとき、検索対象となっている行がエントリされているか否かをチェックし、エントリされている行番号（ここでは行番号４および５）を全て削除されたものとする（検索対象から除外する）。次に、データベース処理部１１ｂは、シャドウコピー（ＳＣ）を参照して、シャドウコピー内の追加されたエントリ（ｓｃ１）を参照しこれを検索対象とすればよい。
【００７２】
図７のテーブル別書込セットの場合は、検索対象テーブルに対応するヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）の組み合わせについて同様の処理を行う。
【００７３】
図８の統合書込セットの場合は、ヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）のエントリのうち、検索対象テーブルに対応するテーブル番号が付与されたエントリを取り出して、それらのエントリを用いて同様の処理を行う。
【００７４】
＜下位マスタで上位マスタからのトランザクションログによる更新が行われているときの競合が生じた場合＞
上位マスタから配信されたトランザクションログによって下位マスタノードのデータベースにレプリケーションが行われているときに、該当行に対して下位マスタのデータベースの更新命令が実行されている場合、競合が発生することになる。
【００７５】
具体的には、下位マスタノードへの更新命令に基づいて行番号４と５とを更新しているときに、上位マスタから行番号５がエントリされたトランザクションログが配信されてきたときがこれに該当する。
【００７６】
このような場合には、下位マスタノードで作成された書込セットが上位マスタノードに送信されたとしても、上位マスタノードでは既に該当行に関するトランザクションログが配信されているため、前記書込セットは上位マスタノードで競合が検出されてアボートされることになる。したがって、当該下位マスタノードにおける競合は無視して差し支えない。なお、下位マスタノードで生成されている書込セットが複数テーブルに対応している場合（図７および図８に示す）でも同様である。
【００７７】
一方、このような下位マスタノードでの競合を解決する別の方法としては、下位マスタノードにおいて書込セット（ヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ））を生成したときに、これらを当該下位マスタノード内のバックエンドメモリ（ＢＥＭ）上に登録し、これらの領域を２以上のプロセス（具体的にはレプリケーションプロセスと書込セットの生成プロセス）から参照できるようにしておいてもよい。つまり、下位マスタノードにおいて、書込セット、さらに限定すればヒープタプルマップ（図７および図８に示したテーブル別書込セットおよび統合書込セットも含む）のみを共有メモリに配置しておくことが望ましい。
【００７８】
この場合には、下位マスタノードがマスタデータベース１１ａのレプリケーションを実行する際に、バックエンドメモリ（ＢＥＭ）上の書込セットを参照することによって、更新命令と矛盾する書込セットを下位マスタノードの段階でアボートさせることができる。具体的には、トランザクションログ処理部１１ｃは、前記バックエンドメモリ（ＢＥＭ）を参照して、この更新命令によって更新しようとしている該当行がヒープタプルマップ（ＨＴＭ）に含まれている場合には、当該ヒープタプルマップ（ＨＴＭ）を生成しているトランザクションをアボートさせる。
【００７９】
下位マスタノードで生成されている書込セットが複数テーブルに対応している場合（図７および図８に示す）でも同様である。図７に示すテーブル別書込セットの場合、下位マスタノードにおいてテーブル別書込セット（ヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）の束）を生成したときに、これらを当該下位マスタノード内のバックエンドメモリ（ＢＥＭ）上に登録し、これらの領域を２以上のプロセス（具体的にはレプリケーションプロセスとテーブル別書込セットの生成プロセス）から参照できるようにしておいてもよい。つまり、下位マスタノードにおいて、テーブル別書込セット、さらに限定すればテーブル毎のヒープタプルマップのみを共有メモリに配置しておくことが望ましい。
【００８０】
この場合には、下位マスタノードがマスタデータベース１１ａのレプリケーションを実行する際に、バックエンドメモリ（ＢＥＭ）上のテーブル別書込セットを参照することによって、更新命令と矛盾するテーブル別書込セットを下位マスタノードの段階でアボートさせることができる。
【００８１】
図８に示す統合書込セットの場合、単一のテーブル構成の場合と同様である。すなわち、ヒープタプルマップ中にテーブル番号が登録されているため、統合書込セット（ヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ））を生成したときに、これらを当該下位マスタノード内のバックエンドメモリ（ＢＥＭ）上に登録し、その後の処理は単一のテーブル構成の場合と同じである。
【００８２】
このように、ヒープタプルマップ（ＨＴＭ）を共有メモリに配置して、複数プロセスから参照できるようにしたことにより、マルチマスタ方式のデータベースにおいても下位マスタノードの段階で、競合を防止できる。さらに、ヒープタプルマップ（ＨＴＭ）のみを共有メモリに配置しておけばよいので、貴重な共有メモリを占有してしまうこともない。
【００８３】
＜実施形態２＞
本発明の別の実施形態（実施形態２）を図に基づいて説明する。
【００８４】
図１０は、本実施形態の階層的マスタノードの構造を示している。同図に示すように、上位マスタノード（ＭＳ１０１）の下に階層的に中位マスタノード（ＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎ）や、下位マスタノード（ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｎ）を有するノード構成となっている。各ノード（情報処理装置）にはデータベースを有している。また上位マスタノード（ＭＳ１０１）にはスレーブ（ＳＬ）を有しているが、他の中位・下位マスタノードにもスレーブを有していてもよい。このようなマスタ・スレーブ構成の場合、両者間のデータベースの更新には本出願人による特開２００６−２９３９１０号公報（本出願人による公開先行出願）に記載された更新管理技術を適用することができる。
【００８５】
上記先行出願がマスタノードのトランザクションログデータを下位のノードに複製（レプリケーション）すればよかったのに対して、ＰＣＴ／ＪＰ２０１１／０６８０５７号（本出願人による未公開出願）では階層的なマルチマスタノードで構成されたデータベースにおいて下位マスタノードでもアップデート命令が実行されていた場合、上位からのトランザクションログの参照だけでは全下位ノードの整合性を保つことができない点に着目して、下位マスタノードで自身のメモリ上に展開されたデータベースのシャドウコピーとヒープタプルマップとを書込セットとして上位マスタノードに送信して上位マスタノードの更新を行う点が特徴だった。しかしこれらの先行技術では上位マスタノードでテーブル自体を削除したりテーブル構造に変更を加えるような場合は想定していなかった。そのために書込セットによる更新によってデータベースの整合性がとれなくなる事態を生じる可能性があった。本実施形態はこのような場合にデータベースのロック機能を利用してマルチマスタノード構造全体で整合性を保つ技術である。以下に説明する。
【００８６】
図１１は、中位マスタノード（ＭＳ２０１）・下位マスタノード（ＭＳ３０１）の機能ブロック図であるが、上位マスタノード（ＭＳ１０１）も同様の機能を有している。
【００８７】
同図に示すように、クライアント（ＣＬ）からデータベースの更新命令が入力されるとデータベース処理部（１１ｂ）は、図示しないメインメモリ上に構築されたバックエンドメモリ（ＢＥＭ）上で書込セットを生成する。この書込セットは図１２に示すようにヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）とで構成される。ここでは、マスタデータベース（１１ａ）の行番号４を削除（ＤＥＬＥＴＥ）し、行番号５を新たな値（ｓｃ１）に書き換える（ＵＰＤＡＴＥ）する更新命令が入力されたものと仮定する。
【００８８】
このとき、データベース処理部１１ｂは、マスタデータベース（１１ａ）を参照しながら当該マスタデータベース（１１ａ）に直接書き込むことは行わずに、バックエンドメモリ（ＢＥＭ）で生成された書込セットを通信モジュール（１１ｄ）を介して上位マスタに送信する。
【００８９】
このような書込セットの生成・送信は、中位マスタノード（ＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎ）や下位マスタノード（ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｎ）においても同様である。
【００９０】
ここで、上位マスタノード（ＭＳ１０１）で、テーブルを排他的に制御しなければならいような命令、たとえばテーブルの構造変更やテーブルの削除が発生したときには、そのテーブルに対するロック獲得命令を実行しそれに対応するロック番号を保持する。たとえば、テーブル１とテーブル３とテーブル２とテーブル４・・・に対するロック獲得命令が順次実行されたときには、テーブル１に対するロック番号は１番、テーブル３に対するロック番号は２番、テーブル２に対するロック番号は３番、テーブル４に対するロック番号は４番となり、これらのロック番号（１〜４）が保持される。
【００９１】
このように、上位マスタノードでデータベースのテーブルに対するロック獲得命令が発生したときには、これをロック獲得情報として中位マスタノードおよび下位マスタノードに単独で通知するようにしてもよいし、後述のように上位マスタノードで生成されるトランザクションログに格納して中位マスタノードおよび下位マスタノードに通知してもよい。そして、前記上位マスタノードからロック獲得情報を受信した前記下位マスタノードでは、ロック獲得情報と競合するトランザクション、たとえばロック獲得情報が対象としているテーブルに対して更新を行っているトランザクションの有無をチェックして、そのようなトランザクションが存在しているときには、上位マスタノードで発生したロック獲得情報が優先されるため、この下位マスタノードにおけるトランザクションが廃棄される。
【００９２】
以上、トランザクションが競合する場合の一例として、ロック獲得情報が対象としているテーブルに対して更新を行っているトランザクションが存在している場合を説明したが、トランザクションの競合とはこれに限られない。たとえば、上位マスタノードから通知されたロック獲得情報がテーブルを削除する際に獲得するロック獲得情報である場合には、下位マスタノードにおいて該当するテーブルを単に参照するだけのトランザクションが存在しているだけであっても、前記ロック獲得情報とは競合することになるため、このような下位マスタノードにおけるトランザクションは廃棄される。
【００９３】
そして、当該ロック獲得情報を格納したトランザクションログ（図１４参照）を生成する。同図に示したトランザクションログは、ＸＢ１で命令開始、ＬＴ１でテーブル１のロック、ＤＴ１で当該テーブル１のデリート、ＸＣ１でそのコミットを意味している。トランザクションログにはこのような一群の命令が繰り返されて格納されている。本実施形態では、ロック獲得情報毎にシーケンシャルな番号を付与して管理している。たとえば、ＬＴ１はテーブル１に対するもので１番目のロック獲得命令、ＬＴ３はテーブル３に対するもので２番目のロック獲得命令、ＬＴ２はテーブル２に対するもので３番目のロック獲得命令。すなわち、この例ではＬＴ１→ＬＴ３→ＬＴ２→ＬＴ４の順番でシーケンシャルにロック獲得番号１〜４が付与されて管理されている。
【００９４】
しかし、このようなロック獲得命令をシーケンシャルに管理する方法としては、ログ毎に付与されているログシーケンス番号（ＬＳＮ）を用いてもよい。図１４では、ＬＴ１はＬＳＮ＝２，ＬＴ３はＬＳＮ＝８、ＬＴ２はＬＳＮ＝１３、ＬＴ４はＬＳＮ＝１８となる。
【００９５】
このトランザクションログは、前記上位マスタノード（ＭＳ１０１）から中位・下位マスタノード（ＭＳ２０１，ＭＳ２０２，ＭＳ２０ｎ，ＭＳ３０１，ＭＳ３０２，ＭＳ３０ｎ・・・）に送信される。
【００９６】
それぞれの中位・下位マスタノードでは、前記トランザクションログを受信すると、前記トランザクションログの内容を自身のデータベースに対してレプリケーションする。
【００９７】
ここで、ロック獲得命令についてのみ説明すれば、ロック獲得命令ＬＴ１，ＬＴ３，ＬＴ２，ＬＴ４を順次実行して自身の共有メモリ上のテーブルを排他ロック状態として、中位・下位マスタノードでの他のトランザクションによるメモリアクセスを制限する。このとき、ロック獲得命令（ロック獲得情報）と競合するトランザクション、たとえばロック獲得命令が対象としているテーブルに対して更新を行っているトランザクションの有無をチェックして、そのようなトランザクションが存在しているときには、上位マスタノードで発生したロック獲得命令が優先されるため、この下位マスタノードにおけるトランザクションが廃棄される。
【００９８】
下位マスタノードにおいて、前記ロック獲得命令（ＬＴ１，ＬＴ３，ＬＴ２，ＬＴ４・・・）に基づいて順番にロックが獲得されると、当該下位マスタノードにおいてロックが獲得された最大値のロック獲得番号をノードロック番号（ＮＬＫＮ）として中位・上位マスタノードに通知する。図１５では、下位マスタノード（ＭＳ３０１）は３番目のロック獲得命令（ＬＴ２）まで完了しているのでＮＬＫＮ＝３（図１５では丸付き数字の３）、下位マスタノード（ＭＳ３０２）は２番目のロック獲得命令（ＬＴ３）まで完了しているのでＮＬＫＮ＝２（図１５で丸付き数字の２）となる。
【００９９】
図１２は、下位マスタノード（ＭＳ３０１）におけるマスタデータベース（１１ａ）と、書込セットとの関係を示している。下位マスタノードにおけるマスタデータベース（１１ａ）は行番号と、命令内容と、ポインタとによって構成されており、新たな命令がクライアント端末（ＣＬ）からなされる毎に行番号が追加されていく追記型のデータベースである。同図の場合、前記で説明したように、行番号４を削除（ＤＥＬＥＴＥ）し、行番号５を新たな命令内容に書き換える（ｓｃ１にＵＰＤＡＴＥ）する場合を示している。
【０１００】
下位マスタノード（ＭＳ３０１）においてクライアント端末（ＣＬ）からの命令によりマスタデータベース（１１ａ）に対してこのような更新命令がなされると、前述のように、バックエンドメモリ（ＢＥＭ）上でヒープタプルマップ（ＨＴＭ、ヒープファイル）とシャドウコピー（ＳＣ）とからなる書込セットが生成される。
【０１０１】
ヒープタプルマップ（ＨＴＭ）には、元の行番号（ｃｔｉｄ）と、新しい行の行番号（ｓｃｔｉｄ）が関係付けられて登録されるようになっている。このようにヒープタプルマップ（ＨＴＭ）はデータベースの更新毎に追加生成されていく。なお、行番号５の命令内容（ｓｃ１）が書き込まれる行番号はこの段階ではまだ不明であるため、ｓｃｔｉｄには新しい命令（ｓｃ１）を書き込んでおく。
【０１０２】
一方、シャドウコピー（ＳＣ）には、マスタデータベース（１１ａ）を参照して書き換えられるべき行番号のシャドウコピーを生成する。このとき、新たに追加される行番号はこの段階では不明であるので、行番号には新たな命令（ｓｃ１）を書き込んでおく。
【０１０３】
なお、この段階で下位マスタノード（ＭＳ３０１）のデータベース処理部（１１ｂ）は、ヒープタプルマップ（ＨＴＭ）の生成によりＤＥＬＥＴＥ命令が適用される行番号４と、ＵＰＤＡＴＥ命令が適用される旧行番号５は削除されることが既にわかるため、シャドウコピー（ＳＣ）としては新たな命令（ｓｃ１）だけを書き込んでおいてもよい。
【０１０４】
このような書込セットは、図１６に示すようにテーブル毎に作成されるが、図１７に示すように単一の書込セット中のヒータプルマップ（ＨＴＭ）の行番号（ｃｔｉｄ）に関係付けてテーブル番号（Ｔ）を登録するようにしてもよい。
【０１０５】
前記書込セットには、前述のノードロック番号（ＮＬＫＮ）も格納される。このノードロッック番号（ＮＬＫＮ）は、前述のように、上位マスタノード（ＭＳ１０１）から配信(通知)されたトランザクションログ（図１４参照）に格納されたロック獲得命令（ＬＴ１，ＬＴ３，ＬＴ２，ＬＴ４）に対応して実行されたロック獲得番号の最大値である。
【０１０６】
前述の説明を繰り返すと、下位マスタノード（ＭＳ３０１）が図１４に示すようなトランザクションログを受信して、このトランザクションログのロック獲得命令（ＬＴ１，ＬＴ３，ＬＴ２，ＬＴ４）に基づいて３番目のロック獲得命令（ＬＴ２）まで完了している場合、このノードロック番号（ＮＬＫＮ）は「３」となり（ＮＬＫＮ＝３）、図１５に示すように下位マスタノード（ＭＳ３０１）で生成される書込セットに格納される。一方、下位マスタノード（ＭＳ３０２）は、２番目のロック獲得命令（ＬＴ３）まで完了している場合、このノードロック番号（ＮＬＫＮ）は「２」となり（ＮＬＫＮ＝２）、同図に示すように下位マスタノード（ＭＳ３０２）で生成される書込セットに格納される。
【０１０７】
このようにして生成された書込セットは、当該下位マスタノード（ＭＳ３０１，ＭＳ３０２）から上位マスタノード（ＭＳ１０１）に送信される。当該書込セットは、その間の中位マスタノード（ＭＳ２０２）を経由するが、当該中位マスタノード（ＭＳ２０２）は当該書込セットに対して何らの処理は行わない。
【０１０８】
上位マスタノード（ＭＳ１０１）において、データベース処理部１１ｂ（中央処理装置（ＣＰＵ））は、前記下位マスタノード（ＭＳ３０１，ＭＳ３０２）から前記書込セットを受信すると、そこからヒープタプルマップ（ＨＴＭ）を読み出して、自身のマスタデータベース（１１ａ）と比較する。図１２ではターゲットとなっているタプル（ここでは行番号４，５および７）の内容がマスタデータベース（１１ａ）上で更新されているか否かを検証する。ここでは行番号４〜６については未更新であるため、行番号４に削除ポインタを付与し、書き換えられる旧番号５にも削除ポインタを付与する。そして、新たな行番号７に新しい命令（ｓｃ１）が書き込まれる。
【０１０９】
このとき、本実施形態では全ての書込セットをマスタデータベース（１１ａ）と比較するものではない。つまり、前述の比較ステップに先立って、書込セットに格納されたノードロック番号（ＮＬＫＮ）を読み出しておき、ノードロック番号（ＮＬＫＮ）よりも大きなロック番号に該当するロック獲得情報を参照し、そのロック獲得情報と書込セットが修正しようとしているテーブルとが競合していないかどうかを検証する。競合している場合には書込セットをアボートして当該書込セットを比較対象から除外する。このような検証を行う理由は、上位マスタノード（ＭＳ１０１）でロックが獲得されているにもかかわらず、下位マスタノードで前記ロックの獲得前のテーブルに基づいてそのテーブルに対してタプルの更新を行いその情報が書込セットとして上位マスタノード（ＭＳ１０１）に届いて当該タプルを含むテーブルを更新してしまった場合、上位マスタノード（ＭＳ１０１）がロック獲得中に行ったテーブルの構造の変更や削除と競合してマスタデータベース（１１ａ）の整合性が損なわれてしまうためである。
【０１１０】
後述のヒープタプルマップ（ＨＴＭ）を用いた競合の検出方法では、このようなデータベースの整合性の破壊を検出できないため、このようにロック獲得情報との比較を行い、事前に競合を検出しておく必要がある。
【０１１１】
一方、前記のロック番号との比較でアボートされなかった書込セットであっても、書込セット中のヒープタプルマップ（ＨＴＭ）と上位マスタノードのマスタデータベース（１１ａ）とを比較した結果、マスタデータベース（１１ａ）の該当行が既に別の書込セットによって更新されているときには、マスタデータベース（１１ａ）の更新が競合することになるため当該書込セットはアボートされる。
【０１１２】
次に、前記書込セットとは別に、下位マスタノード（ＭＳ３０１，ＭＳ３０２）において、トランザクションログでレプリケーションされたロック獲得命令に対応するロック獲得結果情報が中位マスタノード（ＭＳ２０２）を介して上位マスタノード（ＭＳ１０１）に通知される機構について図１５を用いて説明する。
【０１１３】
下位マスタノード（ＭＳ３０１，３０２）では、前述のトランザクションログに格納されたロック獲得命令（ＬＴ１，ＬＴ３，ＬＴ２,ＬＴ４・・・）を順次レプリケーションして、そのロック獲得結果情報を得る。ここでは、具体的にはロック獲得命令順に付与されたロック獲得命令番号で管理すればよい。すなわちテーブル１のロック獲得命令（ＬＴ１）のロック獲得命令番号は「１」、次のテーブル３のロック獲得命令（ＬＴ３）のロック獲得命令番号は「２」、次のテーブル２のロック獲得命令（ＬＴ２）のロック獲得命令番号は「３」、さらに次のテーブル4のロック獲得命令（ＬＴ４）のロック番号は「４」となる。
【０１１４】
そして、それぞれの下位マスタノード（ＭＳ３０１，ＭＳ３０２）では、ロックが獲得されたロック獲得命令番号の数値の最大値をノードロック番号（ＮＬＫＮ）で管理していることは前述の通りである。
【０１１５】
各下位マスタノード（ＭＳ３０１，ＭＳ３０２）からそれぞれのノードロック番号（ＮＬＫＮ）を上層の中位マスタノード（ＭＳ２０２）に送信する。中位マスタノード（ＭＳ２０２）では、自身が保有しているノードロック番号（ＮＬＫＮ＝２）と、各下位マスタノードから通知されたノードロック番号（ＮＬＫＮ＝３，２）とを比較して、その最も小さい値（ここでは２）を自身のツリーロック番号（ＴＬＫＮ＝２）として更新する。
【０１１６】
なお、図１５において、中位マスタノード（ＭＳ２０１）ではその配下の下位マスタノードが存在しないため、自身のノードロック番号（ＮＬＫＮ＝３）がそのまま当該中位マスタノード（ＭＳ２０１）を頂点としたツリーロック番号（ＴＬＫＮ＝３）となる。
【０１１７】
各中位マスタノード（ＭＳ２０１，ＭＳ２０２）は、それぞれのツリーロック番号（ＴＬＫＮ＝３，２）を上位マスタノード（ＭＳ１０１）に送信する。これを受信した上位マスタノード（ＭＳ１０１）では、これらの中から最小値（ここではＴＬＫＮ＝２）をクラスタロック番号（ＣＬＫＮ＝２）として更新する。
【０１１８】
このクラスタロック番号（ＣＬＫＮ＝２）は、前述のように全階層から収集されたクラスタ全体の全てのノードロック番号（ＮＬＫＮ）の最小値であるため、上位マスタノード（ＭＳ１０１）ではこのクラスタロック番号（ＣＬＫＮ＝２）によってクラスタ全体のロック獲得状況を把握することができる。すなわち、クラスタロック番号（ＣＬＫＮ）が２である場合、この番号と等しいか小さいロック獲得命令は全てのノードで完了していることを意味する。
【０１１９】
したがって、上位マスタノード（ＭＳ１０１）はクラスタロック番号と等しいか小さいロック番号を持つロック獲得命令は、獲得が完了したと認識する。
【０１２０】
ここで、中位・下位マスタノードから順次受信したツリーロック番号（ＴＬＫＮ）との比較の他に、前記書込セットに格納された下位マスタノード（ＭＳ３０１，３０２）のノードロック番号（ＮＬＫＮ）と上位マスタノードにおいて自身が保持しているロック獲得命令番号との比較をも行う理由は以下の通りである。
【０１２１】
一般に下位マスタノード（ＭＳ３０１，３０２）で実行されたロック獲得結果情報（ノードロック番号：ＮＬＫＮ）が中位ノードのツリーロック番号（ＴＬＫＮ）を更新しながら上位マスタノード（ＭＳ１０１）に到達するまでには時間を要する。特にツリー階層構造が複雑なデータベースであればその到達遅延により処理効率が大幅に低下してしまう。特に各階層で最小値の比較を行っているため、どれか１個でも小さいＮＬＫＮ（たとえばＮＬＫＮ＝２）があるとクラスタロック番号（ＣＬＫＮ）はいつまでも大きな値をとれないため、上位マスタノードでは、全ての書込セットをチェックしなければならない。
【０１２２】
一方、書込セットを発行した下位マスタノード（ＭＳ３０１）はＮＬＫＮ＝３が設定されているため、３番目のロック獲得命令までは既に完了していることになる。つまり、このノード（ＭＳ３０１）に関する限り、これよりも大きいロック番号「４」（ＬＴ４）に該当するロック獲得情報のみを前記書込セット中のテーブル情報との比較対象とすれば、上位マスタノード（ＭＳ１０１）における比較処理による負荷を低減できることになる。
【０１２３】
以上本発明を実施形態に基づいて説明したが、本願発明はこれに限定されるものではない。たとえば、ノードの階層構造については、上位マスタノード、中位マスタノードおよび下位マスタノードの３層構造（図１０，図１５および図１６）を例示したが、上位マスタノードと下位マスタノードの２層構造のものであってもよい。また、中位マスタノードが２層以上のものであってもよい。
【０１２４】
また、以上の説明では、ノードロック番号（ＮＬＫＮ）を中位、上位マスタノードに通知して順次ツリーロック番号（ＴＬＫＮ）、クラスタロック番号（ＣＬＫＮ）を更新する実施例を説明したが、これに限定されることはない。たとえば、上位マスタノード（ＭＳ１０１）は、中位マスタノード（ＭＳ２０１，ＭＳ２０２）または下位マスタノード（ＭＳ３０１，ＭＳ３０２）から送信される書込セットに含まれるノードロック番号（ＮＬＫＮ）をそれぞれの下位・中位マスタノードのノードロック番号（ＮＬＫＮ）とみなし、上位マスタノード（ＭＳ１０１）では、各中位・下位マスタノードから発行される書込セットを収集して、その書込セット中に格納されている全てのノードロック番号（ＮＬＫＮ）の最小値をクラスタロック番号（ＣＬＫＮ）とみなしてもよい。
【０１２５】
このように書込セットのノードロック番号（ＮＬＫＮ）を収集してクラスタロック番号（ＣＬＫＮ）を更新する利点としては、これらの書込セットとは別にノードロック番号（ＮＬＫＮ）を中位・上位マスタノードに通知してそれぞれのツリーロック番号（ＴＬＫＮ）を更新しながらさらに上層に送信する必要がないため、通知システムを簡略化できる。一方、この方法では、上位マスタノード（ＭＳ１０１）が全ての書込セットからノードロック番号（ＮＬＫＮ）の集計作業をしなければならないため、負荷が大きくなってしまう。
【産業上の利用可能性】
【０１２６】
本発明は、階層構造を備えたマルチマスタノード構造のデータベース管理システムに利用できる。
【符号の説明】
【０１２７】
ＭＳ１０１  上位マスタノード
ＳＬ  スレーブ
ＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎ  下位マスタノード（中位マスタノード）
ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｎ  下位マスタノード
ＣＬ  クライアント端末
１１ａ  マスタデータベース
１１ｂ  データベース処理部
１１ｃ  トランザクションログ処理部
１１ｄ  通信モジュール
ＣＰＵ  中央処理装置
ＭＭ  主記憶装置
ＢＵＳ  バス
ＨＤ  大規模記憶装置
Ｉ／Ｏ  通信インターフェース
ＨＴＭ  ヒープタプルマップ
ＳＣ  シャドウコピー
【図１】
0005960798.tif 000002
【図２】
0005960798.tif 000003
【図３】
0005960798.tif 000004
【図４】
0005960798.tif 000005
【図５】
0005960798.tif 000006
【図６】
0005960798.tif 000007
【図７】
0005960798.tif 000008
【図８】
0005960798.tif 000009
【図９】
0005960798.tif 000010
【図１０】
0005960798.tif 000011
【図１１】
0005960798.tif 000012
【図１２】
0005960798.tif 000013
【図１３】
0005960798.tif 000014
【図１４】
0005960798.tif 000015
【図１５】
0005960798.tif 000016
【図１６】
0005960798.tif 000017
【図１７】
0005960798.tif 000018