(57)【要約】  トランザクションログを適用してデータベースを更新する処理の速度を改善する技術を提供する。トランザクションログを利用して自身のデータベースを更新するコンピュータが、トランザクションログを取得し、取得したトランザクションログのレコードを先頭から順に参照し、トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、更新命令の対象がメモリ上に読み出されている場合は該更新命令を実行し、更新命令の対象がメモリ上に読み出されていない場合は該更新命令の実行を待機させることで、トランザクションログのレコードを処理し、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象になるまでに、又は、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象となった際に、該対象について待機させた更新命令を実行する。
2014097475.tif 000002
【特許請求の範囲】
【請求項１】
トランザクションログを利用して自身のデータベースを更新するコンピュータが、
前記トランザクションログを取得するステップと、
取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されている場合は該更新命令を実行し、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されていない場合は該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理するステップと、
待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象になるまでに、又は、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象となった際に、該対象について待機させた更新命令を実行するステップと、
を実行する情報処理方法。
【請求項２】
前記コンピュータは、前記トランザクションログを取得するステップにおいて、他のコンピュータのデータベースと前記自身のデータベースとの間でレプリケーションを行うために、前記他のコンピュータにおいて直列的に作成されたトランザクションログを取得する、
請求項１に記載の情報処理方法。
【請求項３】
前記コンピュータは、
前記レコードにより示される更新命令の実行を待機させる際、前記更新命令の対象に待機させた更新命令が存在することを示すために、待機させた前記更新命令の内容及び前記レコードの番号のうちの少なくとも一方を、前記更新命令の対象に関連付けてマップ情報に記録し、
前記マップ情報を参照して、前記対象について待機させた更新命令を実行する、
請求項１又は２に記載の情報処理方法。
【請求項４】
前記コンピュータは、
処理の対象の前記メモリへの読み込みを所定の集合ごとに行い、
前記レコードにより示される更新命令の実行を待機させる際、前記更新命令の対象に待機させた更新命令が存在することを示すために、待機させた前記更新命令の内容及び前記レコードの番号のうちの少なくとも一方を、前記更新命令の対象を含む所定の集合に関連付けてマップ情報に記録し、
前記所定の集合が前記メモリ上に読み出されて処理の対象になるまでに、又は、前記所定の集合が前記メモリ上に読み出されて処理の対象となった際に、前記マップ情報を参照して、前記所定の集合に含まれる対象について待機させた更新命令を実行する、
請求項１又は２に記載の情報処理方法。
【請求項５】
前記コンピュータは、前記自身のデータベースに対する検索処理を、該検索処理に関して処理されていることが求められる前記トランザクションログのレコードに対する処理が完了するまで、待機させる、
請求項１から４のいずれか１項に記載の情報処理方法。
【請求項６】
トランザクションログを利用して自身のデータベースを更新するコンピュータが、
前記トランザクションログを取得するステップと、
取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理するステップと、
待機させた更新命令の対象が処理の対象になるまでに、又は、待機させた更新命令の対象が処理の対象となった際に、該対象について待機させた更新命令を実行するステップと、
を実行する情報処理方法。
【請求項７】
前記コンピュータは、前記トランザクションログを取得するステップにおいて、他のコンピュータのデータベースと前記自身のデータベースとの間でレプリケーションを行うために、前記他のコンピュータにおいて直列的に作成されたトランザクションログを取得する、
請求項６に記載の情報処理方法。
【請求項８】
前記コンピュータは、
前記更新命令を待機させる際に、前記更新命令の対象に待機させた更新命令が存在することを示すために、前記更新命令の内容と前記更新命令に係るレコードの番号のうち少なくとも一方を前記更新命令の対象に関連付けてマップ情報に記録し、
前記マップ情報を参照して、前記対象について待機させた前記更新命令を実行する、
請求項６又は７に記載の情報処理方法。
【請求項９】
前記コンピュータは、
処理の対象の前記メモリへの読み込みを所定の集合ごとに行い、
前記更新命令の実行を待機させる際、前記更新命令の対象に待機させた更新命令が存在することを示すために、待機させた前記更新命令の内容及び前記レコードの番号のうちの少なくとも一方を、前記更新命令の対象を含む所定の集合に関連付けてマップ情報に記録し、
前記所定の集合が処理の対象になるまでに、又は、前記所定の集合が処理の対象となった際に、前記マップ情報を参照して、前記所定の集合に含まれる対象について待機させた更新命令を実行する、
請求項６又は７に記載の情報処理方法。
【請求項１０】
前記コンピュータは、前記自身のデータベースに対する検索処理を、該検索処理に関して処理されていることが求められる前記トランザクションログのレコードに対する処理が完了するまで、待機させる、
請求項６から９のいずれか１項に記載の情報処理方法。
【請求項１１】
トランザクションログを利用して自身のデータベースを更新する情報処理装置であって、
前記トランザクションログを取得する手段と、
取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されている場合は該更新命令を実行し、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されていない場合は該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理する手段と、
待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象になるまでに、又は、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象となった際に、該対象について待機させた更新命令を実行する手段と、
を備える情報処理装置。
【請求項１２】
トランザクションログを利用して自身のデータベースを更新するコンピュータに、
前記トランザクションログを取得するステップと、
取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されている場合は該更新命令を実行し、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されていない場合は該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理するステップと、
待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象になるまでに、又は、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象となった際に、該対象について待機させた更新命令を実行するステップと、
を実行させるためのプログラム。
【請求項１３】
トランザクションログを利用して自身のデータベースを更新する情報処理装置であって、
前記トランザクションログを取得する手段と、
取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理する手段と、
待機させた更新命令の対象が処理の対象になるまでに、又は、待機させた更新命令の対象が処理の対象となった際に、該対象について待機させた更新命令を実行する手段と、
を備える情報処理装置。
【請求項１４】
トランザクションログを利用して自身のデータベースを更新するコンピュータに、
取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理するステップと、
待機させた更新命令の対象が処理の対象になるまでに、又は、待機させた更新命令の対象が処理の対象となった際に、該対象について待機させた更新命令を実行するステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理方法、情報処理装置、及び、プログラムに関する。
【背景技術】
【０００２】
近年、マスタで作成されたトランザクションログを利用して、他のマスタ又はスレーブにおいてレプリケーションを行う技術が提案されている。特に、他のマスタ又はスレーブとマスタとを同期させてレプリケーションを行う技術が提案されている。なお、トランザクションログは、データベースに加えられた変更履歴を示す。【０００３】
図１には、他のマスタ又はスレーブとマスタとを同期させてレプリケーションを行う２つの方法が示されている。第１の方法（実線で示される方法）では、マスタにおいて生成されたトランザクションログが他のマスタ又はスレーブに送信され、他のマスタ又はスレーブにおいてデータベースの更新が完了した後に、マスタにＡＣＫが返される。そして、対象のトランザクションのコミットが完了する。【０００４】
第１の方法では、他のマスタ又はスレーブにおけるデータベースの更新が完了するまで、対象のトランザクションのコミットが完了せず、システム全体の処理が遅くなってしまう。これを改良した方法として、図１には、第２の方法（点線で示される方法）が示されている。【０００５】
第２の方法では、他のマスタ又はスレーブにおいて、トランザクションログの受信が完了した時点で、トランザクションログの適用の有無に関わらず、マスタにＡＣＫが返される。そのため、第２の方法では、トランザクションのコミットが完了するまでの時間を短縮することができ、システム全体のパフォーマンスを向上させることが可能である。【０００６】
ただし、第２の方法では、レプリケーションが完了する前に他のマスタ又はスレーブにおいて検索処理が発生すると、マスタと異なるデータ内容を参照してしまう可能性がある。これに対応する方法として、他のマスタ又はスレーブにおいて発生した検索処理の実行をレプリケーションが完了するまで待機させる方法が用いられる場合がある（特許文献１）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２０１０／１０６９９１号
【特許文献２】特開２０１２−１３３４１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
マスタで作成されたトランザクションログを利用してレプリケーションを行う際の根本的な問題として、他のマスタ又はスレーブにおいて、トランザクションログをデータベースに適用する処理に時間がかかってしまうという問題点がある。なぜなら、従来のトランザクションログは、マスタにおいて並列処理されたトランザクションを処理された順に直列状態で記録しており、他のマスタ又はスレーブは、そのようなトランザクションログのレコードを前から順にひとつひとつデータベースに適用しなければならず、マスタにおいて並列で実行された処理を直列で実行しなければならないからである。【０００９】
そのため、第２の方法を用いたとしても、トランザクションログをデータベースに適用する処理に時間がかかってしまい、他のマスタ又はスレーブにおいて発生した検索処理の実行が遅れ、パフォーマンスを十分に向上させられない可能性があった。【００１０】
この問題点に対応する方法として、図２に示される第３の方法が提案されている（一例として、特許文献２が挙げられる）。第３の方法では、マスタは、複数のトランザクションログを並列に作成し、並列に作成した複数のトランザクションログを他のマスタ又はスレーブに送信する。そして、他のマスタ又はスレーブでは、当該複数のトランザクションログがデータベースに並列に適用される。【００１１】
第３の方法によると、他のマスタ又はスレーブのデータベースにトランザクションログを並列に適用することが可能になるため、トランザクションログをデータベースに適用する処理の速度が改善されるように見える。しかしながら、第３の方法には、以下のような問題点が存在する。【００１２】
第１の問題点として、トランザクションログに関する技術は、障害時の復旧に用いられる等、データベースの根幹に関わる技術である。そして、従来のシステムでは、トランザクションログは直列状態で作成されている。そのため、従来のシステムにおいて第３の方法を実施するためには、データベースの根幹に関わる部分のシステム変更という危険を伴うことになる。【００１３】
第２の問題点として、従来のトランザクションログでは、データベースに適用された順に記録が残る。そのため、トランザクションログをその順序のままデータベースに適用すれば、レプリケーション実行中であっても、他のマスタ又はスレーブは、マスタのデータベースと整合性を取ることが可能であった。【００１４】
一方、トランザクションログを並列化すると、他のマスタ又はスレーブでは、必ずしも同じ処理が同じ順序で実行されるとは限らない。そのため、他のマスタ又はスレーブは、レプリケーション実行中において、マスタのデータベースと整合性を取ることができなくなってしまう。【００１５】
そこで、他のマスタ又はスレーブにおいてレプリケーションが実行されている最中に検索処理が実行されるような場面では、マスタのデータベースと整合性を取るために、並列化されたトランザクションログの適用順を定める機構が他のマスタ又はスレーブに設けられることになる。従って、第３の方法を実施する場合、システムが複雑になってしまう。【００１６】
第３の問題点として、並列に処理されるトランザクションの数は状況によって変化するのに対して、並列に作成されるトランザクションログの数は固定される。そのため、第３の方法では、トランザクションの数とトランザクションログの数との不均衡の問題は根本的には解決せず、トランザクションログをデータベースに適用する処理の速度が改善されるとは限らない。【００１７】
本発明は、一側面では、このような点を考慮してなされたものであり、トランザクションログを適用してデータベースを更新する処理の速度を改善することを目的とする。
【課題を解決するための手段】
【００１８】
本発明の第１形態は、トランザクションログを利用して自身のデータベースを更新するコンピュータが、前記トランザクションログを取得するステップと、取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されている場合は該更新命令を実行し、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されていない場合は該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理するステップと、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象になるまでに、又は、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象となった際に、該対象について待機させた更新命令を実行するステップと、を実行する情報処理方法である。【００１９】
本発明の第１形態によれば、取得されるトランザクションログは、レコードの先頭から順に参照されて、処理される。この処理において、トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、更新命令の対象がコンピュータのメモリ上に読み出されている場合は、そのレコードにより示される更新命令は実行される。他方、更新命令の対象がメモリ上に読み出されていない場合は、そのレコードにより示される更新命令の実行は待機させられる。そして、待機させられた更新命令の対象がメモリ上に読み出されて処理の対象になるまでに、又は、待機させられた更新命令の対象がメモリ上に読み出されて処理の対象となった際に、当該対象について待機させられた命令は実行される。【００２０】
トランザクションログを適用してデータベースを更新する処理の速度を改善することが困難である１つの原因として、データベースを更新する際のデータの読み出し及び書き込みの処理が他の処理に比べて比較的に遅いことが挙げられる。本発明の第１形態は、データベースからデータを読み出す必要のない更新命令については、処理を実行する。他方、本発明の第１形態は、データベースからデータを読み出す必要のある更新命令については、処理を遅延させる。そのため、本発明の第１形態によれば、トランザクションログを適用してデータベースを更新する際のデータの読み出し及び書き込みの処理を効率的に行うことが可能になる。また、待機させた更新命令については、並列に処理することが可能である。【００２１】
従って、本発明の第１形態によれば、トランザクションログをデータベースに適用する処理の速度を改善することが可能になる。【００２２】
本発明の第２形態は、前記コンピュータが、前記トランザクションログを取得するステップにおいて、他のコンピュータのデータベースと前記自身のデータベースとの間でレプリケーションを行うために、前記他のコンピュータにおいて直列的に作成されたトランザクションログを取得する、第１形態の情報処理方法である。【００２３】
本発明の第３形態は、前記コンピュータが、前記レコードにより示される更新命令の実行を待機させる際、前記更新命令の対象に待機させた更新命令が存在することを示すために、待機させた前記更新命令の内容及び前記レコードの番号のうちの少なくとも一方を、前記更新命令の対象に関連付けてマップ情報に記録し、前記マップ情報を参照して、前記対象について待機させた更新命令を実行する、第１形態又は第２形態の情報処理方法である。【００２４】
本発明の第４形態は、前記コンピュータが、処理の対象の前記メモリへの読み込みを所定の集合ごとに行い、前記レコードにより示される更新命令の実行を待機させる際、前記更新命令の対象に待機させた更新命令が存在することを示すために、待機させた前記更新命令の内容及び前記レコードの番号のうちの少なくとも一方を、前記更新命令の対象を含む所定の集合に関連付けてマップ情報に記録し、前記所定の集合が前記メモリ上に読み出されて処理の対象になるまでに、又は、前記所定の集合が前記メモリ上に読み出されて処理の対象となった際に、前記マップ情報を参照して、前記所定の集合に含まれる対象について待機させた更新命令を実行する、第１形態又は第２形態の情報処理方法である。【００２５】
本発明の第５形態は、前記コンピュータが、前記自身のデータベースに対する検索処理を、該検索処理に関して処理されていることが求められる前記トランザクションログのレコードに対する処理が完了するまで、待機させる、第１形態から第４形態のいずれかの形態の情報処理方法である。【００２６】
本発明の第６形態は、トランザクションログを利用して自身のデータベースを更新するコンピュータが、前記トランザクションログを取得するステップと、取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理するステップと、待機させた更新命令の対象が処理の対象になるまでに、又は、待機させた更新命令の対象が処理の対象となった際に、該対象について待機させた更新命令を実行するステップと、を実行する情報処理方法である。【００２７】
本発明の第７形態は、前記コンピュータが、前記トランザクションログを取得するステップにおいて、他のコンピュータのデータベースと前記自身のデータベースとの間でレプリケーションを行うために、前記他のコンピュータにおいて直列的に作成されたトランザクションログを取得する、第６形態の情報処理方法である。【００２８】
本発明の第８形態は、前記コンピュータが、前記更新命令を待機させる際に、前記更新命令の対象に待機させた更新命令が存在することを示すために、前記更新命令の内容と前記更新命令に係るレコードの番号のうち少なくとも一方を前記更新命令の対象に関連付けてマップ情報に記録し、前記マップ情報を参照して、前記対象について待機させた前記更新命令を実行する、第６形態又は第７形態の情報処理方法である。【００２９】
本発明の第９形態は、前記コンピュータが、処理の対象の前記メモリへの読み込みを所定の集合ごとに行い、前記更新命令の実行を待機させる際、前記更新命令の対象に待機させた更新命令が存在することを示すために、待機させた前記更新命令の内容及び前記レコードの番号のうちの少なくとも一方を、前記更新命令の対象を含む所定の集合に関連付けてマップ情報に記録し、前記所定の集合が処理の対象になるまでに、又は、前記所定の集合が処理の対象となった際に、前記マップ情報を参照して、前記所定の集合に含まれる対象について待機させた更新命令を実行する、第６形態又は第７形態の情報処理方法である。【００３０】
本発明の第１０形態は、前記コンピュータが、前記自身のデータベースに対する検索処理を、該検索処理に関して処理されていることが求められる前記トランザクションログのレコードに対する処理が完了するまで、待機させる、第６形態から第９形態のいずれかの形態の情報処理方法である。【００３１】
なお、上記各形態に係る情報処理方法の別の態様として、以上の各構成を実現する情報処理装置であってもよいし、情報処理システムであってもよいし、プログラムであってもよいし、このようなプログラムを記録したコンピュータその他装置、機械等が読み取り可能な記憶媒体であってもよい。ここで、コンピュータ等が読み取り可能な記録媒体とは、プログラム等の情報を、電気的、磁気的、光学的、機械的、又は、化学的作用によって蓄積する媒体である。また、情報処理システムは、１又は複数の情報処理装置によって実現されてもよい。【００３２】
例えば、本発明の第１１形態は、トランザクションログを利用して自身のデータベースを更新する情報処理装置であって、前記トランザクションログを取得する手段と、取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されている場合は該更新命令を実行し、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されていない場合は該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理する手段と、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象になるまでに、又は、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象となった際に、該対象について待機させた更新命令を実行する手段と、を備える情報処理装置である。【００３３】
また、例えば、本発明の第１２形態は、トランザクションログを利用して自身のデータベースを更新するコンピュータに、前記トランザクションログを取得するステップと、取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されている場合は該更新命令を実行し、該レコードにより示される更新命令の対象が前記コンピュータのメモリ上に読み出されていない場合は該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理するステップと、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象になるまでに、又は、待機させた更新命令の対象が前記メモリ上に読み出されて処理の対象となった際に、該対象について待機させた更新命令を実行するステップと、を実行させるためのプログラムである。【００３４】
また、例えば、本発明の第１３形態は、トランザクションログを利用して自身のデータベースを更新する情報処理装置であって、前記トランザクションログを取得する手段と、取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理する手段と、待機させた更新命令の対象が処理の対象になるまでに、又は、待機させた更新命令の対象が処理の対象となった際に、該対象について待機させた更新命令を実行する手段と、を備える情報処理装置である。【００３５】
また、例えば、本発明の第１４形態は、トランザクションログを利用して自身のデータベースを更新するコンピュータに、取得した前記トランザクションログのレコードを先頭から順に参照し、前記トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理するステップと、待機させた更新命令の対象が処理の対象になるまでに、又は、待機させた更新命令の対象が処理の対象となった際に、該対象について待機させた更新命令を実行するステップと、を実行させるためのプログラムである。
【発明の効果】
【００３６】
本発明によれば、トランザクションログをデータベースに適用する処理の速度を改善することができる。
【図面の簡単な説明】
【００３７】
【図１】図１は、他のマスタ又はスレーブとマスタとを同期させてレプリケーションを行う従来方法を例示する。
【図２】図２は、他のマスタ又はスレーブとマスタとを同期させてレプリケーションを行う従来方法を例示する。
【図３】図３は、実施の形態に係る情報処理装置を例示する。
【図４】図４は、実施の形態に係る情報処理装置において実行される各プロセスの関係を例示する。
【図５】図５は、実施の形態に係るデータベースの更新例を示す。
【図６】図６は、実施の形態に係る情報処理装置において取得されるトランザクションログを例示する。
【図７】図７は、クエリを受信した時点における実施の形態に係る情報処理装置の動作状態を例示する。
【図８】図８は、実施の形態に係るメインプロセスの処理が３６番のレコードまで完了した時点における情報処理装置の動作状態を例示する。
【図９】図９は、実施の形態に係るメインプロセスの処理が同期点のレコードまで完了した時点における情報処理装置の動作状態を例示する。
【図１０】図１０は、実施の形態に係るヘルパープロセスの処理手順を例示する。
【図１１】図１１は、実施の形態に係るバックエンドプロセスの処理手順を例示する。
【図１２】図１２は、実施の形態に係るメインプロセスの処理が３６番のレコードまで完了した時点における情報処理装置の動作状態を例示する。
【図１３】図１３は、実施の形態に係るメインプロセスの処理が同期点のレコードまで完了した時点における情報処理装置の動作状態を例示する。
【図１４】図１４は、実施の形態に係るヘルパープロセスの処理手順を例示する。
【図１５】図１５は、実施の形態に係るバックエンドプロセスの処理手順を例示する。
【発明を実施するための形態】
【００３８】
以下、本発明の一側面に係る実施の形態（以下、「本実施形態」とも表記する）を、図面に基づいて説明する。ただし、以下で説明する本実施形態は、あらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。つまり、本発明の実施にあたって、それぞれの実施形態に応じた具体的構成が適宜採用されてもよい。
【００３９】
なお、本実施形態において登場するデータを自然言語により説明しているが、より具体的には、コンピュータが認識可能な疑似言語、コマンド、パラメタ、マシン語等で指定される。
【００４０】
§１  第１実施形態
［構成例］
図３は、本実施形態に係る情報処理装置１のハードウェア構成を例示する。図３で例示されるように、本実施形態に係る情報処理装置１は、制御部、記憶装置、及び、ネットワークを介した通信を行うための通信インタフェース、が電気的に接続されたコンピュータである。制御部は、ＣＰＵ（Central Processing Unit）、ＲＡＭ（Random Access Memory）、及び、ＲＯＭ（Read Only Memory）等を含む。また、記憶装置は、制御部で実行されるプログラム等を記憶し、かつ、データベース（図の「ＤＢ」）を格納する。
【００４１】
なお、図３では、通信インタフェースは、「通信Ｉ／Ｆ」と記載される。制御部に含まれるＲＡＭ及びＲＯＭは主記憶装置と称され、記憶装置は補助記憶装置と称されてもよい。制御部に含まれるＣＰＵは、処理装置と称されてもよい。情報処理装置１は、ＰＣ（Personal Computer）、サーバマシン等であってもよい。
【００４２】
また、情報処理装置１のハードウェア構成に関して、実施の形態に応じて適宜構成要素の省略、置換、及び、追加が行われてもよい。例えば、制御部は、複数のプロセッサを含んでもよい。
【００４３】
図４は、情報処理装置１において実行される各プロセスの関係を例示する。情報処理装置１は、トランザクションログを取得し、取得したトランザクションログを利用して自身の記憶装置に格納されたデータベースを更新するコンピュータである。情報処理装置１は、取得したトランザクションログのレコードを先頭から順に参照して、自身のデータベースに適用していく。このとき、情報処理装置１は、ＲＡＭに読み出されているデータ（タプル）に対する更新命令は実行し、ＲＡＭに読み出されていないデータに対する更新命令はスキップする。そして、スキップされた更新命令は、対象となるデータがＲＡＭに読み出されるまでに、又は、読み出された際に、実行される。これにより、トランザクションログを利用したデータベースの更新が完了する。
【００４４】
図４で例示されるように、本実施形態に係る情報処理装置１の制御部は、記憶装置に格納されたプログラム等をＲＡＭ等に展開し、その内容を解釈することで、メインプロセス（図の「ＭＡＩＮ」）、バックエンドプロセス（図の「ＢＡＣＫＥＮＤ」）、及び、ヘルパープロセス（図の「ＨＥＬＰＥＲ」）を実行する。
【００４５】
メインプロセスは、取得したトランザクションログのレコードを先頭から順に参照して、自身のデータベースに適用するプロセスである。トランザクションログには、データベースに含まれるデータを更新する更新命令に関するレコードとトランザクションの管理に関するレコードとが含まれている。メインプロセスは、取得したトランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、更新命令の対象がＲＡＭ上に読み出されている場合は当該更新命令を実行し、更新命令の対象がＲＡＭ上に読み出されていない場合は当該更新命令の実行を待機させることで、取得したトランザクションログのレコードを処理する。待機させられた更新命令は、ヘルパープロセス又はバックエンドプロセスにより処理され、トランザクションログを利用したデータベースの更新が完了する。
【００４６】
ヘルパープロセスは、メインプロセス及び後述するバックエンドプロセスの補助的なプロセスである。本実施形態では、ヘルパープロセスは、メインプロセスが待機させた更新命令を実行する。
【００４７】
バックエンドプロセスは、クライアントＰＣ（図の「ＣＬ」）からのデータベースに対する検索リクエスト（クエリ）に応じて、検索処理を実行するプロセスである。本実施形態では、ヘルパープロセスだけではなく、バックエンドプロセスによっても、メインプロセスにより待機させられた更新命令が実行される場合がある。なお、本実施形態に係るバックエンドプロセスは、検索処理に関して処理されていることが求められるトランザクションログのレコードに対するメインプロセスの処理が完了するまで、当該検索処理の実行を待機する。ただし、バックエンドプロセスは、検索処理以外の処理を実行してもよい。バックエンドプロセスが実行する処理は、検索処理に限定されない。
【００４８】
なお、本実施形態においてデータベースの更新に利用されるトランザクションログは、自身のデータベースのリカバリーを行うために、自身において作成されたものであってよい。この場合、情報処理装置１は、自身又は他のコンピュータの記憶装置から、当該トランザクションログを取得する。
【００４９】
また、本実施形態においてデータベースの更新に利用されるトランザクションログは、他のコンピュータのデータベースと自身のデータベースとの間でレプリケーションを行うために、他のコンピュータにおいて作成されたものでもよい。この場合、情報処理装置１は、他のコンピュータから当該トランザクションログを取得する。
【００５０】
更に、本実施形態においてデータベースの更新に利用されるトランザクションログは、直列的に作成されたものでもよいし、並列的に作成されたものでもよい。ただし、トランザクションログに関する技術を従来システムから変更しないためには、本実施形態で利用されるトランザクションログは直列的に作成されたものであるほうがよい。
【００５１】
本実施形態は、トランザクションログを利用してデータベースを更新するシステムに広く適用することができる。
【００５２】
［動作例］
次に、情報処理装置１の具体的な動作例を示す。図５は、本動作例におけるデータベースの更新例を示す。また、図６は、本動作例において取得されるトランザクションログを例示する。
【００５３】
図５は、行番号、命令内容、及び、ポインタを含む、テーブル形式のデータベースの一部が更新される場面を例示している。具体的には、図５は、行番号１０１、１０３、及び１０４のタプルが削除（ＤＥＬＥＴＥ）され、行番号２０５及び２０６のタプルが挿入（ＩＮＳＥＲＴ）される場面を示している。ただし、データベースの形式は、テーブル形式に限定される訳ではなく、実施の形態に応じて適宜選択されてよい。
【００５４】
なお、本実施形態では、後述する図７等に示されるように、データベースの各タプルは、記憶装置上においてページ単位で管理されており、記憶装置とＲＡＭとの間のデータのやり取りは、当該ページ単位で行われる。換言すると、データベースの内容を更新する場合、制御部は、更新対象のタプルを含むページを記憶装置からＲＡＭに読み出して、対象のタプルの更新を行う。そして、制御部は、対象のタプルの更新を行った後に、当該タプルを含むページをＲＡＭから記憶装置に書き込むことで、データベースの更新を保存する。なお、ＲＡＭから記憶装置にページが書き込まれるタイミングは、実施の形態に応じて適宜決定される。また、ページには、１又は複数のタプルが格納される。ページは、ブロックと称されてもよく、本発明の「所定の集合」に相当する。
【００５５】
図６は、図５に示されるデータベースの更新が生じた際に直列的に作成されたトランザクションログを例示している。トランザクションログには、少なくとも命令内容とその命令の対象とが時系列で連続的に記録される。
【００５６】
図６で例示されるトランザクションログは、１番目のトランザクションが開始され（ＸＢ１）、１番目のトランザクションによりページ番号５のページに格納された行番号１０１のタプルが削除され（Ｄ１＿１０１＿５）、２番目のトランザクションが開始され（ＸＢ２）、２番目のトランザクションによりページ番号２のページに行番号２０５のタプルが挿入され（Ｉ２＿２０５＿２）、１番目のトランザクションによりページ番号２のページに格納された行番号１０３のタプルが削除され（Ｄ１＿１０３＿２）、１番目のトランザクションがコミットされ（ＸＣ１）、２番目のトランザクションによりページ番号９のページに格納された行番号１０４のタプルが削除され（Ｄ２＿１０４＿９）、２番目のトランザクションによりページ番号８のページに行番号２０６のタプルが挿入され（Ｉ２＿２０６＿８）、２番目のトランザクションがコミットされた（ＸＣ２）ことを示している。
【００５７】
ここで、図６で例示されるトランザクションログのレコードは、データベースに含まれるデータを更新する更新命令に関するレコード（Ｄ１＿１０１＿５、Ｄ１＿１０３＿２、Ｉ２＿２０５＿２、Ｄ２＿１０４＿９、Ｉ２＿２０６＿８）と、トランザクションの管理に関するレコード（ＸＢ１、ＸＢ２、ＸＣ１、ＸＣ２）とに分けることができる。また、図６で例示されるトランザクションログでは、各レコードを特定するための番号（ＬＳＮ：log sequence number）が与えられている。
【００５８】
＜メインプロセス＞
図７〜９は、メインプロセスの動作を例示する。
【００５９】
図７は、クエリを受信した時点における情報処理装置１の動作状態を例示する。図７では、行番号１０３のタプルはページ番号２（Ｐ２）のページに格納され、行番号１０１のタプルはページ番号５（Ｐ５）のページに格納され、行番号１０２及び１０４のタプルはページ番号９（Ｐ９）のページに格納されている。そして、ページ番号１、５、及び、８（Ｐ１、Ｐ５、及び、Ｐ８）のページがＲＡＭ上に読み出されている。
【００６０】
また、図７の場面では、４０番のレコードまでトランザクションログを取得し、３２番の手前のレコードまでメインプロセスの処理が完了している。そして、クライアントＰＣからのクエリに応じてバックエンドプロセスが起動している。
【００６１】
メインプロセスは、取得したトランザクションログのレコードを先頭から順に参照する。そして、メインプロセスは、参照したレコードがデータベースの更新命令に関するレコードである場合、当該レコードを参照した時点でその対象（タプル）がデータベース内に存在するような更新命令（例えば、ＤＥＬＥＴＥ命令）については、当該更新命令の対象（タプル）がＲＡＭ上に読み出されているか否かを判定する。他方、当該レコードを参照した時点でその対象（タプル）がデータベース内に存在しないような更新命令（例えば、ＩＮＳＥＲＴ命令）については、当該更新命令の対象（タプル）が挿入される領域がＲＡＭ上に読み出されているか否かを判定することで、当該更新命令の対象がＲＡＭ上に読み出されているか否かを判定する。なお、本実施形態では、タプルはページ単位で管理されているため、メインプロセスは、レコードにより示される更新命令の対象であるタプルを含むページがＲＡＭ上に読み出されているか否かを判定する。
【００６２】
対象のページがＲＡＭ上に読み出されている場合、メインプロセスは、対象のレコードにより示される更新命令を実行する。他方、対象のページがＲＡＭ上に読み出されていない場合、メインプロセスは、対象のレコードにより示される更新命令の実行を待機させる。
【００６３】
また、メインプロセスは、参照したレコードがトランザクションの管理に関するレコードである場合、当該レコードが示す内容に合わせて、トランザクションを管理するための管理情報を更新する。管理情報は、例えば、実行中のトランザクションやコミットされたトランザクションを示す。
【００６４】
なお、メインプロセスは、参照したレコードにより示される更新命令の実行を待機させる際に、待機させた更新命令の内容を当該タプルに関連付けて記録するマップ情報を作成する。マップ情報には、待機させた更新命令の内容及びレコードの番号のうちの少なくとも一方が、更新命令の対象であるタプルに関連付けられて記録される。ヘルパープロセス又はバックエンドプロセスは、当該マップ情報を参照して、待機させられた更新命令を実行する。
【００６５】
ここで、命令の内容を記録したトランザクションログは、情報処理装置１のＲＡＭ又は記憶装置に保持されている。そのため、トランザクションログのレコード番号がマップ情報に記録される場合、ヘルパープロセス又はバックエンドプロセスは、当該マップ情報に記録されるレコード番号に基づいてＲＡＭ又は記憶装置に保持されているトランザクションログにアクセスし、実行する更新命令の内容を特定する。
【００６６】
また、本実施形態では、更新命令の対象であるタプルは、ページ単位で管理されている。そのため、マップ情報には、更新命令の内容及びトランザクションログのレコードの番号のうちの少なくとも一方が、更新命令の対象であるタプルを含むページ（具体的にはページ番号）に関連付けられて記録される。本実施形態では、ページ番号に関連付けられて更新命令の内容又はレコード番号が記録される例を示す。
【００６７】
なお、図７で示される時点では、マップ情報には、何ら記録されていないとする。
【００６８】
ここで、本実施形態では、図１に例示される第２の方法のように、トランザクションログの適用の有無に関わらず、情報処理装置１がＡＣＫを返し、情報処理装置１と他のコンピュータとを同期させてレプリケーションを行う場面を想定している。そのため、図７で示されるトランザクションログでは、同期点が設定されている。同期点は、情報処理装置１のデータベースに対する検索処理に関して処理されていることが求められるレコードを示す。バックエンドプロセスは、クエリを受信した時点において設定されている同期点にメインプロセスの処理が達するまで、すなわち、本動作例では４０番のレコードに対するメインプロセスの処理が完了するまで、検索処理の実行を待機する。
【００６９】
処理完了点を示す情報及び同期点を示す情報は、例えば、ＲＡＭ上に保持される。そして、処理完了点は、例えば、メインプロセスが処理を完了させるたびに、処理が完了したレコードを示すように更新される。また、同期点は、例えば、トランザクションログを受信したことを示すＡＣＫを返すたびに、ＡＣＫを返したレコードを示すように更新される。
【００７０】
なお、本実施形態において適用される同期レプリケーションの方法は、図１に例示される第２の方法に限定される訳ではなく、例えば、図１に例示される第１の方法のように、トランザクションログをデータベースに適用した後に情報処理装置１がＡＣＫを返す方法が本実施形態に適用されてもよい。また、情報処理装置１において実行されるレプリケーションの方式は、同期レプリケーションではなく、非同期レプリケーションであってもよい。これらの場合、同期点は設定されないため、本実施形態に係るバックエンドプロセスの動作のうち、同期点まで検索処理を待機させる動作は不要になる。
【００７１】
図８は、図７で例示される状態の後に、メインプロセスの処理が３６番のレコードまで完了した時点における情報処理装置１の動作状態を例示する。
【００７２】
３２番から３６番のレコードのうち、３３番、３５番及び３６番のレコードは、データベースの更新命令に関するレコードである。また、３２番及び３４番のレコードは、トランザクションの管理に関するレコードであり、更新命令以外の命令に関するレコードである。
【００７３】
ここで、データベースの更新命令に関する３３番、３５番及び３６番のレコードのうち、３３番のレコードにより示される更新命令の対象は、Ｐ５のページに格納された行番号１０１のタプルであり、当該行番号１０１のタプルを含むＰ５のページはＲＡＭ上に読み出されている。他方、３５番のレコードにより示される更新命令の対象は、Ｐ２のページに挿入される行番号２０５のタプルであり、当該行番号２０５のタプルが挿入される領域であるＰ２のページはＲＡＭ上に読み出されていない。また、３６番のレコードにより示される更新命令の対象は、Ｐ２のページに格納された行番号１０３のタプルであり、３５番のレコードと同様に、当該行番号１０３のタプルを含むＰ２のページはＲＡＭ上に読み出されていない。
【００７４】
そこで、メインプロセスは、まず、３２番のレコードを参照し、３２番のレコードにより示される命令を実行する。具体的には、３２番のレコードは１番目のトランザクションの開始を示す。そのため、メインプロセスは、例えば、１番目のトランザクションの状態が実行中であることを示すように、管理情報を更新する。
【００７５】
３２番のレコードを処理すると、メインプロセスは、次の３３番のレコードを参照する。３３番のレコードにより示される更新命令（Ｄ１＿１０１＿５）の対象はＲＡＭ上に読み出されているため、メインプロセスは、３３番のレコードにより示される更新命令（Ｄ１＿１０１＿５）を実行する。具体的には、メインプロセスは、ＲＡＭ上に読み出されているＰ５の行番号１０１のタプルに削除ポインタを付与する。
【００７６】
３３番のレコードを処理すると、メインプロセスは、次の３４番のレコードを参照し、３４番のレコードにより示される命令を実行する。具体的には、３４番のレコードは、２番目のトランザクションの開始を示す。そのため、メインプロセスは、例えば、２番目のトランザクションの状態が実行中であることを示すように、管理情報を更新する。
【００７７】
３４番のレコードを処理すると、メインプロセスは、次の３５番のレコードを参照する。３５番のレコードにより示される更新命令（Ｉ２＿２０５＿２）の対象はＲＡＭ上に読み出されていないため、メインプロセスは、３５番のレコードにより示される更新命令（Ｉ２＿２０５＿２）の実行を待機させる。そして、メインプロセスは、３５番のレコードにより示される更新命令（Ｉ２＿２０５＿２）の内容又はレコード番号（３５）をページ番号（Ｐ２）に関連付けてマップ情報に記憶する。
【００７８】
３５番のレコードを処理すると、メインプロセスは、次の３６番のレコードを参照する。３６番のレコードにより示される更新命令（Ｄ１＿１０３＿２）の対象は、３５番のレコードと同様、ＲＡＭ上に読み出されていない。そのため、メインプロセスは、３６番のレコードにより示される更新命令（Ｄ１＿１０３＿２）についても、その実行を待機させる。そして、メインプロセスは、３６番のレコードにより示される更新命令（Ｄ１＿１０３＿２）の内容又はレコード番号（３６）をページ番号（Ｐ２）に関連付けてマップ情報に記憶する。これにより、３６番までのレコードの処理が完了する。
【００７９】
なお、メインプロセスは、参照した順番に応じて、更新命令の内容又はレコード番号をマップ情報に記録する。これにより、後述するヘルパープロセス又はバックエンドプロセスは、待機させられた更新命令の実行順序を認識することができる。ただし、仮に、更新命令の内容又はレコード番号が参照された順番に応じてマップ情報に記録されなかったとしても、ヘルパープロセス又はバックエンドプロセスは、待機させられた更新命令のレコード番号により、当該更新命令の実行順序を認識することができる。
【００８０】
なお、バックエンドプロセスは、クエリを受信した時点で設定されていた同期点である４０番のレコードまでメインプロセスの処理が完了していないため、実行を待機している。
【００８１】
図９は、図８で例示される状態の後に、図７の時点で設定されていた同期点（４０番）のレコードまでメインプロセスの処理が完了した時点における情報処理装置１の動作状態を例示する。
【００８２】
３７番から４０番のレコードのうち、３８番と３９番のレコードは、データベースの更新命令に関するレコードである。また、３７番と４０番のレコードは、トランザクションの管理に関するレコードであり、更新命令以外の命令に関するレコードである。
【００８３】
ここで、データベースの更新命令に関する３８番と３９番のレコードのうち、３８番のレコードにより示される更新命令の対象は、Ｐ９のページに格納された行番号１０４のタプルであり、当該行番号１０４のタプルを含むＰ９のページはＲＡＭ上に読み出されていない。他方、３９番のレコードにより示される更新命令の対象は、Ｐ８のページに挿入される行番号２０６のタプルであり、当該行番号２０６のタプルが挿入される領域であるＰ８のページはＲＡＭ上に読み出されている。
【００８４】
そこで、メインプロセスは、まず、３７番のレコードを参照し、３７番のレコードにより示される命令を実行する。具体的には、３７番のレコードは１番目のトランザクションのコミットを示す。そのため、メインプロセスは、例えば、１番目のトランザクションがコミットされたことを示すように、管理情報を更新する。
【００８５】
３７番のレコードを処理すると、メインプロセスは、次の３８番のレコードを参照する。３８番のレコードにより示される更新命令（Ｄ２＿１０４＿９）の対象はＲＡＭ上に読み出されていないため、メインプロセスは、３８番のレコードにより示される更新命令（Ｄ２＿１０４＿９）の実行を待機させる。そして、メインプロセスは、３８番のレコードにより示される更新命令（Ｄ２＿１０４＿９）の内容又はレコード番号（３８）をページ番号（Ｐ９）に関連付けてマップ情報に記録する。
【００８６】
３８番のレコードを処理すると、メインプロセスは、次の３９番のレコードを参照する。３９番のレコードにより示される更新命令（Ｉ２＿２０６＿８）の対象はＲＡＭ上に読み出されているため、メインプロセスは、３９番のレコードにより示される更新命令（Ｉ２＿２０６＿８）を実行する。具体的には、メインプロセスは、ＲＡＭ上に読み出されているＰ８のページに行番号２０６のタプルを挿入する。
【００８７】
３９番のレコードを処理すると、メインプロセスは、次の４０番のレコードを参照し、４０番のレコードにより示される命令を実行する。具体的には、４０番のレコードは２番目のトランザクションのコミットを示す。そのため、メインプロセスは、例えば、２番目のトランザクションがコミットされたことを示すように、管理情報を更新する。
【００８８】
これにより、クエリを受信した時点で設定されていた同期点である４０番のレコードまでメインプロセスの処理が完了するため、バックエンドプロセスは、対象のクエリに対する検索処理を実行することが可能になる。
【００８９】
＜ヘルパープロセス＞
メインプロセスにより待機させられた更新命令は、以下の通りに、ヘルパープロセスにより処理される。
【００９０】
図１０は、本実施形態におけるヘルパープロセスの処理手順を例示する。なお、図１０は、図９におけるバックエンドプロセスによる検索処理が開始する前に、ヘルパープロセスによる処理が開始した場面を例示する。
【００９１】
ステップＳ１１では、ヘルパープロセスは、マップ情報を参照し、待機している更新命令があるか否かを判定する。待機している更新命令がマップ情報に記録されていない場合、ヘルパープロセスは処理を終了する。他方、待機している更新命令がマップ情報に記録されている場合、自身が処理する対象を管理単位に応じて選択して、処理をステップＳ１２に進める。図１０に示される例では、待機させられた更新命令はページ単位で管理されており、ヘルパープロセスは、自身が処理する対象としてＰ９のページを選択している。
【００９２】
ステップＳ１２では、ヘルパープロセスは、自身が処理する対象を、記憶装置からＲＡＭに読み出す。本動作例では、ヘルパープロセスの処理対象としてＰ９のページが選択されているため、Ｐ９のページが記憶装置からＲＡＭに読み出される。
【００９３】
ステップＳ１３では、ヘルパープロセスは、自身が選択した処理対象に関連付けられ、待機している更新命令を実行する。本動作例では、ヘルパープロセスは、Ｐ９について待機している更新命令（Ｄ２＿１０４＿９）を実行して、行番号１０４のタプルに削除ポインタを付与する。そして、ヘルパープロセスは、自身が選択した処理対象（Ｐ９）について待機している更新命令を実行した後に、処理した更新命令に関する記録をマップ情報から削除して、処理を終了する。
【００９４】
なお、ヘルパープロセスは、上述のとおり、処理対象として選択したページに複数の更新命令が待機している場合、マップ情報に記録されている順（番号順）に、当該待機している更新命令を実行する。これにより、そのページに関して、情報処理装置１とレプリケーション元のコンピュータとの間で、レプリケーションが実行されている最中におけるデータベースの整合性を保つことができる。
【００９５】
なお、情報処理装置１の制御部は、ヘルパープロセスを複数実行してもよく、ヘルパープロセスを生成若しくは削除又は起動若しくは停止することで、動作するヘルパープロセスの数を増減させてもよい。例えば、制御部は、マップ情報で記録されている待機させられている更新命令の管理単位に応じて、本動作例では、待機させられた更新命令がマップ情報に記録されているページの数に応じて、起動するヘルパープロセスの数を増減させてもよい。この場合は、ヘルパープロセスの処理能力を要求に応じて可変にでき、無駄なヘルパープロセスが存在することを避けることができるため、リソースを効率よく活用することが可能になる。
【００９６】
また、例えば、一定数のヘルパープロセスを予め起動させておいてもよい。この場合は、処理の状況により、無駄なヘルパープロセスが存在してしまう可能性がある。しかしながら一方で、処理の要求が生じた場合に改めてヘルパープロセスを起動しなくて済み、生じた要求に迅速に対応することが可能になる。
【００９７】
なお、ヘルパープロセスは、本動作例に示されるタイミング以外に、実施の形態に応じて、適宜処理を実行してもよい。マップ情報の状態を考慮すると、例えば、３８番のレコードに対するメインプロセスの処理が完了した後であれば、ヘルパープロセスは、図１０で例示される動作を実行することができる。
【００９８】
＜バックエンドプロセス＞
図１１は、本実施形態におけるバックエンドプロセスの処理手順を例示する。なお、図１１は、図９及び１０で例示した状態の後に、バックエンドプロセスによる検索処理が開始した場面を例示する。
【００９９】
ステップＳ２１では、バックエンドプロセスは、受信したクエリの内容に適合するタプルを抽出するために、記憶装置の記憶領域のうち、当該クエリにより検索範囲に指定された領域にアクセスする。そして、ステップＳ２２では、バックエンドプロセスは、アクセスした領域に含まれるページがＲＡＭに存在しない場合、そのページを記憶装置からＲＡＭに読み出し、検索処理の対象とする。例えば、データベースに複数のテーブルが含まれている場合に、検索範囲として特定のテーブルが指定される場合がある。この場合、バックエンドプロセスは、検索範囲として指定されているテーブルに関するデータを保持する領域にアクセスし、検索範囲となるテーブルのデータを、そのデータがＲＡＭに存在しない場合、記憶装置からＲＡＭに読み出す。記憶装置からＲＡＭに読み出す領域、クエリにより指定される検索範囲等は、実施の形態に応じて、適宜決定されてよい。アクセスした領域に含まれるページをＲＡＭに読み出すと、バックエンドプロセスは、ステップＳ２３に処理を進める。
【０１００】
なお、バックエンドプロセスは、検索範囲に含まれるページを記憶装置からＲＡＭに読み出す場合に、例えば、１つ１つ対象のページを読み出してもよいし、複数のページを一度に読み出してもよい。この場合に、バックエンドプロセスは、１又は複数のページを読み出す毎に、読み出した１又は複数のページに対して、後述する処理を実行する。図１１では、ステップＳ２２の処理により、Ｐ２のページが記憶装置からＲＡＭに読み出された場面を例示する。
【０１０１】
バックエンドプロセスがアクセスした領域に含まれるページが既にＲＡＭに存在する場合、バックエンドプロセスは、記憶領域からの読み出しを行わず、既にＲＡＭに存在しているページを検索処理の対象とし、ステップＳ２３ではなく、ステップＳ２５に処理を進める。
【０１０２】
ステップＳ２３では、バックエンドプロセスは、マップ情報を参照し、ＲＡＭに読み出したページについて待機している更新命令があるか否かを判定する。ＲＡＭに読み出したページについて待機している更新命令がマップ情報に記録されていない場合、バックエンドプロセスは、ステップＳ２５に処理を進める。他方、ＲＡＭに読み出したページについて待機している更新命令がマップ情報に記録されている場合、処理はステップＳ２４に進む。本動作例では、ステップＳ２２においてＰ２のページがＲＡＭに読み出されており、当該Ｐ２のページに格納されたタプルについて待機している更新命令（Ｉ２＿２０５＿２及びＤ１＿１０３＿２）が存在するため、処理はステップＳ２４に進む。
【０１０３】
ステップＳ２４では、バックエンドプロセスは、ＲＡＭに読み出したページについて待機している更新命令を実行する。本動作例では、バックエンドプロセスは、Ｐ２について待機している更新命令（Ｉ２＿２０５＿２及びＤ１＿１０３＿２）を実行する。ここで、バックエンドプロセスは、マップ情報に記録されている順に、待機している更新命令を実行する。すなわち、本動作例では、バックエンドプロセスは、行番号２０５のタプルをＰ２に挿入した後に、行番号１０３のタプルに削除ポインタを付与する。そして、バックエンドプロセスは、ＲＡＭに読み出したページ（Ｐ２）について待機している更新命令を全て実行した後に、処理した更新命令に関する記録をマップ情報から削除する。
【０１０４】
このように、バックエンドプロセスは、ヘルパープロセス同様、処理対象として選択したページに複数の更新命令が待機している場合、マップ情報に記録されている順（番号順）に、当該待機している更新命令を実行する。これにより、そのページに関して、情報処理装置１とレプリケーション元のコンピュータとの間で、レプリケーションが実行されている最中におけるデータベースの整合性を保つことができる。
【０１０５】
ステップＳ２５では、バックエンドプロセスは、検索処理の対象としたページに対して、受信したクエリに応じた検索処理を実行する。そして、検索範囲において検索処理の対象としていないページが残っている場合、バックエンドプロセスは、ステップＳ２２に戻って処理を繰り返す。他方、検索範囲において検索処理の対象としていないページが残っていない場合、バックエンドプロセスは、クエリに対する応答として検索処理の結果をクライアントＰＣに返信し、処理を終了する。
【０１０６】
本実施形態では、ページがＲＡＭに読み出された段階で、当該ページに対して、待機させられた更新命令が実行される。また、ＲＡＭ上に存在するページに対する更新命令は即座に実行される。そのため、本実施形態において、検索範囲に含まれるページが既にＲＡＭに読み出されている場合、当該ページに対する更新命令の実行が待機されていることはない。従って、本実施形態に係るバックエンドプロセスは、ステップＳ２２において、読み出そうとしたページが既にＲＡＭに存在する場合、記憶領域からの読み出しを行わず、既にＲＡＭに存在しているページを検索の処理対象とし、ステップＳ２３及びＳ２４の処理を省略して、ステップＳ２５に処理を進めてよい。
【０１０７】
なお、情報処理装置１の制御部は、バックエンドプロセスを複数実行してもよく、バックエンドプロセスを生成若しくは削除又は起動若しくは停止することで、動作するバックエンドプロセスの数を増減させてもよい。例えば、制御部は、クライアントＰＣから受け付けたクエリの数に応じて起動するバックエンドプロセスの数を増減させてもよい。この場合、バックエンドプロセスの処理能力を要求に応じて可変にでき、無駄なバックエンドプロセスが存在することを避けることができるため、リソースを効率よく活用することが可能になる。
【０１０８】
また、バックエンドプロセスは、少なくともステップＳ２３及びＳ２４のページの更新に関する処理をヘルパープロセスに任せてもよい。この場合、例えば、バックエンドプロセスは、記憶装置にアクセスした後に、ヘルパープロセスにページの更新を依頼して、ステップＳ２３、Ｓ２４の処理をヘルパープロセスに実行させる。そして、バックエンドプロセスは、ステップＳ２４の処理が完了した後にヘルパープロセスから通知を受け取ると、ステップＳ２５の検索処理を実行する。このようにバックエンドプロセスがページの更新処理をヘルパープロセスに任せることで、ページの更新処理をヘルパープロセスに一元化することができる。これによって、各プロセスの役割分担を明確にすることができ、各プロセスの構造を単純にすることができる。
【０１０９】
＜第１実施形態の作用・効果＞
バックエンドプロセスによる検索処理などにおいてページ（タプル）が処理の対象になる際には、当該ページ（タプル）はＲＡＭに読み出される。既にＲＡＭに読み出されているページ（タプル）については、いつでも処理の対象になる可能性がある。他方、ＲＡＭに読み出されていないページ（タプル）は、ＲＡＭに読み出されるまで、処理の対象になる可能性がない。
【０１１０】
そこで、メインプロセスは、対象のレコードを参照した時点において、既にＲＡＭに読み出されていることで、いつでも処理の対象になる可能性のあるページに対する更新命令については即座に実行する。他方、メインプロセスは、対象のレコードを参照した時点では、ＲＡＭ上に存在しないために、処理の対象になる可能性のないページに対する更新命令については実行を待機させる。
【０１１１】
そして、メインプロセスにより待機させられた更新命令は、上記のようなヘルパープロセス又はバックエンドプロセスの動作によって、当該更新命令の対象がＲＡＭ上に読み出されて処理の対象になるまでに、又は、当該更新命令の対象がＲＡＭ上に読み出されて処理の対象になる際に、実行される。
【０１１２】
ここで、行番号２０５のタプルに着目すると、当該タプルを挿入する更新命令は、受信したクエリに応じた検索処理に係る同期点以前のレコードにより示される更新命令であるが、当該検索処理に関する動作をバックエンドプロセスが開始したステップＳ２１の時点では、待機しており、実行されていない。しかしながら、検索処理を実行するステップＳ２５の時点では、バックエンドプロセス（又は、ヘルパープロセス）によって、当該更新命令は既に実行されている。そのため、行番号２０５のタプルは、問題なく、当該検索処理の対象になる。
【０１１３】
すなわち、本実施形態では、メインプロセスは、トランザクションログのレコードを先頭から順に参照し、対象のレコードを参照した時点で処理の対象になる可能性のあるページに対する更新命令については即座に実行し、対象のレコードを参照した時点では処理の対象になる可能性のないページに対する更新命令については実行を待機させる。そして、待機させられた更新命令は、ヘルパープロセス又はバックエンドプロセスによって、その更新命令が実行されていることが要求されるまでには、実行される。
【０１１４】
待機させられる更新命令は、記憶装置にアクセスする必要のあるページを対象とする命令である。ここで、記憶装置にアクセスする速度はＲＡＭにアクセスする速度に比べて非常に遅く、データベースの更新処理は、記憶装置にアクセスする回数が増えるほど、遅くなる。本実施形態に係るメインプロセスの処理では、このような記憶装置にアクセスする必要のある更新命令を実行せずにトランザクションログを処理することができる。そのため、メインプロセスの処理は、記憶装置にアクセスせずに、非常に高速に実行することができる。その結果、本実施形態によれば、同期点までのトランザクションログを高速に処理することができ、バックエンドプロセスによる検索の待機時間を非常に短くすることができる。
【０１１５】
そして、待機させられた更新命令は、ヘルパープロセス又はバックエンドプロセスによって、その更新命令が実行されていることが要求されるまでには、実行される。そのため、バックエンドプロセスによる検索では、待機させられた更新命令が存在しても、検索処理の対象については、同期が完了しているレコード番号までの更新命令による更新を参照することができる。そのため、レプリケーション実行中においても、バックエンドプロセスは、データベースの整合性が確保された状態で、検索を行うことができる。
【０１１６】
また、従来では、上記図２に示される第３の方法のように並列処理可能である場合も含めて、データベースの整合性を保って検索を行うためには、同期点までのトランザクションログに示される全ての更新命令を実行する必要があった。これに対して、本実施形態によれば、待機させられた更新命令のうち、検索処理と関係が無い更新命令については実行を待機したまま、検索処理を実行することができる。すなわち、本実施形態によれば、トランザクションログのレコードにより示される更新命令のうち、実行されていることが要求されている更新命令を優先的に実行し、実行されていることが要求されていない更新命令の実行をスキップ（後回しに）することができるようになる。この点からも、本実施形態によれば、検索の待機時間を短縮することができる。
【０１１７】
従って、本実施形態によれば、これらの理由から、検索処理におけるデータベースの整合性を確保しつつ、検索の待機時間を短縮することができる。
【０１１８】
また、本実施形態では、アクセスが必要になった時に対象の更新命令を実行すればよいため、記憶装置からＲＡＭへの余計なデータの読み込みを抑えることができる。その上、本実施形態では、１回のページの読み込みで、当該ページに対する複数の更新命令を実行することができる。そのため、本実施形態によれば、データベースの更新における記憶装置とＲＡＭとの間のやりとりの効率化を図ることができる。
【０１１９】
なお、ヘルパープロセス又はバックエンドプロセスは、当該ページに対する複数の更新命令を実行する際に、トランザクションログにより示される順序のままに更新命令を実行する。そのため、データベースの整合性を保ちながら、記憶装置とＲＡＭとの間のやりとりの効率化を図ることができる。
【０１２０】
そして、本実施形態に係る情報処理装置１は、マップ情報を利用することで、メインプロセスがスキップした更新命令をページ単位で管理している。データベースの更新処理はページ毎に行われるので、メインプロセスがスキップした更新命令の実行は、ページ単位で、それぞれ別個のプロセスで並列に処理することができる。
【０１２１】
更に、本実施形態に係る情報処理装置１は、並列に処理する度合い、換言すると、起動するヘルパープロセス又はバックエンドプロセスの数、を必要に応じて増減させることができる。例えば、情報処理装置１の制御部は、マップ情報に記録されたページの数と同じ数のヘルパープロセスを動作させることで、マップ情報に記録されたページ毎に待機させられた更新命令の実行を並列に処理することができる。すなわち、本実施形態によれば、待機させた更新命令の実行を並列に処理する度合いを状況に応じて増減させることができるため、並列に処理可能なトランザクションの数とトランザクションログの数との不均衡の問題を解決することができる。
【０１２２】
従って、本実施形態によれば、これらの理由から、トランザクションログをデータベースに適用する処理の速度を高速化することができる。
【０１２３】
なお、本実施形態では、直列的に作成されたトランザクションログが、データベースの更新に利用される。従って、本実施形態によれば、トランザクションログの作成に関する技術を従来システムから変更せずに、トランザクションログをデータベースに適用する処理の速度を改善することができる。
【０１２４】
なお、以上の動作例では、１つのタプルを処理対象とする更新命令（ＩＮＳＥＲＴ命令、ＤＥＬＥＴＥ命令）をデータベースの更新命令の一例として挙げた。しかしながら、データベースの更新命令は、このような１つのタプルを処理対象とする更新命令に限定されない。例えば、追記型のデータベースでＵＰＤＡＴＥ命令を実行する場合、更新対象タプルの削除と更新後のタプルの挿入という複数のタプルを処理することになる。この場合、メインプロセスは、ＵＰＤＡＴＥ命令のうち、ＲＡＭに読み出されているタプルに対する命令部分については実行し、ＲＡＭに読み出されていないタプルに対する命令部分についてはマップ情報に記録する。つまり、複数のタプルを処理対象とする更新命令は、１つのタプルを処理対象とする更新命令が複数集まったものとして扱うことで、制御部は、１つのタプルを処理対象とする更新命令と同様に当該複数のタプルを処理対象とする更新命令を処理することができる。
【０１２５】
また、以上の動作例では、情報処理装置１の制御部は、更新命令の対象であるタプルがＲＡＭに読み出された段階で、当該タプルが処理対象となったと判断している。しかしながら、更新命令の対象が処理対象になったと制御部が判断する段階は、このような例に限定される訳ではない。その他の例として、例えば、情報処理装置１の制御部は、更新命令の対象であるタプルがＲＡＭに読み出されただけでは、当該タプルが処理対象になったとは判断せず、当該タプルに対してロックが獲得された段階で、当該タプルが処理対象となったと判断してもよい。複数のプロセスが対象のページにアクセスしようとする場合、あるプロセスによる対象のページに対する処理が完了するまでに、他のプロセスによって当該ページの内容が変更されてしまう可能性がある。これを避けるために、プロセスは、アクセスするページに対してロックをかける。情報処理装置１の制御部は、このロックがかけられたことをもって、ロックされた対象が処理対象になったと検出してもよい。
【０１２６】
§２  第２実施形態
本発明の第２実施形態は、一部の処理を除き、第１実施形態とほぼ同様に説明可能である。そのため、第１実施形態と同様に説明できる部分については、適宜省略する。
【０１２７】
［構成例］
第２実施形態において、図３により例示されるハードウェア構成、図４により例示される各プロセスの関係、及び、取得されるトランザクションログに関する事項は、第１実施形態と同様である。ただし、第２実施形態に係る情報処理装置１は、取得したトランザクションログのレコードを先頭から順に参照し、当該トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令に関するレコードについて、当該更新命令の実行を待機させることで、取得した前記トランザクションログのレコードを処理する。そして、スキップされた更新命令は、対象となるデータが処理対象になるまでに、又は、対象となるデータが処理対象となった際に、実行される。
【０１２８】
すなわち、第２実施形態に係る情報処理装置１は、トランザクションログのレコードの処理において、全ての更新命令について一度待機させる点で、トランザクションログを参照した際にＲＡＭに読み出されているタプルに対する更新命令を実行する第１実施形態とは異なる。
【０１２９】
［動作例］
次に、図５により示されるデータベースの更新例、図６により示される取得されるトランザクションログの例、及び、図７により示されるクエリを受信した時点における情報処理装置１の動作状態の例を利用して、第２実施形態に係る情報処理装置１の具体的な動作例を説明する。
【０１３０】
＜メインプロセス＞
第２実施形態に係るメインプロセスは、取得したトランザクションログのレコードを先頭から順に参照する。そして、第２実施形態に係るメインプロセスは、トランザクションログに含まれるレコードのうち、データベースに含まれるデータを更新する更新命令については、第１実施形態とは異なり、全ての更新命令の実行を待機させることで、当該トランザクションログのレコードを処理する。一方、更新命令以外のレコード、例えば、トランザクションの管理に関するレコードについては、メインプロセスは、第１実施形態と同様、当該レコードにより示される命令（例えば、管理情報の更新）を実行する。
【０１３１】
なお、第２実施形態では、第１実施形態と同様、待機させた更新命令はマップ情報に記録される。マップ情報には、待機させた更新命令の内容とレコードの番号のうち少なくとも一方が当該更新命令の対象（タプル）に関連付けて記録される。ただし、本実施形態では、データベースの各タプルは、記憶装置上においてページ単位で管理されており、記憶装置とＲＡＭとの間のデータのやり取りは、当該ページ単位で行われる。そこで、第２実施形態に係るメインプロセスは、マップ情報において、待機させた更新命令の内容とレコードの番号のうち少なくとも一方を、当該待機させた更新命令の対象となるタプルを含むページに関連付けて記録する。すなわち、ページは、本発明の「所定の集合」に相当する。
【０１３２】
具体的には、第２実施形態に係るメインプロセスは、３３番のレコード、３５番のレコード等のデータベースの更新命令に係るレコードを参照する度に、参照したレコードにより示される更新命令の内容とレコードの番号のうちの少なくとも一方を、当該更新命令の対象となるタプルを含むページに関連付けてマップ情報に記録する。なお、後述する図１２〜１５は、更新命令の内容又はレコードの番号のいずれかがマップ情報に記録される場面を例示する。
【０１３３】
なお、第２実施形態に係るメインプロセスは、第１実施形態と同様、参照したレコードがトランザクションの管理に関するレコードである場合、当該レコードが示す内容に合わせて、トランザクションを管理するための管理情報を更新する。
【０１３４】
また、第２実施形態では、第１実施形態と同様、図１に例示される第２の方法のようにレプリケーションを行う場面を想定している。ただし、第１実施形態と同様に、第２実施形態に適用されるレプリケーションの方法は当該第２の方法に限定されず、図１に例示される第１の方法が第２実施形態において採用されてもよい。また、第２実施形態において実行されるレプリケーションの方式は、同期レプリケーションではなく、非同期レプリケーションであってもよい。
【０１３５】
図１２は、第２実施形態において、図７で例示される状態の後に、メインプロセスの処理が３６番のレコードまで完了した時点における情報処理装置１の動作状態を例示する。
【０１３６】
３２番から３６番のレコードのうち、３３番、３５番及び３６番のレコードは、データベースの更新命令に関するレコードである。また、３２番及び３４番のレコードは、トランザクションの管理に関するレコードであり、更新命令以外の命令に関するレコードである。
【０１３７】
そこで、メインプロセスは、まず、３２番のレコードを参照し、第１実施形態と同様に、３２番のレコードにより示される命令を実行する。具体的には、メインプロセスは、例えば、１番目のトランザクションの状態が実行中であることを示すように、管理情報を更新する。
【０１３８】
３２番のレコードを処理すると、メインプロセスは、次の３３番のレコードを参照する。ここで、３３番のレコードにより示される更新命令（Ｄ１＿１０１＿５）の対象はＲＡＭ上に読み出されている。しかしながら、メインプロセスは、第１実施形態とは異なり、３３番のレコードにより示される更新命令（Ｄ１＿１０１＿５）の実行を待機させる。そして、メインプロセスは、３３番のレコードにより示される更新命令の内容（Ｄ１＿１０１＿５）又はレコード番号（３３）をページ番号（Ｐ５）に関連付けてマップ情報に記録する。
【０１３９】
３３番のレコードを処理すると、メインプロセスは、次の３４番のレコードを参照し、第１実施形態と同様に、３４番のレコードにより示される命令を実行する。具体的には、メインプロセスは、例えば、２番目のトランザクションの状態が実行中であることを示すように、管理情報を更新する。
【０１４０】
３４番のレコードを処理すると、メインプロセスは、次の３５番のレコードを参照し、３５番のレコードにより示される更新命令（Ｉ２＿２０５＿２）の実行を待機させる。そして、メインプロセスは、３５番のレコードにより示される更新命令（Ｉ２＿２０５＿２）の内容又はレコード番号（３５）をページ番号（Ｐ２）に関連付けてマップ情報に記憶する。
【０１４１】
３５番のレコードを処理すると、メインプロセスは、次の３６番のレコードを参照し、３６番のレコードにより示される更新命令（Ｄ１＿１０３＿２）の実行を待機させる。そして、メインプロセスは、３６番のレコードにより示される更新命令（Ｄ１＿１０３＿２）の内容又はレコード番号（３６）をページ番号（Ｐ２）に関連付けてマップ情報に記憶する。これにより、３６番までのレコードの処理が完了する。
【０１４２】
なお、バックエンドプロセスは、第１実施形態と同様、クエリを受信した時点で設定されていた同期点である４０番のレコードまでメインプロセスの処理が完了していないため、実行を待機している。
【０１４３】
図１３は、図１２で例示される状態の後に、図７の時点で設定されていた同期点（４０番）のレコードまでメインプロセスの処理が完了した時点における情報処理装置１の動作状態を例示する。
【０１４４】
３７番から４０番のレコードのうち、３８番と３９番のレコードは、データベースの更新命令に関するレコードである。また、３７番と４０番のレコードは、トランザクションの管理に関するレコードであり、更新命令以外の命令に関するレコードである。
【０１４５】
そこで、メインプロセスは、まず、３７番のレコードを参照し、第１実施形態と同様に、３７番のレコードにより示される命令を実行する。具体的には、メインプロセスは、例えば、１番目のトランザクションがコミットされたことを示すように、管理情報を更新する。
【０１４６】
３７番のレコードを処理すると、メインプロセスは、次の３８番のレコードを参照し、３８番のレコードにより示される更新命令（Ｄ２＿１０４＿９）の実行を待機させる。そして、メインプロセスは、３８番のレコードにより示される更新命令（Ｄ２＿１０４＿９）の内容又はレコード番号（３８）をページ番号（Ｐ９）に関連付けてマップ情報に記録する。
【０１４７】
３８番のレコードを処理すると、メインプロセスは、次の３９番のレコードを参照する。ここで、３９番のレコードにより示される更新命令（Ｉ２＿２０６＿８）の対象はＲＡＭ上に読み出されている。しかしながら、メインプロセスは、第１実施形態とは異なり、３９番のレコードにより示される更新命令（Ｉ２＿２０６＿８）の実行を待機させる。そして、メインプロセスは、３９番のレコードにより示される更新命令（Ｉ２＿２０６＿８）の内容又はレコード番号（３９）をページ番号（Ｐ８）に関連付けてマップ情報に記録する。
【０１４８】
３９番のレコードを処理すると、メインプロセスは、次の４０番のレコードを参照し、第１実施形態と同様、４０番のレコードにより示される命令を実行する。具体的には、メインプロセスは、例えば、２番目のトランザクションがコミットされたことを示すように、管理情報を更新する。
【０１４９】
これにより、クエリを受信した時点で設定されていた同期点である４０番のレコードまでメインプロセスの処理が完了するため、バックエンドプロセスは、対象のクエリに対する検索処理を実行することが可能になる。
【０１５０】
＜ヘルパープロセス＞
第２実施形態に係るヘルパープロセスは、第１実施形態と同様、マップ情報を参照して、待機させた更新命令を実行する。
【０１５１】
図１４は、第２実施形態におけるヘルパープロセスの処理手順を例示する。なお、図１４は、図１３におけるバックエンドプロセスによる検索処理が開始する前に、ヘルパープロセスによる処理が開始した場面を例示する。
【０１５２】
ステップＳ５１では、ヘルパープロセスは、マップ情報を参照し、待機している更新命令が存在するか否かを判定する。待機している更新命令がマップ情報に記録されていない場合、ヘルパープロセスは処理を終了する。他方、待機している更新命令がマップ情報に記録されている場合、自身が処理する対象を管理単位に応じて選択して、処理をステップＳ５２に進める。なお、図１４で例示される場面では、ヘルパープロセスは、自身が処理する対象としてＰ５のページを選択している。
【０１５３】
ステップＳ５２では、ヘルパープロセスは、選択したページがＲＡＭ上に存在するか否かを判定する。そして、選択したページがＲＡＭ上に存在する場合、ヘルパープロセスは、待機している更新命令（マップ情報に記録されている更新命令）を実行する。他方、選択したページがＲＡＭ上に存在しない場合、ヘルパープロセスは、第１実施形態に係る図１０で例示されるように、記憶装置から選択したページをＲＡＭ上に読み出し、読み出したページに対して待機している更新命令（マップ情報に記録されている更新命令）を実行する。
【０１５４】
図１４で例示される場面では、ヘルパープロセスが選択したページ（Ｐ５）はＲＡＭ上に存在している。そのため、ヘルパープロセスは、Ｐ５について待機している更新命令（Ｄ１＿１０１＿５）を実行して、行番号１０１のタプルに削除ポインタを付与する。そして、ヘルパープロセスは、処理した更新命令に関する記録をマップ情報から削除して、処理を終了する。
【０１５５】
なお、選択したページに対して複数の更新命令が待機している場合にマップ情報に記録されている順にヘルパープロセスが当該待機している更新命令を実行する点、ヘルパープロセスを生成若しくは削除又は起動若しくは停止することで動作するヘルパープロセスの数を増減させてよい点、一定数のヘルパープロセスを予め起動させておいてもよい点、及び、ヘルパープロセスが本動作例に示されるタイミング以外に適宜処理を実行してもよい点については、第２実施形態は第１実施形態と共通する。そのため、説明を省略する。
【０１５６】
＜バックエンドプロセス＞
第２実施形態に係るバックエンドプロセスは、第１実施形態と同様、クライアントＰＣからのデータベースに対する検索リクエスト（クエリ）に応じて、検索処理を実行する。バックエンドプロセスは、当該検索処理を実行する際に、マップ情報を参照し、検索対象となるページについて待機された更新命令が存在するか否かを判定する。そして、検索対象となるページについて待機された更新命令が存在しない場合、バックエンドプロセスは、当該ページに対する検索処理を実行する。他方、検索対象となるページについて待機された更新命令が存在する場合、バックエンドプロセスは、当該待機された更新命令を実行した後に、当該ページに対する検索処理を実行する。なお、バックエンドプロセスにおける当該マップ情報に記録された更新命令を適用する処理は、第１実施形態と同様にヘルパープロセスによって実行されてもよい。
【０１５７】
図１５は、第２実施形態におけるバックエンドプロセスの処理手順を例示する。なお、図１５は、図１３及び１４で例示した状態の後に、バックエンドプロセスによる検索処理が開始した場面を例示する。
【０１５８】
ステップＳ６１では、バックエンドプロセスは、受信したクエリの内容に適合するタプルを抽出するために、当該クエリに関連する領域に含まれるページにアクセスし、アクセスしたページを検索の処理対象とする。図１５では、バックエンドプロセスがＲＡＭ上に存在するページ（Ｐ８）にアクセスする場面が例示されている。一方、アクセスするページがＲＡＭ上に存在しない場合は、第１実施形態に係る図１１で例示されるように、記憶装置にアクセスして、当該記憶装置から対象のページをＲＡＭ上に読み出す。
【０１５９】
なお、検索の処理対象とする際には、バックエンドプロセスは、アクセスするページに対してのロックを獲得する。第２実施形態に係る情報処理装置１の制御部は、対象のページについてのロックの獲得を、当該対象のページが処理対象になったと判断する要因の一例として取り扱ってよい。つまり、第２実施形態に係る情報処理装置１の制御部は、対象のページについてのロックが獲得されることで、当該対象のページが処理対象になったと判断してもよい。
【０１６０】
なお、対象のページが処理対象になったと判定される動作は、実施の形態に応じて適宜設定されてよく、ロックの獲得に限定されるものではない。
【０１６１】
ステップＳ６２では、バックエンドプロセスは、マップ情報を参照し、アクセスしたページについて待機している更新命令があるか否かを判定する。アクセスしたページについて待機している更新命令がマップ情報に記録されていない場合、バックエンドプロセスは、ステップＳ６４に処理を進める。他方、アクセスしたページについて待機している更新命令がマップ情報に記録されている場合は、処理はステップＳ６３に進む。図１５では、アクセスしたページ（Ｐ８）について待機している更新命令（Ｉ２＿２０６＿８）が存在するため、処理はステップＳ６３に進む。
【０１６２】
ステップＳ６３では、バックエンドプロセスは、アクセスしたＲＡＭ上のページについて待機している更新命令を実行する。図１５では、バックエンドプロセスは、Ｐ８について待機している更新命令（Ｉ２＿２０６＿８）を実行する。すなわち、バックエンドプロセスは、行番号２０６のタプルをＰ８に挿入する。そして、バックエンドプロセスは、アクセスしたページについて待機している更新命令を全て実行した後に、処理した更新命令に関する記録をマップ情報から削除する。
【０１６３】
ステップＳ６４では、バックエンドプロセスは、アクセスしたＲＡＭ上のページに対して、受信したクエリに応じた検索処理を実行する。そして、検索範囲においてアクセスしていない領域が残っている場合、バックエンドプロセスは、ステップＳ６１に戻って処理を繰り返す。他方、検索範囲においてアクセスしていない領域が残っていない場合、バックエンドプロセスは、クエリに対する応答として検索処理の結果をクライアントＰＣに返信し、処理を終了する。
【０１６４】
なお、バックエンドプロセスが１つ１つ対象のページにアクセスしてもよく、又は、一度に複数のページにアクセスしてもよい点、アクセスしたページに対して複数の更新命令が待機している場合にマップ情報に記録されている順にバックエンドプロセスが当該待機している更新命令を実行する点、バックエンドプロセスを生成若しくは削除又は起動若しくは停止することで動作するバックエンドプロセスの数を増減させてよい点、及び、ページの更新に関する処理をバックエンドプロセスはヘルパープロセスに任せてもよい点については、第２実施形態は第１実施形態と共通する。そのため、説明を省略する。
【０１６５】
＜第２実施形態の作用・効果＞
ここで、第２実施形態において、行番号２０６のタプルに着目すると、第１実施形態に係る図１１で例示した行番号２０５のタプルと同様の説明が可能である。すなわち、バックエンドプロセスによる検索処理の対象となった時点（ステップＳ６１）では、当該検索処理に係る同期点以前のレコード（３９番のレコード）により示される、当該タプルに関する更新命令は、まだ実行されておらず、待機している。しかしながら、検索処理が実行される時点（ステップＳ６４）までには、バックエンドプロセス（又は、ヘルパープロセス）によって、当該３９番のレコードにより示される更新命令は実行される。そのため、行番号２０６のタプルは、問題なく、当該検索処理の対象となる。
【０１６６】
すなわち、第２実施形態によれば、第１実施形態と同様の理由により、データベースの整合性を確保しつつ、検索の待機時間を短縮することができ、トランザクションログをデータベースに適用する処理の速度を高速化することができる。また、第２実施形態においても、直列的に作成されたトランザクションログがデータベースの更新に利用されるため、トランザクションログの作成に関する技術を従来システムから変更せずに、トランザクションログをデータベースに適用する処理の速度を改善することができる。
【０１６７】
一方、第１実施形態とは異なり、マップ情報に記録された行番号２０６のタプルを追加する更新命令の対象であるＰ８のページは、メインプロセスが３９番のレコードを参照する時点で既にＲＡＭに存在している。第１実施形態の説明のとおり、ＲＡＭに存在しているページはいつでも処理の対象になる可能性がある。しかしながら、それらのページが直ちに処理の対象となるとは限らないため、メインプロセスは、それらのページに対する更新命令を待機させてもかまわない。また、後述するとおり、それらのページがちょうど処理の対象となっている場合も、メインプロセスは、それらのページに対する更新命令を待機させてもかまわない。そこで、第２実施形態に係るメインプロセスは、ＲＡＭ上に存在しているページに対する更新命令も、ＲＡＭ上に存在していないページに対する更新命令と同様に待機させて、一度、マップ情報に記録する。
【０１６８】
すなわち、第２実施形態に係るメインプロセスは、ＲＡＭ上に存在しているか否かを問わず、ＲＡＭ上に存在しているページに対する更新命令とＲＡＭ上に存在していないページに対する更新命令とを同様に取り扱う。そのため、第２実施形態に係るメインプロセスは、第１実施形態に係るメインプロセスの動作に含まれる、トランザクションログのレコードにより示される更新命令の対象となるタプルに関するページがＲＡＭ上に存在しているか否かを判定する処理を省略することができる。
【０１６９】
また、第２実施形態では、メインプロセスは、トランザクションログのレコードにより示されるデータベースの更新命令を実行しないため、ＲＡＭ上に読み出されたページの状態を変更しない。そのため、第２実施形態に係るメインプロセスは、第１実施形態に係るメインプロセスとは異なり、ＲＡＭ上に読み出されたページの状態を変更する他のプロセス（例えば、ヘルパープロセス、バックエンドプロセス等）に動作を妨げられることなく、処理を実行することができる。
【０１７０】
たとえば、メインプロセスが更新命令を参照した際に、当該更新命令の対象となるタプルに関するページが、ＲＡＭ上に存在して、バックエンドプロセスにより処理の対象となっていた場合、バックエンドプロセスは当該ページに対するロックを獲得している。そのため、メインプロセスは、当該更新命令を即座に実行する場合は、バックエンドプロセスがそのページに対する検索処理を完了してロックを開放するまで、待機することになる。第２実施形態では、メインプロセスはこのようなロックの待機を行なわなくてよいため、他のプロセスに動作を妨げられることなく、処理を実行することができる。
【０１７１】
また、当該ページを処理の対象としているバックエンドプロセスは、ロックを取得した時点のデータベースの状態に基づいて検索処理を実行する。したがって、当該更新命令は、ロックが開放された後、当該ページがその次に処理の対象となるまでに実行されれば良い。そのため、更新命令の対象となるタプルに関するページがちょうど処理の対象となっている場合も、メインプロセスは、検索におけるデータベースの整合性を損なうことなく、当該更新命令を待機させることができる。
【０１７２】
これらの理由により、第２実施形態では、第１実施形態に比べて、メインプロセスの処理を簡単に、かつ、高速に実行することが可能になる。そのため、同期レプリケーションに当該データベースの更新方法を適用する場合、第２実施形態によれば、クエリを受信してから検索処理を開始するまでの時間を第１実施形態よりも短縮することが可能である。
【０１７３】
ここで、更新命令を待機させる場合、当該更新命令を待機させる際と当該更新命令を実行する際に、当該更新命令の参照が生じる。すなわち、更新命令を即座に実行する場合と比較して、更新命令を待機させる場合は更新命令を参照する回数が増加する。そのため、第２実施形態では、第１実施形態と比較して、待機させる更新命令が増加する分、当該更新命令の参照に関する処理の量が増加する。
【０１７４】
しかしながら、増加する部分の処理は、上記動作例で説明したとおりに、並列に処理可能である。そのため、並列度が高いシステムでは、メインプロセスの処理が終わるまでの時間は検索処理実行のボトルネックとなるため、第１実施形態よりもメインプロセスを高速に実行できる第２実施形態の方がよい。すなわち、更新命令の参照に関して増加する処理の量が並列に処理可能になることで短縮される量よりも少ない場合、第１実施形態よりも第２実施形態を利用した方がよい結果が得られる。
【０１７５】
なお、第２実施形態において、データベースの更新命令が１つのタプルを処理対象とする更新命令に限定されない点は、第１実施形態と同様である。
【符号の説明】
【０１７６】
１…情報処理装置
【図１】
2014097475.tif 000003
【図２】
2014097475.tif 000004
【図３】
2014097475.tif 000005
【図４】
2014097475.tif 000006
【図５】
2014097475.tif 000007
【図６】
2014097475.tif 000008
【図７】
2014097475.tif 000009
【図８】
2014097475.tif 000010
【図９】
2014097475.tif 000011
【図１０】
2014097475.tif 000012
【図１１】
2014097475.tif 000013
【図１２】
2014097475.tif 000014
【図１３】
2014097475.tif 000015
【図１４】
2014097475.tif 000016
【図１５】
2014097475.tif 000017
【国際調査報告】
2014097475.tif 000018
2014097475.tif 000019
2014097475.tif 000020
2014097475.tif 000021