(57)【特許請求の範囲】
【請求項１】
レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースの管理方法であって、
前記上位と下位のマスタノードは、それぞれ、データベースと、前記データベースの検索のためのインデックスとを含み、
いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該下位マスタノードのデータベース処理部が、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成し、上位マスタノードに対して生成した当該書込セットを送信するステップと、
前記上位マスタノードのデータベース処理部が、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証するステップと、
前記上位マスタノードのデータベース処理部が、前記更新がなされているときには当該書込セットをアボートし、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新するとともに、前記上位マスタノードのトランザクションログ処理部がこの更新記録をトランザクションログとして生成するステップと、
前記上位マスタノードが、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信するステップと、
前記下位マスタノードのトランザクションログ処理部は、受信した前記トランザクションログに基づいて自身のデータベースと当該データベースのインデックスを更新するステップと、
を含むデータベースの管理方法。
【請求項２】
前記下位マスタノードにおける書込セットのシャドウコピーは、新規の追加行のみで構成される、
請求項１記載のデータベースの管理方法。
【請求項３】
前記上位マスタノードのトランザクションログ処理部は、前記データベースに係る更新記録のみを示すトランザクションログを生成し、
前記下位マスタノードのトランザクションログ処理部は、受信した前記トランザクションログにより示される前記データベースの更新記録から前記インデックスの更新内容を特定し、特定した当該更新内容に基づいて自身のインデックスを更新する、
請求項１又は２に記載のデータベースの管理方法。
【請求項４】
前記下位マスタノードで前記書込セットを生成している段階で当該下位マスタノードのデータベースに検索処理が実行されたとき、
前記下位マスタノードのデータベース処理部は、前記データベースのインデックスを参照し、前記検索処理の対象となる前記データベースの該当行を抽出するステップと、
前記書込セットに含まれるヒープタプルマップを１行ずつ参照して、抽出した前記該当行の行番号がエントリされているか否かを判定し、エントリされていないときには抽出した前記該当行を検索結果に含め、エントリされているときには抽出した前記該当行を当該検索結果から除外するステップと、
前記書込セットに含まれるシャドウインデックスを参照し、前記検索処理の対象となるシャドウコピーのエントリを抽出し、抽出した当該エントリを前記検索結果に含めるステップと、
を実行する請求項１から３のいずれか１項に記載のデータベースの管理方法。
【請求項５】
前記下位マスタノードにおいて書込セットが生成されたときに、これらを登録する下位マスタノード内のバックエンドメモリの領域は、少なくとも上位マスタノードから配信されたトランザクションログによる更新命令を実行する、前記下位マスタノードのトランザクションログ処理部が参照できるようにし、
前記下位マスタノードのトランザクションログ処理部は、前記バックエンドメモリを参照して、この更新命令によって更新しようとしている該当行が前記書込セットのヒープタプルマップに含まれている場合には、当該ヒープタプルマップを生成しているトランザクションをアボートさせる、
請求項１から４のいずれか１項に記載のデータベースの管理方法。
【請求項６】
レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースにおける当該上位マスタノードのデータベース管理方法であって、
前記上位と下位のマスタノードは、それぞれ、データベースと、前記データベースの検索のためのインデックスとを含み、
いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該下位マスタノードのデータベース処理部が、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成した当該書込セットを受信するステップと、
前記上位マスタノードのデータベース処理部が、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証するステップと、
前記上位マスタノードのデータベース処理部が、前記更新がなされているときには当該書込セットをアボートし、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新するステップと、
を含む上位マスタノードにおけるデータベースの管理方法。
【請求項７】
前記上位マスタノードは、新規の追加行のみで構成されたシャドウコピーを含む前記書込セットを受信する、
請求項６記載の上位マスタノードにおけるデータベースの管理方法。
【請求項８】
レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースにおける当該下位マスタノードのデータベースの管理方法であって、
前記上位と下位のマスタノードは、それぞれ、データベースと、前記データベースの検索のためのインデックスとを含み、
いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該下位マスタノードのデータベース処理部が、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成し、前記上位マスタノードにおいて、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証させ、前記更新がなされているときには当該書込セットをアボートさせ、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新させ、この更新記録をトランザクションログとして生成させ、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信させるために当該書込セットを前記上位マスタノードに送信するステップと、
前記下位マスタノードのトランザクションログ処理部が、前記トランザクションログを受信したときに、当該トランザクションログに基づいて自身のデータベースと当該データベースのインデックスを更新するステップと、
を含む下位マスタノードのデータベースの管理方法。
【請求項９】
前記下位マスタノードにおける書込セットのシャドウコピーは、新規の追加行のみで構成される、
請求項８記載の下位マスタノードのデータベースの管理方法。
【請求項１０】
前記上位マスタノードにおいて、前記データベースに係る更新記録のみを示すトランザクションログが生成され、
前記下位マスタノードのトランザクションログ処理部は、受信した前記トランザクションログにより示される前記データベースの更新記録から前記インデックスの更新内容を特定し、特定した当該更新内容に基づいて自身のインデックスを更新する、
請求項８又は９に記載の下位マスタノードのデータベースの管理方法。
【請求項１１】
前記下位マスタノードで前記書込セットを生成している段階で当該下位マスタノードのマスタデータベースに検索処理が実行されたとき、
前記下位マスタノードのデータベース処理部は、前記データベースのインデックスを参照し、前記検索処理の対象となる前記データベースの該当行を抽出するステップと、
前記書込セットに含まれるヒープタプルマップを１行ずつ参照して、抽出した前記該当行の行番号がエントリされているか否かを判定し、エントリされていないときには抽出した前記該当行を検索結果に含め、エントリされているときには抽出した前記該当行を当該検索結果から除外するステップと、
前記書込セットに含まれるシャドウインデックスを参照し、前記検索処理の対象となるシャドウコピーのエントリを抽出し、抽出した当該エントリを前記検索結果に含めるステップと、
を実行する請求項８から１０のいずれか１項に記載の下位マスタノードのデータベースの管理方法。
【請求項１２】
前記下位マスタノードにおいて書込セットが生成されたときに、これらを登録する下位マスタノード内のバックエンドメモリの領域は、少なくとも上位マスタノードから配信されたトランザクションログによる更新命令を実行する、前記下位マスタノードのトランザクションログ処理部が参照できるようにし、
前記下位マスタノードのトランザクションログ処理部は、前記バックエンドメモリを参照して、この更新命令によって更新しようとしている該当行が前記書込セットのヒープタプルマップに含まれている場合には、当該ヒープタプルマップを生成しているトランザクションをアボートさせる、
請求項８から１１のいずれか１項に記載の下位マスタノードのデータベースの管理方法。
【請求項１３】
レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースシステムであって、
前記上位と下位のマスタノードは、それぞれ、データベースと、前記データベースの検索のためのインデックスとを含み、
いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該更新命令が生じた下位マスタノードにおいて、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成し、上位マスタノードに対して生成した当該書込セットを送信する手段と、
前記上位マスタノードにおいて、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証する手段と、
前記上位マスタノードにおいて、前記更新がなされているときには当該書込セットをアボートし、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新するとともに、この更新記録をトランザクションログとして生成する手段と、
前記上位マスタノードにおいて、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信する手段と、
前記下位マスタノードにおいて、受信した前記トランザクションログに基づいて自身のデータベースと当該データベースのインデックスを更新する手段と、
を備えるデータベースシステム。
【請求項１４】
データベースと当該データベースの検索のためのインデックスをそれぞれ含む、レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースにおける当該上位マスタノードに、
いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該下位マスタノードのデータベース処理部が、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成した当該書込セットを受信するステップと、
前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証するステップと、
前記更新がなされているときには当該書込セットをアボートし、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新するステップと、
を実行させるためのプログラム。
【請求項１５】
データベースと当該データベースの検索のためのインデックスをそれぞれ含む、レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースにおける当該下位マスタノードに、
いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成し、前記上位マスタノードにおいて、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証させ、前記更新がなされているときには当該書込セットをアボートさせ、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新させ、この更新記録をトランザクションログとして生成させ、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信させるために当該書込セットを前記上位マスタノードに送信するステップと、
前記トランザクションログを受信したときに、当該トランザクションログに基づいて自身のデータベースと当該データベースのインデックスを更新するステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースの管理方法、特に複数のマスタノードがネットワークにより階層的に接続されているデータベースの管理方法に関する。
【背景技術】
【０００２】
本出願人は、トランザクションログを用いてデータベースを管理する技術に着目し、特開２００６−２９３９１０号公報（特許文献１）において、１対１のマスタ・スレーブ方式のデータ同期方法について提案している。また、本出願人は、その後、国際公開第２０１０／１０６９９１号（特許文献２）において、１対Ｎ個（Ｎは正整数）のマスタ・スレーブ方式のデータ同期方法の提案を行っている。【０００３】
ここで、トランザクションログとは、データベースに加えられた変更の履歴を示すデータである。当該トランザクションログをデータベースの記録領域とは異なる領域に記録することにより、変更の永続性を維持しながら同時に操作の高速性を実現することが可能となる。【０００４】
特許文献１は、トランザクションログを利用してレプリケーションシステムを実現する点に着目している。一方、特許文献２は、クライアントより検索指示を受領したスレーブノードがマスタノードにリクエストメッセージを送信し、所定時間以内にマスタノードから返信メッセージを受領しなかったときに、マスタノードに対してマスタデータベースの更新にかかる最新バージョンまでのトランザクションログを要求し、該要求を受領したマスタノードは、スレーブノードへ該トランザクションログを送信し、このログを参照してスレーブノードは自身のレプリカデータベースを更新するものであった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２９３９１０号公報
【特許文献２】国際公開第２０１０／１０６９９１号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、前記特許文献２では、そのノード構成が単一のマスタノードに対して複数のミラーノードを備えたネットワーク構成であることが前提だった。【０００７】
そのため、複数のミラーノードそれぞれは、独自にデータ更新命令（ＩＮＳＥＲＴ、ＵＰＤＡＴＥ、ＤＥＬＥＴＥ）を実行することはなく、マスタノードからのトランザクションログを参照して自身のデータベースをアップデートすればよかった。【０００８】
一方、データベースの多様化・複雑化にともなって、マスタノードを複数有する所謂マルチマスタ方式が注目されるようになってきている。この点について、マスタノード同士に対称性があるネットワーク構成（マスタノード同士が並列関係にあるとき）では、マスタノード間の更新情報に順位付けを行い、マスタノード間の同期をとるための理論等が提案されているが全ノードの同期をとるための手続きが複雑となり、競合時の解決策が現実的でなかった。【０００９】
本発明者はこのような点に鑑みて本発明をなし得たものであり、複数のマスタノードが階層的に構築されるとともに、その階層構造を利用して、複数のマスタノードそれぞれにおける、データベースと当該データベースの検索のためのインデックスとを確実かつ効率的に更新することができるデータベースの管理方法を実現することを技術的課題とする。
【課題を解決するための手段】
【００１０】
本発明の第１形態は、レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースの管理方法であって、前記上記と下位のマスタノードは、それぞれ、データベースと、前記データベースの検索のためのインデックスとを含み、いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該下位マスタノードのデータベース処理部が、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成し、上位マスタノードに対して生成した当該書込セットを送信するステップと、前記上位マスタノードのデータベース処理部が、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証するステップと、前記上位マスタノードのデータベース処理部が、前記更新がなされているときには当該書込セットをアボートし、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新するとともに、前記上位マスタノードのトランザクションログ処理部がこの更新記録をトランザクションログとして生成するステップと、前記上位マスタノードが、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信するステップと、前記下位マスタノードのトランザクションログ処理部は、受信した前記トランザクションログに基づいて自身のデータベースと当該データベースのインデックスを更新するステップと、を含むデータベースの管理方法である。【００１１】
また、本発明の第２形態は、前記下位マスタノードにおける書込セットのシャドウコピーは、新規の追加行のみで構成される、第１形態のデータベースの管理方法である。【００１２】
また、本発明の第３形態は、前記上位マスタノードのトランザクションログ処理部は、前記データベースに係る更新記録のみを示すトランザクションログを生成し、前記下位マスタノードのトランザクションログ処理部は、受信した前記トランザクションログにより示される前記データベースの更新記録から前記インデックスの更新内容を特定し、特定した当該更新内容に基づいて自身のインデックスを更新する、第１形態又は第２形態のデータベースの管理方法である。【００１３】
また、本発明の第４形態は、前記下位マスタノードで前記書込セットを生成している段階で当該下位マスタノードのデータベースに検索処理が実行されたとき、前記下位マスタノードのデータベース処理部は、前記データベースのインデックスを参照し、前記検索処理の対象となる前記データベースの該当行を抽出するステップと、前記書込セットに含まれるヒープタプルマップを１行ずつ参照して、抽出した前記該当行の行番号がエントリされているか否かを判定し、エントリされていないときには抽出した前記該当行を検索結果に含め、エントリされているときには抽出した前記該当行を当該検索結果から除外するステップと、前記書込セットに含まれるシャドウインデックスを参照し、前記検索処理の対象となるシャドウコピーのエントリを抽出し、抽出した当該エントリを前記検索結果に含めるステップと、を実行する第１形態から第３形態のいずれかの形態に係るデータベースの管理方法である。【００１４】
また、本発明の第５形態は、前記下位マスタノードにおいて書込セットが生成されたときに、これらを登録する下位マスタノード内のバックエンドメモリの領域は、少なくとも上位マスタノードから配信されたトランザクションログによる更新命令を実行する、前記下位マスタノードのトランザクションログ処理部が参照できるようにし、前記下位マスタノードのトランザクションログ処理部は、前記バックエンドメモリを参照して、この更新命令によって更新しようとしている該当行が前記書込セットのヒープタプルマップに含まれている場合には、当該ヒープタプルマップを生成しているトランザクションをアボートさせる、第１形態から第４形態のいずれかの形態に係るデータベースの管理方法である。【００１５】
また、本発明の第６形態は、レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースにおける当該上位マスタノードのデータベース管理方法であって、前記上記と下位のマスタノードは、それぞれ、データベースと、前記データベースの検索のためのインデックスとを含み、いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該下位マスタノードのデータベース処理部が、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成した当該書込セットを受信するステップと、前記上位マスタノードのデータベース処理部が、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証するステップと、前記上位マスタノードのデータベース処理部が、前記更新がなされているときには当該書込セットをアボートし、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新するステップと、を含む上位マスタノードにおけるデータベースの管理方法である。【００１６】
また、本発明の第７形態は、前記上位マスタノードは、新規の追加行のみで構成されたシャドウコピーを含む前記書込セットを受信する、第６形態の上位マスタノードにおけるデータベースの管理方法である。【００１７】
また、本発明の第８形態は、レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースにおける当該下位マスタノードのデータベースの管理方法であって、前記上記と下位のマスタノードは、それぞれ、データベースと、前記データベースの検索のためのインデックスとを含み、いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該下位マスタノードのデータベース処理部が、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成し、前記上位マスタノードにおいて、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証させ、前記更新がなされているときには当該書込セットをアボートさせ、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新させ、この更新記録をトランザクションログとして生成させ、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信させるために当該書込セットを前記上位マスタノードに送信するステップと、前記下位マスタノードのトランザクションログ処理部が、前記トランザクションログを受信したときに、当該トランザクションログに基づいて自身のデータベースと当該データベースのインデックスを更新するステップと、を含む下位マスタノードのデータベースの管理方法である。【００１８】
また、本発明の第９形態は、前記下位マスタノードにおける書込セットのシャドウコピーは、新規の追加行のみで構成される、第８形態の下位マスタノードのデータベースの管理方法である。【００１９】
また、本発明の第１０形態は、前記上位マスタノードにおいて、前記データベースに係る更新記録のみを示すトランザクションログが生成され、前記下位マスタノードのトランザクションログ処理部は、受信した前記トランザクションログにより示される前記データベースの更新記録から前記インデックスの更新内容を特定し、特定した当該更新内容に基づいて自身のインデックスを更新する、第８形態又は第９形態の下位マスタノードのデータベースの管理方法である。【００２０】
また、本発明の第１１形態は、前記下位マスタノードで前記書込セットを生成している段階で当該下位マスタノードのマスタデータベースに検索処理が実行されたとき、前記下位マスタノードのデータベース処理部は、前記データベースのインデックスを参照し、前記検索処理の対象となる前記データベースの該当行を抽出するステップと、前記書込セットに含まれるヒープタプルマップを１行ずつ参照して、抽出した前記該当行の行番号がエントリされているか否かを判定し、エントリされていないときには抽出した前記該当行を検索結果に含め、エントリされているときには抽出した前記該当行を当該検索結果から除外するステップと、前記書込セットに含まれるシャドウインデックスを参照し、前記検索処理の対象となるシャドウコピーのエントリを抽出し、抽出した当該エントリを前記検索結果に含めるステップと、を実行する第８形態から第１０形態のいずれかの形態に係る下位マスタノードのデータベースの管理方法である。【００２１】
また、本発明の第１２形態は、前記下位マスタノードにおいて書込セットが生成されたときに、これらを登録する下位マスタノード内のバックエンドメモリの領域は、少なくとも上位マスタノードから配信されたトランザクションログによる更新命令を実行する、前記下位マスタノードのトランザクションログ処理部が参照できるようにし、前記下位マスタノードのトランザクションログ処理部は、前記バックエンドメモリを参照して、この更新命令によって更新しようとしている該当行が前記書込セットのヒープタプルマップに含まれている場合には、当該ヒープタプルマップを生成しているトランザクションをアボートさせる、第８形態から第１１形態のいずれかの形態に係る下位マスタノードのデータベースの管理方法である。【００２２】
なお、上記各形態に係るデータベースの管理方法の別の形態として、以上の各構成を実現するデータベースシステムであってもよいし、プログラムであってもよいし、このようなプログラムを記録したコンピュータその他装置、機械等が読み取り可能な記憶媒体であってもよい。ここで、コンピュータ等が読み取り可能な記録媒体とは、プログラム等の情報を、電気的、磁気的、光学的、機械的、又は、化学的作用によって蓄積する媒体である。なお、データベースシステムは、１又は複数のコンピュータによって実現されてもよい。【００２３】
例えば、本発明の第１３形態は、レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースシステムであって、前記上記と下位のマスタノードは、それぞれ、データベースと、前記データベースの検索のためのインデックスとを含み、いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該更新命令が生じた下位マスタノードにおいて、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成し、上位マスタノードに対して生成した当該書込セットを送信する手段と、前記上位マスタノードにおいて、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証する手段と、前記上位マスタノードにおいて、前記更新がなされているときには当該書込セットをアボートし、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新するとともに、この更新記録をトランザクションログとして生成する手段と、前記上位マスタノードにおいて、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信する手段と、前記下位マスタノードにおいて、受信した前記トランザクションログに基づいて自身のデータベースと当該データベースのインデックスを更新する手段と、を備える。【００２４】
また、例えば、本発明の第１４形態は、データベースと当該データベースの検索のためのインデックスをそれぞれ含む、レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースにおける当該上位マスタノードに、いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、当該下位マスタノードのデータベース処理部が、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成した当該書込セットを受信するステップと、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証するステップと、前記更新がなされているときには当該書込セットをアボートし、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新するステップと、を実行させるためのプログラムである。【００２５】
また、例えば、本発明の第１５形態は、データベースと当該データベースの検索のためのインデックスをそれぞれ含む、レコード更新が可能な上位と下位のマスタノードを階層的に有するデータベースにおける当該下位マスタノードに、いずれかの下位マスタノードでデータベースへの更新命令が生じたときに、自身のメモリ上に展開された、前記更新命令によるデータベースの更新内容を示すシャドウコピーと、前記更新命令の対象となる行を示すヒープタプルマップと、前記インデックスにおいて前記データベースの更新により追加されることになる内容を示すシャドウインデックスと、を含む書込セットを生成し、前記上位マスタノードにおいて、前記下位マスタノードから受信した書込セット中のヒープタプルマップと自身のデータベースとを比較して、ターゲットとして登録されているデータベースの該当行が別の書込セットで更新されているか否かを検証させ、前記更新がなされているときには当該書込セットをアボートさせ、更新がなされていないときには前記シャドウコピーと前記シャドウインデックスとを用いて自身のデータベースと当該データベースのインデックスを更新させ、この更新記録をトランザクションログとして生成させ、前記トランザクションログを前記送信元の下位マスタノードを含む下位マスタノードに配信させるために当該書込セットを前記上位マスタノードに送信するステップと、前記トランザクションログを受信したときに、当該トランザクションログに基づいて自身のデータベースと当該データベースのインデックスを更新するステップと、を実行させるためのプログラムである。
【発明の効果】
【００２６】
本発明によれば、マスタノードが階層的に構築されるマルチマスタ環境において、下位マスタノードは、自身のメモリ上に展開されたシャドウコピーとヒープタプルマップとシャドウインデックスとを書込セットとして上位マスタノードに送信する。これを受信した上位マスタノードは、当該行が既に別の書込セットによって更新されているか否かを検証して、更新されていない時には前記シャドウコピーとヒープタプルマップとシャドウインデックスとを用いてデータベース及びインデックスの更新処理を行う。そして、本発明によれば、その更新記録をトランザクションログとして下位マスタノードに送信することで、下位マスタノードから上位マスタノード、更に、上位マスタノードから配下の下位マスタノードに対して効率的に矛盾のないデータベース更新が可能となる。
【図面の簡単な説明】
【００２７】
【図１】図１は、実施の形態に係る階層的マスタノードのデータベース構造を例示する。
【図２】図２は、実施の形態に係るマスタノードの機能ブロックを例示する。
【図３】図３は、実施の形態に係るマスタノードを例示する。
【図４】図４は、実施の形態に係る下位マスタノードのデータベースのページと生成される書込みセット（ヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）とシャドウインデックス（ＳＩ））の関係を例示する。
【図５】図５は、実施の形態の上位マスタノードにおける、下位マスタノードから送信された書込セットに含まれるヒープタプルマップ（ＨＴＭ）と自身のマスタデータベースとの比較処理を例示する。
【図６】図６は、実施の形態の上位マスタノードにおける、下位マスタノードから送信された書込セットに含まれるヒープタプルマップ（ＨＴＭ）と自身のマスタデータベースとの比較処理を例示する。
【図７】図７は、実施の形態において、下位マスタノードから送信された書込セットに含まれるシャドウコピー（ＳＣ）を用いて上位マスタノードのデータベースを更新する処理を例示する。
【図８】図８は、実施の形態において、下位マスタノードから送信された書込セットに含まれるシャドウインデックス（ＳＩ）を用いて上位マスタノードのインデックスを更新する処理を例示する。
【図９】図９は、実施の形態において、上位マスタノードで生成されるトランザクションログを例示する。
【図１０】図１０は、下位マスタノードで書込みセットが生成されている段階で当該下位マスタノードのデータベースに検索処理が実行される場面を例示する。
【発明を実施するための形態】
【００２８】
以下、本発明の一側面に係る実施の形態（以下、「本実施形態」とも表記する）を、図面に基づいて説明する。ただし、以下で説明する本実施形態は、あらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。つまり、本発明の実施にあたって、それぞれの実施形態に応じた具体的構成が適宜採用されてもよい。
【００２９】
なお、本実施形態において登場するデータを自然言語により説明しているが、より具体的には、コンピュータが認識可能な疑似言語、コマンド、パラメタ、マシン語等で指定される。
【００３０】
図１は、本実施形態に係る階層的マスタノードの構造を例示する。同図に示されるように、上位マスタノード（ＭＳ１０１）の下に階層的に下位マスタノード（ＭＳ２０１、ＭＳ２０２、・・・、ＭＳ２０ｎや、ＭＳ３０１、ＭＳ３０２、・・・、ＭＳ３０ｍ）を有するノード構成となっている。各マスタノード（情報処理装置）は、データベースと、当該データベースの検索のためのインデックスを有している。また、上位マスタノード（ＭＳ１０１）は、スレーブ（ＳＬ）を有しているが、他のマスタノードも、当該スレーブを有していてもよい。このような、マスタ・スレーブ構成における両者間のデータベースの更新には、本出願人によるＰＣＴ／ＪＰ２０１０／０５４３１１（本出願人による特許文献２に係る先行出願）に記載された更新管理技術が適用されてもよい。なお、ｎは、１以上の自然数である。また、ｍは、０以上の自然数である。マスタノード（ＭＳ２０１、ＭＳ２０２、・・・、ＭＳ２０ｎ）それぞれの配下となるマスタノードの数は異なっていてもよい。また、マスタノード（ＭＳ２０１、ＭＳ２０２、・・・、ＭＳ２０ｎ）は、それぞれ、上位マスタノード（ＭＳ１０１）と下位マスタノード（ＭＳ３０１、ＭＳ３０２、・・・、ＭＳ３０ｍ等）との間に存在するため、中位マスタノードと呼ばれてもよい。
【００３１】
上記特許文献２がマスタノードのトランザクションログを下位のノードに複製（レプリケーション）すればよかったのに対して、本実施形態では、階層的なマルチマスタノードで構成されている下位マスタノードでもアップデート命令が実行されていた場合、上位マスタノードからのトランザクションログの参照だけでは全下位マスタノードの整合性を保つことができない点に着目した点が特徴である。以下に説明する。
【００３２】
図２は、上位マスタノード（ＭＳ１０１）の機能ブロックを例示する。ただし、下位マスタノード（ＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｍ）も上位マスタノード（ＭＳ１０１）と同様の構成を有する。
【００３３】
図２に示されるように、クライアント（ＣＬ）からデータベースの更新命令が入力されると、データベース処理部（１１ｂ）は、メインメモリ（ＭＭ）上に構築されたバックエンドメモリ（ＢＥＭ）上で書込セットを生成する。この書込セットは、後述する図４に示されるように、当該更新命令によるデータベースの更新内容を示すシャドウコピー（ＳＣ）と、当該更新命令の対象となる行を示すヒープタプルマップ（ＨＴＭ）と、インデックスにおいてデータベースの更新により追加されることになる内容を示すシャドウインデックス（ＳＩ）とを含む。
【００３４】
データベース処理部１１ｂは、マスタデータベース（１１ａ）及びインデックス（１１ｅ）を参照しながら、当該マスタデータベース（１１ａ）及びインデックス（１１ｅ）に直接書き込まず、バックエンドメモリ（ＢＥＭ）で生成された書込セットを通信モジュール（１１ｄ）より上位マスタノードに送信する。
【００３５】
このような処理は、上位マスタノード（ＭＳ１０１）においても、下位マスタノード（ＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｍ）においても同様である。
【００３６】
図３は、前記機能を実現するためのハードウェア構成を例示する。上位マスタノード（ＭＳ１０１）は、例えば、汎用の情報処理装置であり、中央処理装置（ＣＰＵ）およびメインメモリ（ＭＭ）を中心にバス（ＢＵＳ）で接続された大規模記憶装置（ＨＤ）、マスタデータベース（１１ａ）、外部との通信の為の通信インタフェース（Ｉ／Ｏ）を有している。なお、当該バス（ＢＵＳ）又は通信インタフェース（Ｉ／Ｏ）を介してクライアント端末（ＣＬ）が接続されており、命令を受け付けるようになっている。なお、マスタデータベース（１１ａ）は、大規模記憶装置（ＨＤ）上に構築されてもよいし、メインメモリ（ＭＭ）上に構築されてもよい。つまり、マスタデータベース（１１ａ）の構築場所は限定されるものではない。また、インデックス（１１ｅ）は、メインメモリ（ＭＭ）上で保持されてもよいし、大規模記憶装置（ＨＤ）上に記憶されてもよい。
【００３７】
大規模記憶装置（ＨＤ）には、オペレーティングシステム（ＯＳ）とともに、アプリケーションプログラム（ＡＰＬ）が格納されており、当該プログラムをバス（ＢＵＳ）および主記憶装置（ＭＭ）を介して中央処理装置（ＣＰＵ）が読み込んで順次実行処理することによって、前述のマスタノードとしての機能が実現される。なお、下位マスタノード（ＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｍ）も同様の構成である。
【００３８】
次に、図４を用いて、データベース処理部（１１ｂ）による処理を詳細に説明する。図４は、下位マスタノード（ＭＳ２０１）におけるマスタデータベース（１１ａ）及びインデックス（１１ｅ）と、書込セットとの関係を例示する。図４は、行番号２のタプルを削除（ＤＥＬＥＴＥ）し、行番号４のタプルをＡフィールドの値を維持したままで新たな命令内容に書き換え（ｓｃ１にＵＰＤＡＴＥ）、行番号７のタプルをＡフィールドの値を変えた上で新たな命令内容に書き換え（ｓｃ２にＵＰＤＡＴＥ）、新たなタプルを追加（ｓｃ３をＩＮＳＥＲＴ）する場面を例示する。
【００３９】
マスタデータベース（１１ａ）は、行番号と、値が付与されるＡフィールドを有する命令内容と、ポインタとを含み、新たな命令がクライアント端末（ＣＬ）からなされる毎にタプルが追加されていく追記型データベースである。図４では、マスタデータベース（１１ａ）は、テーブル形式で表現されており、テーブルの１つの行データが、１つのタプルに相当する。
【００４０】
インデックス（１１ｅ）は、マスタデータベース（１１ａ）に含まれるタプルへのアクセスの効率を高めるために用いられるデータである。図４では、インデックス（１１ｅ）の各エントリは、対象タプルのＡフィールドの値と行番号とを含み、Ａフィールドの値で昇順に整列している。なお、図４では、インデックス（１１ｅ）は、リスト構造で表現されている。しかしながら、インデックス（１１ｅ）のデータ構造は、例えば、Ｂ木（または、Ｂ＋木、Ｂ*木）、ハッシュ等であってもよく、各実施形態において適宜選択されてもよい。
【００４１】
なお、本実施形態に係るインデックス（１１ｅ）は、Ａフィールドの値についてのインデックスを例示している。ただし、Ａフィールドはタプルの命令内容を例示するに過ぎず、インデックス（１１ｅ）は、マスタデータベース（１１ａ）に含まれるタプルについてのいずれの内容に係るインデックスであってよい。本実施形態は、インデックス（１１ｅ）が対象とするタプルの命令内容によって限定されるものではない。
【００４２】
下位マスタノード（ＭＳ２０１）においてクライアント端末（ＣＬ）からの命令によりマスタデータベースに対してこのような更新命令がなされると、前述のように、バックエンドメモリ（ＢＥＭ）上でヒープタプルマップ（ＨＴＭ、ヒープファイル）と、シャドウコピー（ＳＣ）と、シャドウインデックス（ＳＩ）を含む書込セットが生成される。
【００４３】
ヒープタプルマップ（ＨＴＭ）には、元の行番号（ｃｔｉｄ）と、新しい行番号（ｓｃｔｉｄ）とが関係付けられて登録されるようになっている。このように、ヒープタプルマップ（ＨＴＭ）は、データベースの更新ごとに追加生成されていく。なお、行番号４及び７の命令内容が書き込まれるタプルの行番号はこの段階ではまだ不明であるため、ｓｃｔｉｄにはそれぞれ仮の行番号（ｓｃ１及びｓｃ２）が書き込まれる。
【００４４】
また、シャドウコピー（ＳＣ）には、マスタデータベース（１１ａ）の更新内容が登録されるようになっている。具体的には、シャドウコピー（ＳＣ）には、書き換えられるタプルの内容が登録される。なお、マスタデータベース（１１ａ）に新たに追加されるタプル行番号はこの段階では不明であるため、追加されるタプルの内容を示すエントリには、それぞれ、仮の行番号（ｓｃ１、ｓｃ２、及び、ｓｃ３）が書き込まれる。
【００４５】
なお、この段階で、下位マスタノード（ＭＳ２０１）のデータベース処理部（１１ｂ）は、生成されたヒープタプルマップ（ＨＴＭ）により、ＤＥＬＥＴＥ命令が適用される行番号２のタプルと、ＵＰＤＡＴＥ命令が適用される更新元のタプルである行番号４及び７のタプルと、が削除されることを認識可能である。そのため、シャドウコピー（ＳＣ）には、行番号２、４、及び、７に係るタプルについてのエントリは書き込まれなくてもよい。すなわち、シャドウコピー（ＳＣ）は、新規に追加される行（ｓｃ１、ｓｃ２、及び、ｓｃ３）に係るエントリのみで構成されてもよい。
【００４６】
更に、シャドウインデックス（ＳＩ）には、インデックス（１１ｅ）の更新内容が登録されるようになっている。具体的には、シャドウインデックス（ＳＩ）には、追加されるエントリの内容が登録される。なお、マスタデータベース（１１ａ）に新たに追加されるタプル行番号はこの段階では不明であるため、各エントリには、それぞれ、仮の行番号（ｓｃ１、ｓｃ２、及び、ｓｃ３）が書き込まれる。
【００４７】
このようにして生成された書込セットは、当該下位マスタノード（ＭＳ２０１）から上位マスタノード（ＭＳ１０１）に送信される。なお、書込セットは、階層構造に沿って上位マスタノード（ＭＳ１０１）に送信されてもよいし、階層構造に沿わずに上位マスタノード（ＭＳ１０１）に送信されてもよい。例えば、書込セットがＭＳ３０１で生成された場合に、当該書込セットは、ＭＳ２０１を経由してＭＳ１０１に送信されてもよいし、ＭＳ３０１から直接ＭＳ１０１に送信されてもよい。
【００４８】
上位マスタノード（ＭＳ１０１）において、データベース処理部１１ｂ（中央処理装置（ＣＰＵ））は、前記下位マスタノード（ＭＳ２０１）から前記書込セットを受信すると、前記更新命令に伴ってトランザクションログ処理部（１１ｃ）を起動して、トランザクションログの生成を開始する。また、データベース処理部（１１ｂ）は、受信した前記書込セットからヒープタプルマップ（ＨＴＭ）を読み出して、自身のマスタデータベース（１１ａ）と比較する。
【００４９】
図５及び６は、それぞれ、当該比較処理を例示する。上位マスタノード（ＭＳ１０１）のデータベース処理部（１１ｂ）は、ターゲットとなっているタプル（ここでは行番号２、４及び７に係るタプル）の内容がマスタデータベース（１１ａ）上で更新されているか否かを検証する。
【００５０】
図５により例示される場面では、行番号４に係るタプルが別の書込セットで更新済み（削除済み）であり、ターゲットとなっているタプル（行番号４に係るタプル）に削除ポインタが付与されている。このとき、当該書込セットによる処理は中断され、当該書込セットはアボートされる。
【００５１】
一方、図６により例示される場面では、行番号１及び６に係るタプルが別の書込セットで更新済み（削除済み）であるが、ターゲットとなっているタプル（行番号２、４及び７に係るタプル）は未更新である。このとき、データベース処理部（１１ｂ）は、書込セットに含まれるシャドウコピー（ＳＣ）とシャドウインデックス（ＳＩ）とを用いて、自身のマスタデータベース（１１ａ）とインデックス（１１ｅ）とを更新する。
【００５２】
図７及び８は、当該更新処理を例示する。図７は、書込セットに含まれるシャドウコピー（ＳＣ）を用いてマスタデータベース（１１ａ）を更新する処理を例示する。また、図８は、書込セットに含まれるシャドウインデックス（ＳＩ）を用いてインデックス（１１ｅ）を更新する処理を例示する。
【００５３】
図４等で例示される書込セットを受信した場合、図７に例示されるように、上位マスタノード（ＭＳ１０１）のデータベース処理部（１１ｂ）は、自身のマスタデータベース（１１ａ）において、ＤＥＬＥＴＥ命令の対象である行番号２のタプルに対しては、削除ポインタを付与する。また、データベース処理部（１１ｂ）は、ＵＰＤＡＴＥ命令の対象である行番号４及び７のタプルに対しては、更新元のタプル（行番号４及び７のタプル）に削除ポインタを付与し、行番号１０及び１１のタプルに更新後のタプルとしてそれぞれ新しいタプル（ｓｃ１及びｓｃ２に係るタプル）の命令内容を書き込む。更に、データベース処理部（１１ｂ）は、ＩＮＳＥＲＴ命令に係るタプル（ｓｃ３に係るタプル）の命令内容を行番号１２のタプルに書き込む。
【００５４】
なお、シャドウコピー（ＳＣ）は、新規に追加される行（ｓｃ１、ｓｃ２、及び、ｓｃ３）に係るエントリのみで構成される場合がある。この場合、データベース処理部（１１ｂ）は、ヒープタプルマップ（ＨＴＭ）から、削除ポインタを付与するタプルを特定する。
【００５５】
また、図８に例示されるように、データベース処理部（１１ｂ）は、受信した書込セットに含まれるシャドウインデックス（ＳＩ）を用いて、インデックス（１１ｅ）を更新する。具体的には、データベース処理部（１１ｂ）は、シャドウインデックス（ＳＩ）の各エントリのＡフィールドの値を参照し、インデックス（１１ｅ）の適切な箇所に当該各エントリを追加する。図８の場合、インデックス（１１ｅ）の各エントリは、Ａフィールドの値に整列している。そのため、データベース処理部（１１ｂ）は、ｓｃ１及びｓｃ３に係るエントリをインデックス（１１ｅ）のＡフィールドの値が１２の箇所に追加する。また、データベース処理部（１１ｂ）は、ｓｃ２に係るエントリをインデックス（１１ｅ）のＡフィールドの値が２０の箇所に追加する。その際、エントリが示す行番号は、仮の行番号（ｓｃ１、ｓｃ２及びｓｃ３）ではなく、実際の行番号（１０、１１、及び、１２）に書き換えられる。
【００５６】
図９は、上位マスタノード（ＭＳ１０１）のマスタデータベース（１１ａ）が上記により更新されたときにトランザクションログ処理部（１１ｃ）で生成されるトランザクションログの一例である。このトランザクションログは、少なくとも命令とトランザクション内容（行番号とそれに対する実行処理内容）が時系列で連続的に記録されたファイルである。
【００５７】
図９に示されるように、トランザクションログ処理部（１１ｃ）では、トランザクションの開始命令（ＸＢ１）に続いて、命令番号と行番号とが対になったログが順次生成される。例えば、最初にＤＥＬＥＴＥ命令として行番号２を削除したログ（Ｄ２）が生成される。次に、ＵＰＤＡＴＥ命令として行番号４に係るタプルを削除し行番号１０に係るタプルを追加したログ（Ｕ４・１０）が生成され、当該タプルの追加に伴ってＡフィールドの値１２で行番号１０のエントリをインデックス（１１ｅ）に追加したログ（ＩＩ・１２・１０）が生成される。また、ＵＰＤＡＴＥ命令として行番号７に係るタプルを削除し行番号１１に係るタプルを追加したログ（Ｕ７・１１）が生成され、当該タプルの追加に伴ってＡフィールドの値２０で行番号１１のエントリをインデックス（１１ｅ）に追加したログ（ＩＩ・２０・１１）が生成される。続いて、ＩＮＳＥＲＴ命令として行番号１２に係るタプルを追加したログ（Ｉ１２）が生成され、当該タプルの追加に伴ってＡフィールドの値１２で行番号１２のエントリをインデックス（１１ｅ）に追加したログ（ＩＩ・１２・１２）が生成される。最後に、これらのコミット命令（ＸＣ１）が発行される。
【００５８】
このトランザクションログは、通信モジュール（１１ｄ）より前記送信元の下位マスタノード（ＭＳ２０１）をはじめ、すべての下位マスタノード（ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｍ）に対して配信される。そして、前記トランザクションログを受信した下位マスタノードでは、当該トランザクションログを自身のデータベースに複製（レプリケーション）する。
【００５９】
具体的には、下位マスタノード（たとえばＭ２０２）が図９で例示されるトランザクションログを通信モジュール（１１ｄ）で受信すると、トランザクションログ処理部（１１ｃ）を起動してこのトランザクションログを自身のマスタデータベース（１１ａ）にレプリケーションする。この結果、当該下位マスタノードのマスタデータベース（１１ａ）では、行番号２、４、及び、７に係るタプルに削除ポインタが付与され、新たな行番号１０〜１２に係るタプルが追加される。また、当該下位マスタノードのインデックス（１１ｅ）では、マスタデータベース（１１ａ）で追加された新たな行番号１０〜１２のタプルに係るエントリが追加される。
【００６０】
このように、下位マスタノードでは、上位マスタノードから送信されるトランザクションログのレプリケーションによって統一的にデータベースが管理されることになる。
【００６１】
なお、当該下位マスタノードのトランザクションログ処理部（１１ｃ）は、マスタデータベース（１１ａ）にタプルを追加することを示すログ（上記例では、Ｕ４・１０、Ｕ７・１１、ＩＩ・１２・１２）から、インデックス（１１ｅ）に追加するエントリの内容を特定することができる。そのため、上位マスタノード（ＭＳ１０１）のトランザクションログ処理部（１１ｃ）は、インデックス（１１ｅ）の更新に係るログを除外して、トランザクションログを作成してもよい。すなわち、上位マスタノード（ＭＳ１０１）のトランザクションログ処理部（１１ｃ）は、マスタデータベース（１１ａ）に係る更新記録のみを示すトランザクションログを生成してもよい。このとき、下位マスタノードのトランザクションログ処理部（１１ｃ）は、受信したトランザクションログ処理部により示されるデータベースの更新記録からインデックスの更新内容を特定し、特定した当該更新内容に基づいて自身のインデックス（１１ｅ）を更新してもよい。
【００６２】
以上、本発明を実施形態に基づいて説明したが、本発明はこれに限定されるものではない。以下、その変形例について説明する。
【００６３】
＜上位マスタノードＭＳ１０１でデータベースの更新が行われる場合＞
下位マスタノード（たとえばＭＳ２０１）でマスタデータベースの更新命令が発生した場合の処理については、図２で説明したように、バックエンドメモリ（ＢＥＭ）上でヒープタプルマップ（ＨＴＭ、ヒープファイル）とシャドウコピー（ＳＣ）とシャドウインデックス（ＳＩ）とを含む書込セットが生成されるが、上位マスタノード（ＭＳ１０１）でマスタデータベースの更新命令が発生した場合には、上位ノードに通知する必要がないため、書込セットは生成されない。すなわち、このような場合、上位マスタノード（ＭＳ１０１）では、図７及び８それぞれの左図に示されるようにマスタデータベース（１１ａ）及びインデックス（１１ｅ）に対して直接更新データの書込が行われるとともに、図９に示されるトランザクションログが生成される。このトランザクションログは下位マスタノードに配信され、前記トランザクションログを受信した下位マスタノードでは、当該トランザクションログを自身のマスタデータベースにレプリケーションする。
【００６４】
＜下位マスタノードで書込セットを生成している段階で検索処理が実行されたとき＞
下位マスタノード（たとえばＭＳ２０１）において、図４に示すような書込セットを生成している段階で、当該下位マスタノードのマスタデータベースに対して検索が実行されたとき、書込セットの生成された行番号以外の行番号を対象とした検索であれば問題はないが、該当行（ここでは行番号２、４、及び、７）に対する検索が実行された場合、これらの行番号は既に削除されているため、検索対象にはできない。このような場合に対応するため、当該下位マスタノードにおいて検索処理が実行される場合、以下のように処理される。
【００６５】
図１０は、下位マスタノードで書込みセットが生成されている段階で当該下位マスタノードのデータベースに検索処理が実行される場面を例示する。例えば、図１０に示されるように、当該検索処理では、Ａフィールドの値が「１２」であるタプルが検索されているとする。
【００６６】
この場合、まず、データベース処理部（１１ｂ）は、マスタデータベース（１１ａ）のインデックス（１１ｅ）を参照し、当該検索処理の対象となるマスタデータベース（１１ａ）の該当行（タプル）を抽出する。図１０に示される例では、インデックス（１１ｅ）において５つのエントリがヒットし、マスタデータベース（１１ａ）において、行番号２、３、４、７、及び、９に係るタプルが抽出される。
【００６７】
そして、データベース処理部（１１ｂ）は、書込セットに含まれるヒープタプルマップ（ＨＴＭ）を１行ずつ参照し、マスタデータベース（１１ａ）において抽出した該当行の行番号がエントリされているか否かをチェックする。そして、データベース処理部（１１ｂ）は、エントリされていないときには抽出した該当行を検索結果に含め、エントリされているときには抽出した該当行を検索結果から除外する。図１０に示される例では、行番号２、４、及び、７に係るエントリがヒープタプルマップ（ＨＴＭ）に存在するため、当該行番号２、４、及び、７に係るタプルが検索結果から除外される。他方、行番号３及び９に係るエントリはヒープタプルマップ（ＨＴＭ）には存在しないため、当該行番号３及び９に係るタプルが検索結果に含められる。
【００６８】
また、マスタデータベース（１１ａ）には登録されていないが、マスタデータベース（１１ａ）の更新命令が受け付けられ、検索対象（本例ではＡフィールドの値が「１２」）となるエントリがシャドウコピーに登録されている場合がある。この場合に対処するため、データベース処理部（１１ｂ）は、書込セットに含まれるシャドウインデックス（ＳＩ）を参照し、上記検索処理の対象となるシャドウコピー（ＳＣ）のエントリを抽出する。そして、データベース処理部（１１ｂ）は、抽出したエントリを検索結果に含める。図１０に示される例では、シャドウコピー（ＳＣ）における行番号ｓｃ１及びｓｃ３に係るエントリが検索結果として抽出される。つまり、本例では、マスタデータベース（１１ａ）から行番号３及び９のタプルが、シャドウコピー（ＳＣ）から行番号ｓｃ１及びｓｃ３に係るエントリが検索結果として抽出される。
【００６９】
＜下位マスタノードで上位マスタノードからのトランザクションログによる更新が行われているときの競合が生じた場合＞
上位マスタノードから配信されたトランザクションログによって下位マスタノードのデータベースにレプリケーションが行われているときに、該当行に対して下位マスタノードのデータベースの更新命令が実行されている場合、競合が発生することになる。
【００７０】
具体的には、下位マスタノードへの更新命令に基づいて行番号２と４と７とを更新しているときに、上位マスタノートから行番号４がエントリされたトランザクションログが配信されてきたときがこれに該当する。
【００７１】
このような場合には、下位マスタノードで作成された書込セットが上位マスタノードに送信されたとしても、上位マスタノードでは既に該当行に関するトランザクションログが配信されているため、前記書込セットは上位マスタノードで競合が検出されてアボートされることになる。したがって、当該下位マスタノードにおける競合は無視して差し支えない。
【００７２】
一方、このような下位マスタノードでの競合を解決する別の方法としては、下位マスタノードにおいて書込セット（ヒープタプルマップ（ＨＴＭ）とシャドウコピー（ＳＣ）とシャドウインデックス（ＳＩ））を生成したときに、これらを当該下位マスタノード内のバックエンドメモリ（ＢＥＭ）上に登録し、これらの領域を２以上のプロセス（具体的にはレプリケーションプロセスと書込セットの生成プロセス）から参照できるようにしておいてもよい。つまり、下位マスタノードにおいて、書込セット、さらに限定すればヒープタプルマップのみを共有メモリに配置しておくことが望ましい。
【００７３】
この場合には、下位マスタノードがマスタデータベース（１１ａ）のレプリケーションを実行する際に、バックエンドメモリ（ＢＥＭ）上の書込セットを参照することによって、更新命令と矛盾する書込セットを下位マスタノードの段階でアボートさせることができる。具体的には、トランザクションログ処理部（１１ｃ）は、前記バックエンドメモリ（ＢＥＭ）を参照して、この更新命令によって更新しようとしている該当行がヒープタプルマップ（ＨＴＭ）に含まれている場合には、当該ヒープタプルマップ（ＨＴＭ）を生成しているトランザクションをアボートさせる。
【００７４】
このように、ヒープタプルマップ（ＨＴＭ）を共有メモリに配置して、複数プロセスから参照できるようにしたことにより、マルチマスタ方式のデータベースにおいても下位マスタノードの段階で、競合を防止できる。さらに、ヒープタプルマップ（ＨＴＭ）のみを共有メモリに配置しておけばよいので、貴重な共有メモリを占有してしまうこともない。
【符号の説明】
【００７５】
ＭＳ１０１…上位マスタノード
ＳＬ…スレーブ
ＭＳ２０１、ＭＳ２０２、・・・、ＭＳ２０ｎ…下位マスタノード
ＭＳ３０１、ＭＳ３０２、・・・、ＭＳ３０ｍ…下位マスタノード
ＣＬ…クライアント端末
１１ａ…マスタデータベース
１１ｂ…データベース処理部
１１ｃ…トランザクションログ処理部
１１ｄ…通信モジュール
１１ｅ…インデックス
ＣＰＵ…中央処理装置
ＭＭ…主記憶装置
ＢＵＳ…バス
ＨＤ…大規模記憶装置
Ｉ／Ｏ…通信インタフェース
ＨＴＭ…ヒープタプルマップ
ＳＣ…シャドウコピー
ＳＩ…シャドウインデックス
【図１】
0006008947.tif 000002
【図２】
0006008947.tif 000003
【図３】
0006008947.tif 000004
【図４】
0006008947.tif 000005
【図５】
0006008947.tif 000006
【図６】
0006008947.tif 000007
【図７】
0006008947.tif 000008
【図８】
0006008947.tif 000009
【図９】
0006008947.tif 000010
【図１０】
0006008947.tif 000011