(57)【要約】データベースシステムに属するノードに、他のノードによって管理される第一のデータベースと同期される第二のデータベースを管理するデータベース管理部と、他のノードから送信された、第一のデータベースに対する更新命令に基づく更新内容および更新対象となるデータ単位を把握可能な情報を含む書込セットを受信する書込セット受信部と、書込セットに基づく変更が第二のデータベースに加えられる前に、書込セットに基づいて第二のデータベースに加えられる変更の仮の履歴を示す仮トランザクションログを生成する更新前ログ生成部と、第二のデータベースに更新が加えられた後に、第二のデータベースに加えられた変更の履歴を示す確定トランザクションログを生成する更新後ログ生成部と、を備えた。
2016157466.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードを備えるデータベースシステムであって、
前記複数のノードのうち、第一のノードは、
他のノードのデータベースと同期される第一のデータベースを管理する第一のデータベース管理手段と、
前記第一のデータベースに対する更新命令を受け付ける更新命令受付手段と、
前記更新命令に基づく更新を前記第一のデータベースに加えることなく、該更新命令に基づく該第一のデータベースの更新内容および該第一のデータベースにおいて更新対象となるデータ単位を把握可能な情報を含む書込セットを生成する書込セット生成手段と、
前記書込セットを、前記複数のノードのうちの第二のノードに送信する書込セット送信手段と、を備え、
前記第二のノードは、
他のノードのデータベースと同期される第二のデータベースを管理する第二のデータベース管理手段と、
前記第一のノードから送信された前記書込セットを受信する書込セット受信手段と、
前記書込セットに基づく変更が前記第二のデータベースに加えられる前に、該書込セットに基づいて該第二のデータベースに加えられる変更の仮の履歴を示す仮トランザクションログを生成する更新前ログ生成手段と、
前記第二のデータベースに更新が加えられた後に、前記第二のデータベースに加えられた変更の履歴を示す確定トランザクションログを生成する更新後ログ生成手段と、
を備える、
データベースシステム。
【請求項２】
前記第一のノードは、
前記確定トランザクションログおよび前記仮トランザクションログに係る命令の時系列上の順序を把握可能な識別情報を管理する第一の識別情報管理手段と、
前記書込セットが生成される際に、前記更新に係るデータ単位が配置される領域を仮決定する仮決定手段と、
前記第一の識別情報管理手段によって管理されている前記識別情報のうち、前記仮決定が行われた時点における、少なくとも前記領域に係る最新の識別情報を取得する識別情報取得手段と、
前記書込セットの送信と併せて、前記仮決定された領域を識別可能な情報および前記最新の識別情報を送信する追加情報送信手段と、を更に備え、
前記第二のノードは、
前記確定トランザクションログおよび前記仮トランザクションログに係る命令の時系列上の順序を把握可能な識別情報を管理する第二の識別情報管理手段と、
前記第二のデータベースに含まれる前記領域毎に、最新の更新に係る前記識別情報を保持する最新識別情報保持手段と、
前記仮決定された領域を識別可能な情報および前記最新の識別情報を受信する追加情報受信手段と、
前記仮決定された領域の前記第二のデータベースにおける最新の更新に係る識別情報と、前記第一のノードから受信された前記最新の識別情報とを比較することで、前記仮決定された領域において更新が衝突する可能性を判定する衝突判定手段と、を更に備え、
前記更新前ログ生成手段は、前記衝突判定手段によって前記仮決定された領域において更新が衝突する可能性が有ると判定されなかった場合に、前記書込セットに基づく変更が前記第二のデータベースに加えられる前に前記仮トランザクションログを生成する、
請求項１に記載のデータベースシステム。
【請求項３】
前記第二のデータベース管理手段は、前記衝突判定手段によって前記仮決定された領域において更新が衝突する可能性が有ると判定された場合に、前記書込セットに基づいて、前記第二のデータベースを更新し、
前記更新後ログ生成手段は、前記第二のデータベース管理手段による更新結果に基づいて、前記確定トランザクションログを生成する、
請求項２に記載のデータベースシステム。
【請求項４】
前記第二のノードは、
前記第二のデータベースにおいて更新されたデータ単位を示す情報を蓄積する更新データ単位情報蓄積手段と、
前記書込セット受信手段によって受信された書込セットに含まれる、前記第一のデータベースにおいて更新対象となるデータ単位を把握可能な情報と、前記更新データ単位情報蓄積手段によって蓄積された、前記第二のデータベースにおいて更新されたデータ単位を示す情報とを比較することで、更新対象データ単位の競合の有無を判定する競合判定手段と、を更に備え、
前記競合判定手段によって更新対象データ単位の競合が有ると判定された場合に、前記書込セットに基づく前記第二のデータベースの更新が中止される、
請求項１から３の何れか一項に記載のデータベースシステム。
【請求項５】
前記第二のノードは、
前記確定トランザクションログまたは前記仮トランザクションログを、前記第一のノードに対して送信するログ送信手段を更に備え、
前記第一のノードは、
前記第二のノードから送信された前記確定トランザクションログまたは前記仮トランザクションログを受信するログ受信手段を更に備え、
前記第一のデータベース管理手段は、前記確定トランザクションログまたは前記仮トランザクションログに基づいて前記第一のデータベースを更新する、
請求項１から４の何れか一項に記載のデータベースシステム。
【請求項６】
前記第二のデータベース管理手段は、前記仮トランザクションログに基づいて前記第二のデータベースを更新する、
請求項１から５の何れか一項に記載のデータベースシステム。
【請求項７】
前記第二のノードは、
前記第二のデータベースに対するクエリを受け付けるクエリ受付手段と、
前記クエリを処理するクエリ処理手段と、
前記クエリ処理手段によってクエリが処理される前に、前記更新前ログ生成手段によって生成された仮トランザクションログであって、前記第二のデータベース管理手段によって前記第二のデータベースに未反映の仮トランザクションログの有無を判定する遅延判定手段と、を更に備え、
前記第二のデータベース管理手段は、前記遅延判定手段によって未反映の仮トランザクションログが有ると判定された場合に、該未反映の仮トランザクションログに基づいて前記第二のデータベースを更新する、
請求項６に記載のデータベースシステム。
【請求項８】
前記遅延判定手段は、前記クエリを処理するにあたって必要な前記領域について、前記未反映の仮トランザクションログの有無を判定し、
前記第二のデータベース管理手段は、前記遅延判定手段によって未反映の仮トランザクションログが有ると判定された場合に、該未反映の仮トランザクションログに基づいて、前記第二のデータベースのうち、前記クエリを処理するにあたって必要な前記領域を更新する、
請求項７に記載のデータベースシステム。
【請求項９】
前記第二のノードは、
前記確定トランザクションログおよび前記仮トランザクションログに係る命令の時系列上の順序を把握可能な識別情報のうち、前記未反映の仮トランザクションログに係る前記識別情報を保持する未反映識別情報保持手段を更に備え、
前記遅延判定手段は、前記未反映識別情報保持手段によって保持される前記未反映の仮トランザクションログに係る前記識別情報を参照することで、前記未反映の仮トランザクションログの有無を判定する、
請求項８に記載のデータベースシステム。
【請求項１０】
前記第二のデータベースの前記領域の夫々には、前記確定トランザクションログおよび前記仮トランザクションログに係る命令の時系列上の順序を把握可能な識別情報のうち、該領域に反映済のトランザクションに係る該識別情報が記録され、
前記遅延判定手段は、前記クエリに係る前記領域の最新の更新に係る前記識別情報と、該領域に記録されている前記反映済トランザクションに係る前記識別情報とを比較することで、前記未反映の仮トランザクションログの有無を判定する、
請求項８に記載のデータベースシステム。
【請求項１１】
複数のノードを備えるデータベースシステムにノードとして属する情報処理装置であって、
他のノードによって管理される第一のデータベースと同期される第二のデータベースを管理するデータベース管理手段と、
前記他のノードから送信された、前記第一のデータベースに対する更新命令に基づく更新内容および更新対象となるデータ単位を把握可能な情報を含む書込セットを受信する書込セット受信手段と、
前記書込セットに基づく変更が前記第二のデータベースに加えられる前に、該書込セットに基づいて該第二のデータベースに加えられる変更の仮の履歴を示す仮トランザクションログを生成する更新前ログ生成手段と、を備える、
情報処理装置。
【請求項１２】
複数のノードを備えるデータベースシステムにおいて実行される方法であって、
前記複数のノードのうち、第一のノードが、
他のノードのデータベースと同期される第一のデータベースを管理する第一のデータベース管理ステップと、
前記第一のデータベースに対する更新命令を受け付ける更新命令受付ステップと、
前記更新命令に基づく更新を前記第一のデータベースに加えることなく、該更新命令に基づく該第一のデータベースの更新内容および該第一のデータベースにおいて更新対象となるデータ単位を把握可能な情報を含む書込セットを生成する書込セット生成ステップと、
前記書込セットを、前記複数のノードのうちの第二のノードに送信する書込セット送信ステップと、を実行し、
前記第二のノードが、
他のノードのデータベースと同期される第二のデータベースを管理する第二のデータベース管理ステップと、
前記第一のノードから送信された前記書込セットを受信する書込セット受信ステップと、
前記書込セットに基づく変更が前記第二のデータベースに加えられる前に、該書込セットに基づいて該第二のデータベースに加えられる変更の仮の履歴を示す仮トランザクションログを生成する更新前ログ生成ステップと、を実行する、
方法。
【請求項１３】
複数のノードを備えるデータベースシステムにノードとして属する情報処理装置のコンピューターに、
他のノードによって管理される第一のデータベースと同期される第二のデータベースを管理するデータベース管理ステップと、
前記他のノードから送信された、前記第一のデータベースに対する更新命令に基づく更新内容および更新対象となるデータ単位を把握可能な情報を含む書込セットを受信する書込セット受信ステップと、
前記書込セットに基づく変更が前記第二のデータベースに加えられる前に、該書込セットに基づいて該第二のデータベースに加えられる変更の仮の履歴を示す仮トランザクションログを生成する更新前ログ生成ステップと、を実行させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データベースの更新に関する。
【背景技術】
【０００２】
従来、複数のマスターノードが階層的に構成されたマルチマスターデータベースシステムにおいて、下位マスターノードが、下位マスターノードのデータベースのシャドウコピーとメモリ上に展開されたヒープタプルマップとを書込セット（ｗｒｉｔｅ  ｓｅｔ）として上位マスターノードに対して送信し、書込セットを受信した上位マスターノードが、書込セットに基づいて上位マスターノードのデータベースを更新して、その更新記録をトランザクションログとして下位マスターノードに送信することで、下位マスターノードから上位マスターノードに対して、更に上位マスターノードから配下の下位マスターノードに対して、効率的に矛盾のないデータベース更新を行う技術が提案されている（特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１２／０５６７８６号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述した従来技術では、上位マスターノードが、書込セットを上位マスターノードのデータベースに反映し、この際に生成されたトランザクションログを下位マスターノードに送信する。ここで、上位マスターノードが行う処理には、データベースの読出、更新、トランザクションログの生成、といった処理負荷の大きい処理が含まれる。このため、上述した従来技術では、一度に大量の書込セットが上位マスターノードに送られた場合、上位マスターノードの処理用キューが詰まってしまう可能性がある。【０００５】
本開示にかかる技術は、上記した問題に鑑み、複数のデータベース間で更新内容をレプリケーションする際の処理負荷の集中を回避可能なデータベースシステムを提供することを課題とする。
【課題を解決するための手段】
【０００６】
本開示では、上記した課題を解決するために、以下の手段を採用した。即ち、本開示に係るデータベースシステムは、複数のノードを備えるデータベースシステムであって、前記複数のノードのうち、第一のノードは、他のノードのデータベースと同期される第一のデータベースを管理する第一のデータベース管理手段と、前記第一のデータベースに対する更新命令を受け付ける更新命令受付手段と、前記更新命令に基づく更新を前記第一のデータベースに加えることなく、該更新命令に基づく該第一のデータベースの更新内容および該第一のデータベースにおいて更新対象となるデータ単位を把握可能な情報を含む書込セットを生成する書込セット生成手段と、前記書込セットを、前記複数のノードのうちの第二のノードに送信する書込セット送信手段と、を備え、前記第二のノードは、他のノードのデータベースと同期される第二のデータベースを管理する第二のデータベース管理手段と、前記第一のノードから送信された前記書込セットを受信する書込セット受信手段と、前記書込セットに基づく変更が前記第二のデータベースに加えられる前に、該書込セットに基づいて該第二のデータベースに加えられる変更の仮の履歴を示す仮トランザクションログを生成する更新前ログ生成手段と、前記第二のデータベースに更新が加えられた後に、前記第二のデータベースに加えられた変更の履歴を示す確定トランザクションログを生成する更新後ログ生成手段と、を備える、データベースシステムである。
【発明の効果】
【０００７】
本開示に係る技術によれば、複数のデータベース間で更新内容をレプリケーションする際の処理負荷の集中を回避可能なデータベースシステムを提供することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係るデータベースシステムにおける、マスターノードの階層構造を例示する図である。
【図２】実施形態に係るノードのハードウェア構成の概略を示す図である。
【図３】実施形態に係るノードの機能構成の概略を示す図である。
【図４】実施形態において生成される書込セットの構造を示す図である。
【図５】実施形態におけるレプリケーション処理の流れを示すフローチャートＡである。
【図６】実施形態におけるレプリケーション処理の流れを示すフローチャートＢである。
【図７】実施形態におけるレプリケーション処理の流れを示すフローチャートＣである。
【図８】実施形態における遅延対応処理の流れを示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本開示に係るシステム、情報処理装置、方法およびプログラムの実施の形態を、図面に基づいて説明する。但し、以下に説明する実施の形態は、実施形態を例示するものであって、本開示に係るシステム、情報処理装置、方法およびプログラムを以下に説明する具体的構成に限定するものではない。実施にあたっては、実施の態様に応じた具体的構成が適宜採用され、また、種々の改良や変形が行われてよい。
【００１０】
＜システムの構成＞
以下、複数のノードを有するデータベースシステムにおいて、１のノードが更新命令を受信した場合に、当該更新命令に係る更新内容を、データベースシステムに属する複数のノードが管理する夫々のデータベースに対してレプリケーションする技術を説明する。本開示に係るレプリケーション技術は、本実施形態において例示されたシステムに限らず、複数のノードを有するデータベースシステムに適用可能である。なお、本実施形態では、本開示に係るレプリケーション技術を階層型マルチマスターデータベースシステムに適用する例について説明する。
【００１１】
図１は、本実施形態に係るデータベースシステムにおける、マスターノードの階層構造を例示する図である。本実施形態に係るデータベースシステムでは、複数の情報処理装置（ノード）が互いに通信可能に接続されている。これら複数のノードは、何れも、クエリを受け付けて実行することが可能なノードである。そして、図１に示されるように、本実施形態に係るデータベースシステムは、上位マスターノードＭＳ１０１の下に階層的に下位マスターノードＭＳ２０１、ＭＳ２０２・・・ＭＳ２０ｎや、ＭＳ３０１、ＭＳ３０２・・・ＭＳ３０ｍを有するノード構成を有している。これら複数のノードは、夫々、自身が管理するデータベースを有しており、これらのデータベースは、後述するレプリケーション技術によって同期されている。
【００１２】
本開示では、レプリケーションにおいて、更新命令を受信したノードを「第一のノード」と称し、第一のノードから書込セットを受信するノードを「第二のノード」と称する。本実施形態に係る階層型マルチマスターデータベースシステムでは、更新命令を受信する下位マスターノードが第一のノードに相当し、下位マスターノードから書込セットを受信する上位マスターノードが第二のノードに相当する。また、本実施形態において、更新内容は、データベースに加えられた変更の履歴を示す確定トランザクションログ（ｆｉｘｅｄ  ｔｒａｎｓａｃｔｉｏｎ  ｌｏｇ）または仮の履歴を示す仮トランザクションログ（ｐｒｏｖｉｓｉｏｎａｌ  ｔｒａｎｓａｃｔｉｏｎ  ｌｏｇ）が、上位マスターノード（第二のノード）によって生成され、第一のノードを含む下位マスターノードへ送信されることで、システムに属する複数のノードに伝播される。
【００１３】
図２は、本実施形態に係るノード１のハードウェア構成の概略を示す図である。ノード１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２およびＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１３等からなる制御部１０と、ストレージ（補助記憶装置）１４と、通信インターフェース１５と、を備えるコンピューターである。但し、ノード１の具体的なハードウェア構成に関しては、実施の態様に応じて適宜省略や置換、追加が可能である。また、ノード１は、単一の装置に限定されない。ノード１は、所謂クラウドや分散コンピューティングの技術等を用いた、複数の装置によって実現されてよい。また、ノード１には、ネットワーク等を介してユーザー端末９が接続されている。なお、各ノード１が管理するデータベースは、ストレージ１４上に構築されてもよいし、ＲＡＭ１２上に構築されてもよく、データベースの構築場所は限定されない。
【００１４】
ストレージ１４には、オペレーティングシステムとともに、アプリケーションプログラムが格納されており、当該プログラムをバスおよびＲＡＭ１２を介してＣＰＵ１１が読み込んで順次実行処理することによって、前述のマスターノードとしての機能が実現される。なお、上位マスターノードＭＳ１０１、下位マスターノードＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎ、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｍは、何れも同様のハードウェア構成を有する。
【００１５】
図３は、本実施形態に係るマスターノード１の機能構成の概略を示す図である。本実施形態に係るマスターノード１は、夫々、更新命令受付部２１、データベース管理部２２、識別情報管理部２３、ログ送信部２４、クエリ受付部２５、クエリ処理部２６、書込セット生成部３１、書込セット送信部３２、仮決定部３３、識別情報取得部３４、追加情報送信部３５、書込セット受信部４１、追加情報受信部４２、更新データ単位情報蓄積部４３、競合判定部４４、衝突判定部４５、更新後ログ生成部４６、更新前ログ生成部４７、最新識別情報保持部４８、遅延判定部４９、未反映識別情報保持部５０およびログ受信部５１を備える。なお、上位マスターノードＭＳ１０１、下位マスターノードＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎ、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｍは、何れも同様の機能構成を有する。
【００１６】
更新命令受付部２１、データベース管理部２２、識別情報管理部２３、ログ送信部２４、クエリ受付部２５およびクエリ処理部２６は、ノード１が第一のノードとして動作する場合、および第二のノードとして動作する場合の、何れの場合においても機能する。
【００１７】
更新命令受付部２１は、データベースに対する更新命令を受け付ける。なお、更新命令受付部２１によって更新命令を受け付けたマスターノード１は、以降、当該更新命令に係る更新内容の、当該マスターノード１のデータベースへの反映および他のマスターノード１へのレプリケーションが完了するまで、第一のノードとして動作する。
【００１８】
データベース管理部２２は、他のノード１のデータベースと同期されるデータベースを管理する。また、データベース管理部２２は、書込セット、確定トランザクションログまたは仮トランザクションログに基づいて、管理対象のデータベースの更新処理を行う。書込セット、確定トランザクションログまたは仮トランザクションログの生成方法、およびこれらの情報に基づいたデータベースの具体的な更新方法については、書込セット生成部３１、更新後ログ生成部４６、更新前ログ生成部４７および後述するフローチャートの説明において後述する。
【００１９】
ノード１が第一のノードとして動作する場合、データベース管理部２２は、確定トランザクションログまたは仮トランザクションログに基づいて、第一のノードが管理するデータベース（以下、「第一のデータベース」と称する）を更新する。また、ノード１が下位マスターノードとして動作する場合、データベース管理部２２は、確定トランザクションログまたは仮トランザクションログに基づいて、当該下位マスターノードが管理するデータベースを更新する。
【００２０】
ノード１が第二のノードとして動作する場合、データベース管理部２２によるデータベースの更新方法は、後述する衝突判定部４５による判定結果に応じて異なる。ここで、本実施形態に係るデータベースでは、１のブロックは、所定のデータサイズを有し、複数のタプルを配置可能なデータ領域であり、ブロック番号を用いて識別される。このため、前記所定のデータサイズを超えるサイズを有するテーブルは、複数のブロックで構成される。衝突判定部４５によって、仮決定されたブロックにおいて更新が衝突する可能性が有ると判定された場合、第二のノードのデータベース管理部２２は、書込セットに基づいて、第二のノードが管理するデータベース（以下、「第二のデータベース」と称する）を更新する。一方、衝突判定部４５によって、仮決定されたブロックにおいて更新が衝突する可能性が有ると判定されなかった場合、第二のノードのデータベース管理部２２は、仮トランザクションログに基づいて第二のデータベースを更新する。以下、衝突判定部４５によって仮決定されたブロックにおいて更新が衝突する可能性が有ると判定された場合に、書込セットに基づいて、第二のデータベースが更新される処理ルートを、「更新後ログ生成ルート」と称する。一方、衝突判定部４５によって仮決定されたブロックにおいて更新が衝突する可能性が有ると判定されなかった場合に、仮トランザクションログに基づいて第二のデータベースが更新される処理ルートを、「更新前ログ生成ルート」と称する。
【００２１】
識別情報管理部２３は、確定トランザクションログおよび仮トランザクションログに係る命令の時系列上の順序を把握可能な識別情報を管理する。本実施形態では、このような識別情報として、ＬＳＮ（Ｌｏｇ  Ｓｅｑｕｅｎｃｅ  Ｎｕｍｂｅｒ）が用いられる。また、識別情報管理部２３は、ＬＳＮの付与対象が確定トランザクションログであるか仮トランザクションログであるかを区別せずに、同一の番号体系に基づいて、確定トランザクションログおよび仮トランザクションログにＬＳＮを付与する。このため、ＬＳＮを参照することで、確定トランザクションログと仮トランザクションログとの間でも、前後関係を把握することが可能である。
【００２２】
ログ送信部２４は、データベースに加えられた変更の履歴を示す確定トランザクションログまたは仮の履歴を示す仮トランザクションログを、より下位のマスターノード１に対して送信する。
【００２３】
クエリ受付部２５は、ユーザー端末９から送信された、データベースに対するクエリを受け付ける。
【００２４】
クエリ処理部２６は、クエリ受付部２５によって受け付けられたクエリを処理する。
【００２５】
書込セット生成部３１、書込セット送信部３２、仮決定部３３、識別情報取得部３４および追加情報送信部３５は、ノード１が第一のノード（本実施形態では、更新命令を受信した下位マスターノード）として動作する場合に機能する。
【００２６】
書込セット生成部３１は、更新命令に基づく更新を第一のデータベースに加えることなく、シャドウコピーおよびヒープタプルマップを含む書込セットを生成する。ここで、シャドウコピーは、当該更新命令に基づく当該第一のデータベースの更新内容である。また、ヒープタプルマップは、当該第一のデータベースにおいて更新対象となるタプルを把握可能な情報である。但し、書込セットは、更新命令に基づく当該第一のデータベースの更新内容、および当該第一のデータベースにおいて更新対象となるタプルを把握可能な情報を含んでいればよく、これらの情報は、本実施形態において説明するシャドウコピーおよびヒープタプルマップに限定されない。
【００２７】
図４は、本実施形態において生成される書込セットの構造を示す図である。書込セットは、自身のＲＡＭ１２上に展開された、シャドウコピーおよびヒープタプルマップを含む情報である。書込セットは、更新命令に基づく更新の対象となるタプルを含むブロックをＲＡＭ１２上に読み出して、当該ブロックに対して更新命令に基づく操作を行うことで生成される。但し、本実施形態に係るデータベースシステムでは、第一のノードの書込セット生成部３１によって書込セットが生成される時点では、第一のデータベース自体は更新されない。第一のデータベースは、第二のノードによって生成された確定トランザクションログまたは仮トランザクションログに従って更新される。第二のノードによる確定／仮トランザクションログの生成については、後述する。
【００２８】
図４には、タプル番号４および７の情報を書換するＵＰＤＡＴＥ命令、新たなタプルを１行追加するＩＮＳＥＲＴ命令、およびタプル番号２を削除するＤＥＬＥＴＥ命令（但し、本実施形態に係るデータベースは追記型データベースであるため、データは実際には消去されず、無効フラグの設定によって無効化される）、を含む更新命令に基づいて生成された書込セットが示されている。
【００２９】
ヒープタプルマップは、更新命令の対象となる行を示す情報である。具体的には、ヒープタプルマップには、元のタプル番号（図４に「タプル番号」で示された情報）と、追加されるタプルの番号を示す追加タプル番号とが関係付けられて登録される。ヒープタプルマップには、データベースの更新ごとに登録が追加される。但し、更新命令によってデータベースに新たに追加されるタプルのタプル番号はこの段階では不明である。このため、更新命令がＵＰＤＡＴＥ命令である場合、追加タプル番号にはそれぞれ、シャドウコピーにおいて設定された仮のタプル番号（図４に示す例では、ｓｃ１およびｓｃ２）が書き込まれる。また、更新命令がＩＮＳＥＲＴ命令である場合、元のタプルは存在しないため、ＩＮＳＥＲＴ命令に係る情報はヒープタプルマップには記録されない。なお、更新命令がＤＥＬＥＴＥ命令である場合、追加されるタプルは無いため、元のタプル番号に対応する追加タプル番号は設定されない（図４に示す例では、追加タプル番号として「×」が設定される）。
【００３０】
シャドウコピーは、更新命令によるデータベースの更新内容が、データベースと同一または類似するデータフォーマットで示された情報である。即ち、シャドウコピーは、更新命令による更新後のタプルのコピーであってよい。但し、本実施形態では、書込セットの生成時点においてデータベースは実際には更新されていないため、シャドウコピーは、データベースが更新されたと仮定した場合の、更新後の更新対象タプルのコピーである。このため、更新命令がＵＰＤＡＴＥ命令またはＩＮＳＥＲＴ命令である場合、上述の通り、データベースに新たに追加されるタプルのタプル番号はこの段階では不明であり、シャドウコピー中の、追加されるタプルの内容を示すエントリには、仮のタプル番号（図４に示す例では、ｓｃ１、ｓｃ２およびｓｃ３）が書き込まれる。
【００３１】
なお、本実施形態に係るデータベースシステムにおいて、タプル番号は、データベースを構成するファイルの物理的な位置にリンクした情報ではないため、データベースの実体を見ることなく、上位マスターノードが設定してよい。このため、本実施形態では、ここで設定される仮のタプル番号には、一の書込セット内で識別可能な番号が設定される。データベースに反映される際に用いる実際のタプル番号は、上位マスターノードにおいて新たに採番される。また、ブロック番号についても、追加されるタプルについては確定していないため、追加されるタプルの内容を示すエントリには、仮ブロック番号が付される。図４に示す例では、仮のタプル番号ｓｃ１、ｓｃ２およびｓｃ３が設定されたエントリには、仮ブロック番号が付されている。なお、本実施形態に係るデータベースシステムにおいて、ブロック番号は、データベースを構成するファイルの物理的な位置にリンクした、トランザクションログの作成に不可欠な情報であり、追加タプルを配置可能な空き状況のブロックを指定する必要がある。このため、本実施形態では、仮ブロック番号には、データベースの実体が参照された上で、実際に採用され得る番号が採番され、問題がない場合に、上位ノードにおいて確定される。
【００３２】
更に、更新命令がＵＰＤＡＴＥ命令またはＤＥＬＥＴＥ命令である場合、ＵＰＤＡＴＥ前のタプルおよびＤＥＬＥＴＥ対象のタプルは無効化されるため、該当するタプルには、当該タプルが無効であることを示すフラグ（図４に示す例では、「×」）が設定される。
【００３３】
但し、書込セットの具体的な構成、フォーマットまたは生成方法は、上述した例に限定されない。例えば、上記説明した例では、ＤＥＬＥＴＥ命令はヒープタプルマップおよびシャドウコピーの双方に記載されるが、ＤＥＬＥＴＥ命令は更新に際して新たなタプルが追加されない命令であるため、ヒープタプルマップおよびシャドウコピーの何れか一方に記載されれば、命令の内容を把握可能である。即ち、ＤＥＬＥＴＥ命令については、無効フラグが設定されたタプルのシャドウコピーが生成されるのみであってもよいし（この場合、ヒープタプルマップには記載されない）、または、ヒープタプルマップに追加タプル番号が無いことが示されるのみであってもよい（この場合、シャドウコピーは生成されない）。
【００３４】
書込セット送信部３２は、書込セットを、複数のノード１のうちの第二のノード（上位ノード）に送信する。
【００３５】
仮決定部３３は、書込セットが生成される際に、書込セット中で指定されたタプルのうち、データベースに追加されるタプルの夫々について、当該タプルの更新が反映されるブロックを仮決定する。上述の通り、本実施形態に係るデータベースシステムでは、第一のノードによって書込セットが生成される時点では、第一のデータベース自体は更新されず、第一のデータベースは、第二のノードによって生成された確定／仮トランザクションログに従って更新される。上記説明した特許文献１に係る技術では、上位マスターノード（本開示の第二のノードに相当）のデータベースに更新を反映した後（即ち、更新が反映されるブロックが決定された後）にトランザクションログを生成していたが、本開示では、上述した「更新前ログ生成ルート」によって処理される場合、第二のノードのデータベースに更新が反映される前に仮トランザクションログを生成するため、追加されるタプルをデータベース内の何れのブロックに配置するかという問題が生じる。このため、本実施形態では、第一のノードは、書込セットを作成する際に、追加されるタプルを配置するブロックを仮決定し、当該ブロックの番号を、仮ブロック番号として採番する。
【００３６】
識別情報取得部３４は、第一のノードの識別情報管理部２３によって管理されているＬＳＮのうち、ブロックの仮決定が行われた時点における、最新のＬＳＮを取得する。より具体的には、第一のノードの識別情報取得部３４は、仮決定部３３が仮ブロック番号を採番した時点で確定／仮トランザクションログの反映（Ｒｅｄｏ）が完了しているＬＳＮ（以下、「ＲｅｄｏＬＳＮ」と称する）を取得する。即ち、ＲｅｄｏＬＳＮとは、第一のノードにおけるレプリケーションの進行度合いを示す情報であり、第一のノードがどこまで確定／仮トランザクションログのＲｅｄｏを完了しているかを示す情報である。なお、本実施形態では、ブロックの仮決定が行われた時点における最新のＬＳＮとしてＲｅｄｏＬＳＮが取得されるが、ブロックの仮決定が行われた時点における最新のＬＳＮは、少なくとも当該ブロックにおける最新のＬＳＮまたはそれよりも新しいＬＳＮであればよく、例えば、ブロックＬＳＮ（ブロックが最後に更新された際のＬＳＮ）であってもよい。
【００３７】
追加情報送信部３５は、書込セットの送信と併せて、仮決定されたブロックを識別可能な情報および最新のＬＳＮを送信する。より具体的には、第一のノードの追加情報送信部３５は、仮決定部３３によって採番された仮ブロック番号と、識別情報取得部３４によって取得されたＲｅｄｏＬＳＮとを、第二のノードに通知する。なお、仮ブロック番号および最新のＬＳＮの具体的な通知方法は、本実施形態において説明された例に限定されない。例えば、本実施形態では、仮ブロック番号は、上述の通り書込セット内のシャドウコピーに設定されることで第二のノードに通知されるが、仮ブロック番号は、書込セット内のヒープタプルマップに設定されることで通知されてもよいし、書込セットとは別に通知されてもよい。
【００３８】
書込セット受信部４１、追加情報受信部４２、更新データ単位情報蓄積部４３、競合判定部４４、衝突判定部４５、更新後ログ生成部４６、更新前ログ生成部４７、最新識別情報保持部４８、遅延判定部４９および未反映識別情報保持部５０は、ノード１が第二のノード（本実施形態では、書込セットを受信して確定／仮トランザクションログを生成する上位ノード）として動作する場合に機能する。
【００３９】
書込セット受信部４１は、第一のノードから送信された書込セットを受信する。
【００４０】
追加情報受信部４２は、仮決定されたブロックを識別可能な情報および最新のＬＳＮを受信する。本実施形態では、第二のノードの追加情報受信部４２は、第一のノードの追加情報送信部３５によって送信された仮ブロック番号およびＲｅｄｏＬＳＮを受信する。
【００４１】
更新データ単位情報蓄積部４３は、第二のデータベースにおいて更新されたデータ単位（本実施形態では、更新されたタプル）を示す情報として、コミットされたトランザクションで更新されたタプルのタプル番号（何れのタプルが何れの時点で更新されたか、を把握可能な情報）を蓄積する。これは、次にコミットしようとするトランザクションが同じ番号のタプルを更新しようとしていないかをチェックする、競合判定を行うためである。なお、本実施形態では、データベースにおいて個々のレコードとして扱われるデータ単位をタプルと称して説明しているが、本開示を適用可能なデータベースシステムは、リレーショナルデータベースに限定されない。
【００４２】
競合判定部４４は、書込セット受信部４１によって受信された書込セットに含まれる、ヒープタプルマップ（第一のデータベースにおいて更新対象となるタプルを把握可能な情報）と、更新データ単位情報蓄積部４３によって蓄積されたタプル番号（第二のデータベースにおいて更新されたタプルを示す情報）とを比較し、一致するタプル番号が存在するか否かを確認することで、更新対象タプルの競合の有無を判定する。競合判定部４４によって更新対象タプルの競合が有ると判定された場合、書込セットに基づく第二のデータベースの更新は中止される。
【００４３】
衝突判定部４５は、第二のノードの識別情報管理部２３によって管理されているＬＳＮのうち仮決定されたブロックに係る最新のＬＳＮ（例えば、更新が行われた際のブロックＬＳＮ）と、受信された最新のＬＳＮとを比較することで、仮決定されたブロックにおいて更新が衝突する可能性を判定する。
【００４４】
更新後ログ生成部４６および更新前ログ生成部４７は、確定トランザクションログまたは仮トランザクションログを生成する。ここで、確定トランザクションログは、データベースの更新後に、更新結果に基づいて生成される、データベースの変更履歴である。また、仮トランザクションログは、データベースの変更前に、書込セットに基づいて生成される、データベースの仮の変更履歴であり、確定トランザクションログと同様のデータフォーマットに従って生成され、所定のタイミングで確定トランザクションログとなる。具体的には、確定／仮トランザクションログは、少なくとも命令とトランザクション内容（タプル番号とそれに対する実行処理内容）が時系列で連続的に記録されたファイルである。本実施形態では、確定／仮トランザクションログは、更新するタプルの内容および更新対象のブロック番号を含むため、確定／仮トランザクションログの生成には、更新対象のブロック番号が必要である。データベースシステムでは、トランザクションログをデータベースの記録領域とは異なる領域に記録することにより、変更の永続性を維持しながら同時に操作の高速性を実現することを可能としている。
【００４５】
更新後ログ生成部４６は、第二のノードのデータベース管理部２２によるデータベースの更新結果に基づいて、第二のデータベースに加えられた変更の履歴を示す確定トランザクションログを生成する。
【００４６】
更新前ログ生成部４７は、衝突判定部４５によって仮決定されたブロックにおいて更新が衝突する可能性が有ると判定されなかった場合（更新前ログ生成ルート）に、書込セットに基づく変更が第二のデータベースに加えられる前に、当該書込セットに基づいて当該第二のデータベースに加えられる変更の仮の履歴を示す仮トランザクションログを生成する。
【００４７】
最新識別情報保持部４８は、第二のデータベースに含まれるブロック毎に、当該ブロックの最新の更新に係るＬＳＮを保持する。即ち、第二のノードは、上記競合判定のためのタプル更新情報に加えて、何れのブロックが何れの時点で更新されたか、を把握可能な情報（例えば、確定／仮トランザクションログのＬＳＮ）を保持しておく。なお、本実施形態では、仮トランザクションログのＬＳＮについても、仮トランザクションログが生成された時点で最新識別情報保持部４８によって保持される。このため、仮トランザクションログの反映に遅延が発生している場合、最新識別情報保持部４８によって保持されるブロック毎のＬＳＮは、夫々のブロックに保持されている反映済のＬＳＮよりも新しい番号となる。
【００４８】
遅延判定部４９は、クエリ処理部２６によってクエリが処理される前に、更新前ログ生成部４７によって生成された仮トランザクションログであって、第二のノードのデータベース管理部２２によって第二のデータベースに未反映の仮トランザクションログの有無を判定する。
【００４９】
未反映識別情報保持部５０は、未反映の仮トランザクションログに係るＬＳＮを保持する。本実施形態では、未反映の仮トランザクションログに係るＬＳＮは、スキップ情報として保持される。
【００５０】
ログ受信部５１は、ノード１が第一のノードを含む下位マスターノード１として動作する場合に機能する。
【００５１】
ログ受信部５１は、第二のノードから送信された確定／仮トランザクションログを受信する。
【００５２】
＜処理の流れ＞
次に、本実施形態に係る処理の詳細を説明する。なお、本実施形態において説明される処理の具体的な内容および順序等は、実施する上での一例である。具体的な処理内容および順序等は、実施の態様に応じて適宜選択されてよい。
【００５３】
図５、図６および図７は、本実施形態におけるレプリケーション処理の流れを示すフローチャートである。図５のフローチャートに示された処理は、データベースシステムに属する何れかのマスターノード１によって、更新命令が受信されたことを契機として開始され、更新命令単位で処理される。
【００５４】
ステップＳ１０１およびステップＳ１０２では、更新命令が受信され、ブロックが仮決定される。更新命令受付部２１は、第一のデータベースに対する更新命令を受け付ける（ステップＳ１０１）。そして、仮決定部３３は、書込セットが生成される際に、第一のデータベースの実体を参照して、ブロックの空き状況を確認する。そして、仮決定部３３は、データベースに追加されるタプルの夫々が配置されるブロックとして、追加タプルを配置可能な空き状況のブロックのうちの何れかを仮決定し、夫々の追加タプルに対して、仮ブロック番号を採番する（ステップＳ１０２）。但し、更新命令がＤＥＬＥＴＥ命令である場合、追加されるタプルは無いため、仮ブロック番号の採番は行われない。その後、処理はステップＳ１０３へ進む。
【００５５】
ステップＳ１０３では、ＬＳＮが取得される。識別情報取得部３４は、第一のノードの識別情報管理部２３によって管理されているＬＳＮのうち、ブロックの仮決定が行われた時点における、最新のＬＳＮを取得する。その後、処理はステップＳ１０４へ進む。
【００５６】
ステップＳ１０４では、書込セットが生成される。書込セット生成部３１は、更新命令に基づく更新を第一のデータベースに加えることなく、シャドウコピーおよびヒープタプルマップを含む書込セットを生成する。その後、処理はステップＳ１０５へ進む。
【００５７】
ステップＳ１０５およびステップＳ１０６では、書込セットが送受信される。書込セット送信部３２は、書込セットを、複数のノード１のうちの第二のノード（本実施形態では、階層型マルチマスターデータベースシステムにおける上位ノード）に送信する。また、追加情報送信部３５は、書込セットの送信と併せて、仮決定されたブロックを識別可能な情報および最新のＬＳＮを送信する（ステップＳ１０５）。書込セット受信部４１は、第一のノードから送信された書込セットを受信する。また、追加情報受信部４２は、仮決定されたブロックを識別可能な情報および最新のＬＳＮを受信する（ステップＳ１０６）。その後、本フローチャートに示された処理は終了し、図６および図７に示された処理が実行される。
【００５８】
図６および図７のフローチャートに示された処理は、第二のノードによって書込みセット等が受信されたことを契機として開始され、書込セットに含まれるタプル単位で処理される。
【００５９】
ステップＳ２０１では、競合判定が行われる。競合判定部４４は、書込セット受信部４１によって第一のノードから受信された書込セットに含まれる、ヒープタプルマップ（第一のデータベースにおいて更新対象となるタプルを把握可能な情報）と、第二のノードの更新データ単位情報蓄積部４３によって蓄積されたタプル番号（第二のデータベースにおいて更新されたタプルを示す情報）とを比較し、一致するタプル番号が存在するか否かを確認することで、更新対象タプルの競合の有無を判定する。ここで参照されるタプル番号は、本フローチャートに係るレプリケーション処理が以前に実行された際に、後述するステップＳ２０６において蓄積されたものである。競合判定の結果、受信タプル番号と競合判定用のタプル番号とが競合する（一致するタプル番号が存在する）と判定された場合、処理はステップＳ２０２へ進む。一方、競合判定の結果、受信タプル番号と競合判定用のタプル番号とが競合しない（一致するタプル番号が存在しない）と判定された場合、処理はステップＳ２０６へ進む。なお、更新命令がＩＮＳＥＲＴ命令である場合、当該命令は既存のタプルを変更するものでは無いため、競合判定は行われない。即ち、更新命令がＩＮＳＥＲＴ命令である場合、処理は自動的にステップＳ２０６へ進んでよい。
【００６０】
ステップＳ２０２からステップＳ２０５では、更新中断のための処理が行われる。ステップＳ２０１の競合判定において更新対象タプルが競合すると判定された場合、該当するタプルを含む書込セットに基づく、第二のデータベースの更新が中止される。具体的には、第二のノードにおけるデータベースの更新が中断されると（ステップＳ２０２）、更新中断通知が第一のノードに送信される（ステップＳ２０３）。そして、第一のノードは、第二のノードから送信された更新中断通知を受信し（ステップＳ２０４）、ステップＳ１０４で生成された書込セットに係るデータベースの更新を中断する（ステップＳ２０５）。なお、更新中断の対象となった書込セットについて、下位マスターノードに対して既に送信された確定／仮トランザクションログがある場合には、下位マスターノード全体に対して、送信済の確定／仮トランザクションログのアボート通知を送信する。その後、本フローチャートに示された処理は終了する。また、確定／仮トランザクションログの送信についてはステップＳ２２４およびステップＳ２３４の説明において後述する。
【００６１】
ステップＳ２０６では、競合判定用のタプル番号が登録される。更新データ単位情報蓄積部４３は、第二のデータベースにおいて更新されたタプルを示す情報として、更新されたタプルのタプル番号を蓄積する。ここで蓄積されたタプル番号は、本フローチャートに係るレプリケーション処理が次回以降実行された際に、ステップＳ２０１で参照される。その後、処理はステップＳ２２０へ進む。
【００６２】
ステップＳ２２０では、衝突判定が行われる。衝突判定部４５は、仮決定されたブロックの第二のノードにおける最新のＬＳＮと、受信された最新のＬＳＮとを比較することで、仮決定されたブロックにおいて更新が衝突する可能性を判定する。なお、ここで、第二のノードにおけるブロック毎の最新のＬＳＮは、最新識別情報保持部４８によって保持されている情報が参照されることで取得される。本ステップにおける判定は、書込セットに含まれる更新対象のタプル毎に行われる。これは、タプル毎に仮決定されたブロックの更新状況が異なるためである。
【００６３】
衝突判定の結果、受信ＬＳＮがブロック毎の最新ＬＳＮ情報より古いと判定された場合、仮ブロック番号に係るブロックの内容が、第一のノードで仮ブロック番号が採番された状態から変更されている可能性がある。この場合、仮ブロック番号を採用すると、更新が衝突し、例えば、当該ブロックにタプルを挿入するスペースが存在しない等の問題が生じ得る。このため、受信ＬＳＮがブロック毎の最新ＬＳＮ情報より古いと判定された追加タプルを含む更新命令については、仮ブロック番号を破棄して書込セットによるデータベース更新を行うための処理ルート（更新後ログ生成ルート）が採用され、処理はステップＳ２２１へ進む。一方、衝突判定の結果、受信ＬＳＮがブロック毎の最新ＬＳＮ情報より古いと判定された追加タプルを含まない更新命令については、仮ブロック番号を採用しても、更新は衝突しないため、仮ブロック番号を採用してデータベースの更新前に仮トランザクションログを生成する処理ルート（更新前ログ生成ルート）が採用され、処理はステップＳ２３１へ進む。なお、上述の通り、更新命令がＤＥＬＥＴＥ命令である場合、追加されるタプルは無いため、仮ブロック番号の採番は行われていない。このため、処理対象のタプルがＤＥＬＥＴＥ命令に係るタプルである場合には、衝突判定は行われず、処理はステップＳ２３１へ進む。即ち、ＤＥＬＥＴＥ命令に係るタプルについては、自動的に更新前ログ生成ルートを採用することが出来る。
【００６４】
ステップＳ２２１では、書込セットに基づいてデータベースが更新される。第二のノードのデータベース管理部２２は、書込セットに含まれるヒープタプルマップおよびシャドウコピー等に基づいて第二のデータベース中のタプルを書換／追加することで、第二のデータベースを更新する（更新後ログ生成ルート）。この際、仮ブロック番号は破棄され、第二のデータベースの状況に基づいて、新たなブロック番号が採番される。
【００６５】
仮決定されたブロックにおいて更新が衝突する可能性が有ると判定された場合（更新後ログ生成ルート）、第二のノードのデータベース管理部２２は、ヒープタプルマップを参照して元のタプル番号を特定し、第二のデータベースにおける、当該タプル番号のタプルを、対応するシャドウコピーの内容で更新する。また、ヒープタプルマップに、追加タプル番号が設定されている場合、第二のノードのデータベース管理部２２は、第二のデータベースに、新しい追加タプル番号を採番してタプルを追加し、当該タプルを、対応するシャドウコピーの内容（仮のタプル番号を除く）で更新する。その後、処理はステップＳ２２２へ進む。
【００６６】
ステップＳ２２２では、確定トランザクションログが生成される。更新後ログ生成部４６は、第二のノードのデータベース管理部２２による更新結果に基づいて、第二のデータベースに加えられた変更の履歴を示す確定トランザクションログを生成する。その後、処理はステップＳ２２３へ進む。
【００６７】
ステップＳ２２３およびステップＳ２２４では、ブロック毎の最新ＬＳＮ情報が更新され、確定トランザクションログが送信される。最新識別情報保持部４８は、第二のデータベースに含まれるブロックの、最新の更新に係るＬＳＮを保持する（ステップＳ２２３）。ログ送信部２４は、第二のデータベースに加えられた変更の履歴を示す確定トランザクションログを、第一のノードを含む１または複数の下位マスターノード（例えば、下位マスターノードＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎ、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｍ）に対して送信する（ステップＳ２２４）。その後、本フローチャートに示された処理は終了する。
【００６８】
ステップＳ２３１では、書込セットに基づいて仮トランザクションログが生成される。ここでは、ステップＳ２２０の衝突判定において、仮決定されたブロックにおいて更新が衝突する可能性が有ると判定されなかったため、仮ブロック番号を採用可能である。このため、更新前ログ生成部４７は、書込セットに基づく変更が第二のデータベースに加えられる前に、当該書込セットに基づいて当該第二のデータベースに加えられる変更の仮の履歴を示す仮トランザクションログを生成し、当該仮トランザクションのためのＬＳＮを採番する（更新前ログ生成ルート）。その後、処理はステップＳ２３２へ進む。
【００６９】
ステップＳ２３２では、スキップ情報が登録される。未反映識別情報保持部５０は、未反映の仮トランザクションログに係るＬＳＮを、スキップ情報として保持する。スキップ情報は、後述する遅延対応処理において参照される。その後、処理はステップＳ２３３へ進む。なお、本ステップに係る処理は、後述するステップＳ２３３よりも後に実行されてもよい。
【００７０】
ステップＳ２３３およびステップＳ２３４では、ブロック毎の最新ＬＳＮ情報が更新され、仮トランザクションログが送信される。処理の詳細は、送信される情報が確定トランザクションログではなく仮トランザクションログである点を除いてステップＳ２２３およびステップＳ２２４の説明で上述したものと同様であるため、説明を省略する。仮トランザクションログが第一のノードを含む１または複数の下位マスターノード（例えば、下位マスターノードＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎ、ＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｍ）に送信されることについても、ステップＳ２２３およびステップＳ２２４と同様である。その後、処理はステップＳ２３５へ進む。
【００７１】
ステップＳ２３５では、仮トランザクションログに基づいてデータベースが更新される。第二のノードのデータベース管理部２２は、仮トランザクションログに基づいて第二のデータベース中のタプルを書換／追加することで、第二のデータベースを更新する。上述の通り、仮トランザクションログは、少なくとも命令とトランザクション内容（タプル番号とそれに対する実行処理内容）が時系列で連続的に記録されたファイルである。このため、第二のノードのデータベース管理部２２は、仮トランザクションログに記録された処理を、時系列順に第二のノードにおいて再現することで、第二のデータベースを更新する。仮トランザクションログに基づいたトランザクションの再現については、データベース管理において一般的な、トランザクションログに基づいたトランザクションの再現技術と同様であるため、詳細な説明については省略する。この際、データの反映が行われたブロックには、当該トランザクションに係るＬＳＮが記録される。その後、処理はステップＳ２３６へ進む。
【００７２】
ステップＳ２３６およびステップＳ２３７では、スキップ情報が削除され、仮トランザクションログが確定される。未反映識別情報保持部５０は、ステップＳ２３５で反映された仮トランザクションログに係るＬＳＮを、スキップ情報から削除する（ステップＳ２３６）。そして、第二のノードは、ステップＳ２３５で反映された仮トランザクションログを、確定トランザクションログとする（ステップＳ２３７）。その後、本フローチャートに示された処理は終了する。
【００７３】
なお、ステップＳ２３５からステップＳ２３７の処理は、第二のノードにおける処理負荷に応じて遅延させてもよい。また、ステップＳ２３５からステップＳ２３７の処理を意図的に遅延させることで、第二のノード処理負荷を分散させることが出来る。例えば、ステップＳ２３５からステップＳ２３７の処理を実行するプロセスを、他のステップを実行するプロセスとは別のプロセスとし、バックグラウンドで動作させることで、第二のノード処理負荷を分散させることとしてもよい。ステップＳ２３５からステップＳ２３７の処理が遅延している場合のクエリへの対応については、後述する。
【００７４】
ステップＳ２４１およびステップＳ２４２では、確定／仮トランザクションログが受信され、確定／仮トランザクションログに基づいてデータベースが更新される。第一のノードを含む１または複数の下位マスターノードのログ受信部５１は、ステップＳ２２４またはステップＳ２３４において第二のノードから送信された確定／仮トランザクションログを受信する（ステップＳ２４１）。そして、第一のノードを含む１または複数の下位マスターノードのデータベース管理部２２は、確定／仮トランザクションログに基づいて、夫々のノード１が管理するデータベースを更新する（ステップＳ２４２）。
【００７５】
ここで、データベース管理部２２は、確定／仮トランザクションログに記録された処理を、時系列順に再現することで、当該ノードのデータベースを更新する。確定／仮トランザクションログに基づいたトランザクションの再現については、データベース管理において一般的な、トランザクションログに基づいたトランザクションの再現技術と同様であるため、詳細な説明については省略する。なお、第一のノードは、ステップＳ１０４において書込セットを生成し、また仮ブロック番号の採番を行っているが、これらの情報は第一のデータベースを実際に更新する際には参照されない。第一のノードにおいても、データベースの更新は、受信された確定／仮トランザクションログに従って行われる。その後、本フローチャートに示された処理は終了する。
【００７６】
確定／仮トランザクションログを受信したノード（例えば、下位マスターノードＭＳ２０１，ＭＳ２０２・・・ＭＳ２０ｎ）に、より下位のマスターノード（例えば、下位マスターノードＭＳ３０１，ＭＳ３０２・・・ＭＳ３０ｍ）が従属している場合、確定／仮トランザクションログを受信したノード１のログ送信部２４は、第二のデータベースに加えられた変更の履歴（または仮の履歴）を示す確定／仮トランザクションログを、より下位のマスターノード１に対して送信（転送）する（図示は省略する）。そして、確定／仮トランザクションログは、最も下位のマスターノード１に到達するまで、より下位のマスターノード１に対して転送される。確定／仮トランザクションログを受信したマスターノード１は、確定／仮トランザクションログに基づいて、当該ノード１が管理するデータベースを更新する（ステップＳ２４１およびステップＳ２４２を参照）。このようにして、本実施形態に係る階層型マルチマスターデータベースシステムでは、データベースシステムに属する複数のマスターノード１に、更新内容を伝播する。
【００７７】
図８は、本実施形態における遅延対応処理の流れを示すフローチャートである。本フローチャートに示された処理は、第二のノードによって、クエリが受信されたことを契機として開始される。
【００７８】
ステップＳ３０１およびステップＳ３０２では、クエリが受信され、クエリに関連するブロックが読み出される。クエリ受付部２５は、ユーザー端末９から送信された、データベースに対するクエリを受け付ける（ステップＳ３０１）。そして、クエリ処理部２６は、受信されたクエリの処理に必要なブロックを、第二のデータベースから読み出す（ステップＳ３０２）。その後、処理はステップＳ３０３へ進む。
【００７９】
ステップＳ３０３では、遅延判定が行われる。遅延判定部４９は、クエリ処理部２６によってクエリが処理される前に、クエリの処理に必要となるブロックにおいて、データベースへの反映が遅延している仮トランザクションログが存在するか否かを判定する。
【００８０】
具体的には、遅延判定部４９は、遅延判定部４９は、クエリの処理に係るブロックに係るスキップ情報が蓄積されているか否かに基づいて、未反映の仮トランザクションログの有無を判定する。遅延判定の結果、未反映の仮トランザクションログが有ると判定された場合、処理はステップＳ３０４へ進む。一方、遅延判定の結果、未反映の仮トランザクションログがないと判定された場合、処理はステップＳ３０６へ進む。
【００８１】
なお、未反映の仮トランザクションログの有無は、その他の方法で判定されてもよい。例えば、遅延判定部４９は、クエリを処理するにあたって必要なブロックについて、ステップＳ３０２で読み出されたブロックの最新の更新に係るＬＳＮと、読み出されたブロックに記録されているＬＳＮとを比較することで、未反映の仮トランザクションログの有無を判定してもよい。なお、ここで、第二のノードにおけるブロック毎の最新の更新に係るＬＳＮは、最新識別情報保持部４８によって保持されている情報が参照されることで取得される。最新識別情報保持部４８によって保持されているＬＳＮが、読み出されたブロックに記録されているＬＳＮよりも新しいと判定された場合、遅延判定部４９は、未反映の仮トランザクションログが有ると判定する。また、ブロック毎にスキップ情報の有無を示すフラグを設定しておき、遅延判定部４９は、このフラグを参照することで、未反映の仮トランザクションログの有無を判定してもよい。
【００８２】
ステップＳ３０４およびステップＳ３０５では、対応する仮トランザクションログが特定され、特定された仮トランザクションログに基づいてデータベースが更新される。遅延判定部４９によって未反映の仮トランザクションログが有ると判定された場合、遅延判定部４９は、スキップ情報中の、ブロックが最後に更新された際のＬＳＮよりも新しいＬＳＮに係る仮トランザクションログを特定する（ステップＳ３０４）。そして、第二のノードのデータベース管理部２２は、当該未反映の仮トランザクションログに基づいて、第二のデータベースのうち、クエリを処理するにあたって必要なブロックを更新する（ステップＳ３０５）。その後、処理はステップＳ３０６へ進む。
【００８３】
ステップＳ３０６では、クエリに関連する全てのブロックの読み出しが行われたか否かが判定される。クエリに関連するブロックで未だ読み出しされていないブロックがある場合、処理はステップＳ３０２へ進む。即ち、本フローチャートに示された処理では、クエリの処理に必要なブロックの全てについて、遅延判定が行われ、データベース反映の遅延が検出された場合、仮トランザクションログに基づくデータベース更新が行われる。一方、クエリに関連する全てのブロックの読み出しが行われた場合、処理はステップＳ３０７へ進む。
【００８４】
ステップＳ３０７では、クエリが実行される。クエリ処理部２６は、クエリ受付部２５によって受け付けられたクエリを処理する。その後、本フローチャートに示された処理は終了する。
【００８５】
＜効果＞
従来、複数のマスターノードが階層的に構成されたマルチマスターデータベースシステムにおいて、下位マスターノードが、下位マスターノードのデータベースのシャドウコピーとメモリ上に展開されたヒープタプルマップとを書込セットとして上位マスターノードに対して送信し、書込セットを受信した上位マスターノードが、書込セットに基づいて上位マスターノードのデータベースを更新して、その更新記録をトランザクションログ（本実施形態における確定トランザクションログに相当）として下位マスターノードに送信し、下位マスターノードのデータベースが当該トランザクションログに基づいて下位マスターノードのデータベースを更新する技術があった（更新後ログ生成ルート）。
【００８６】
しかし、上述した従来技術では、書込セットを上位マスターノードのデータベースに反映してトランザクションログを生成する処理が、ボトルネックになりやすく、一度に大量の書込セットが上位マスターノードに送られた場合、上位マスターノードの処理用キューが詰まってしまう可能性がある。
【００８７】
上記説明した実施形態によれば、上記「更新後ログ生成ルート」に加えて、第二のノードのデータベースへの反映をスキップして仮トランザクションログに変換する「更新前ログ生成ルート」を用意し、更新前ログ生成ルートで処理可能な書込セットを更新前ログ生成ルートで処理することで、複数のデータベース間で更新内容をレプリケーションする際の処理負荷の集中を回避することが可能となる。
【図１】
2016157466.tif 000003
【図２】
2016157466.tif 000004
【図３】
2016157466.tif 000005
【図４】
2016157466.tif 000006
【図５】
2016157466.tif 000007
【図６】
2016157466.tif 000008
【図７】
2016157466.tif 000009
【図８】
2016157466.tif 000010
【国際調査報告】
2016157466.tif 000011
2016157466.tif 000012