(57)【要約】  本発明は、分散処理されるトランザクションのログ先行記録とデータ反映とが非同期に行われる際に、スケーラビリティ低下を抑制しつつ、一意性制約違反をより確実に検出する。  トランザクション分散処理装置３０は、管理データ分散保持部３１と、トランザクション処理部３２と、遅延反映部３４とを備える。管理データ分散保持部３１は、違反検出キーに基づき自装置に振り分けられた管理データを、処理対象データがトランザクションログの反映待ちである間、違反検出キーに対応付けて保持する。トランザクション処理部３２は、自装置に振り分けられたトランザクションにおける違反検出キーについて、その管理データの振分先に、該違反検出キーに対応付く他の管理データがない場合に、該管理データを該違反検出キーに対応付けて保持させてから、トランザクションログを先行記録する。遅延反映部３４は、トランザクションログをデータ保持装置１０に反映させる。
2015097991.tif 000002
【特許請求の範囲】
【請求項１】
トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段と、  自装置（トランザクション分散処理装置）に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他の前記トランザクション分散処理装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理手段と、  前記トランザクション処理手段による処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映手段と、  を備えたトランザクション分散処理装置。
【請求項２】
前記処理対象データが、仮想的な表（仮想表）の識別情報および前記仮想表における主キーの値からなる情報をキーとして該キーに対してデータが対応付けられた形式で表され、前記トランザクション間で前記仮想表における主キーまたはユニークキーについて一意性制約違反が発生し得るとき、  前記管理データ分散保持手段は、前記仮想表の識別情報と前記主キーの値または前記ユニークキーの値とからなる情報に対応付けて、前記管理データを保持することを特徴とする請求項１に記載のトランザクション分散処理装置。
【請求項３】
前記処理対象データが、複数のデータ保持装置に分散保持されるとき、  前記遅延反映手段は、前記複数のデータ保持装置のうち、前記トランザクションログが対象とする処理対象データの振分先となる前記データ保持装置を特定するためのデータ振分情報を記憶しておき、前記データ振分情報に基づいて特定されるデータ保持装置に対して、前記処理対象データに前記トランザクションログを反映させるための反映情報を送信することを特徴とする請求項１または請求項２に記載のトランザクション分散処理装置。
【請求項４】
処理対象データに対するトランザクションを生成するアプリケーション手段と、  請求項１から請求項３のいずれか１項に記載のトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報を記憶しておき、前記アプリケーション手段によって生成されたトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に要求するトランザクション振分手段と、  前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報を記憶しておき、前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する管理データ振分手段と、  を備えたアプリケーション装置。
【請求項５】
前記アプリケーション手段は、仮想的な表（仮想表）の識別情報および前記仮想表における主キーの値からなる情報をキーとして該キーに対してデータが対応付けられた形式で表された前記処理対象データに対して、前記トランザクションを生成し、  前記管理データ振分手段は、前記トランザクション間で前記仮想表における主キーまたはユニークキーについて一意性制約違反が発生し得るとき、前記仮想表の識別情報と前記主キーの値または前記ユニークキーの値とからなる情報に基づいて前記管理データの振分先となる前記トランザクション分散処理装置を特定するための前記管理データ振分情報を記憶しておくことを特徴とする請求項４に記載のアプリケーション装置。
【請求項６】
前記処理対象データを保持するデータ保持手段と、  請求項１から請求項３のいずれか１項に記載のトランザクション分散処理装置に保持される前記トランザクションログを、前記データ保持手段に対して反映させるデータ反映手段と、  を備えたデータ保持装置。
【請求項７】
前記データ保持手段は、仮想的な表（仮想表）の識別情報および前記仮想表における主キーの値からなる情報をキーとして該キーに対するデータの形式で、前記処理対象データを保持することを特徴とする請求項６に記載のデータ保持装置。
【請求項８】
前記データ保持手段は、他の前記データ保持装置との間で前記処理対象データを分散保持することを特徴とする請求項６または請求項７に記載のデータ保持装置。
【請求項９】
前記データ反映手段は、前記処理対象データに対する前記反映を完了すると、前記処理対象データにおける違反検出キーに関する前記管理データの振分先の前記トランザクション分散処理装置に対して、前記管理データ分散保持手段からの該管理データの削除を要求することを特徴とする請求項６から請求項８のいずれか１項に記載のデータ保持装置。
【請求項１０】
請求項１から請求項３のいずれか１項に記載のトランザクション分散処理装置の構成変更に応じて、請求項４または請求項５に記載のアプリケーション装置に保持される前記トランザクション振分情報および前記管理データ振分情報を更新する振分情報更新手段を備えた構成管理装置。
【請求項１１】
前記振分情報更新手段は、前記データ保持装置の構成変更に応じて、前記トランザクション分散処理装置に保持される前記データ振分情報を更新することを特徴とする請求項１０に記載の構成管理装置。
【請求項１２】
請求項１から請求項３のいずれか１項に記載のトランザクション分散処理装置と、  前記トランザクション分散処理装置に対してトランザクションの処理を要求する請求項４または請求項５に記載のアプリケーション装置と、  前記アプリケーション装置によって生成されるトランザクションの対象となる処理対象データを保持する請求項６から請求項９のいずれか１項に記載のデータ保持装置と、  前記トランザクション分散処理装置、前記アプリケーション装置、および、前記データ保持装置の構成を管理する請求項１０または請求項１１に記載の構成管理装置と、  を備えた分散処理システム。
【請求項１３】
処理対象データに対するトランザクションを１つ以上のトランザクション分散処理装置に分散処理させる際に、  トランザクション間で一意性制約違反が発生し得る違反検出キーに対応付けた管理データを、前記違反検出キーに基づいて特定される前記トランザクション分散処理装置に振り分け、  前記管理データの振分先の前記トランザクション分散処理装置に、前記違反検出キーに対応付けられた他のトランザクションに基づく前記管理データが保持されていない場合に、前記処理対象データが前記トランザクションログの反映待ちである間、前記違反検出キーに対応付けて前記管理データを保持させてから、  前記トランザクションの振分先のトランザクション分散処理装置において前記トランザクションログを先行記録することによりトランザクション処理を完了し、  前記トランザクション処理とは非同期に、前記トランザクションログを前記処理対象データへ反映させる、分散処理方法。
【請求項１４】
トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段を用いて、  自装置に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログを先行記録することにより、トランザクション処理を完了し、  前記トランザクション処理とは非同期に、前記トランザクションログを、前記処理対象データに対して反映させる、トランザクション分散処理方法。
【請求項１５】
トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段を用いて、  自装置に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理ステップと、  前記トランザクション処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映ステップと、  をコンピュータ装置に実行させるトランザクション分散処理プログラムを記憶した記憶媒体。
【請求項１６】
請求項１４に記載のトランザクション分散処理方法を実行するトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報と、前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報とを用いて、  処理対象データに対するトランザクションを生成し、  生成したトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に対して要求し、  前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する、トランザクション振分方法。
【請求項１７】
請求項１５に記載の記憶媒体に記憶されたトランザクション分散処理プログラムを実行するトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報と、前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報とを用いて、  前記処理対象データに対するトランザクションを生成するトランザクション生成ステップと、  前記トランザクション生成ステップにおいて生成されたトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に対して要求するトランザクション振分ステップと、  前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する管理データ振分ステップと、  をコンピュータ装置に実行させるトランザクション振分プログラムを記憶した記憶媒体。
【請求項１８】
請求項１４に記載のトランザクション分散処理方法を実行するトランザクション分散処理装置によって先行記録されるトランザクションログを反映させる処理対象データを保持する、データ保持方法。
【請求項１９】
データ保持手段に保持される処理対象データに対して、請求項１５に記載の記憶媒体に記憶されたトランザクション分散処理プログラムを実行するトランザクション分散処理装置によって先行記録されるトランザクションログを反映させる反映ステップを、コンピュータ装置に実行させるデータ保持プログラムを記憶した記憶媒体。
【請求項２０】
請求項１４に記載のトランザクション分散処理方法を実行するトランザクション分散処理装置の構成変更に応じて、請求項１６に記載のトランザクション振分方法において用いられる前記トランザクション振分情報および前記管理データ振分情報を更新する、構成管理方法。
【請求項２１】
請求項１５に記載の記憶媒体に記憶されたトランザクション分散処理プログラムを実行するトランザクション分散処理装置の構成変更に応じて、請求項１７に記載の記憶媒体に記憶されたトランザクション振分プログラムによって用いられる前記トランザクション振分情報および前記管理データ振分情報を更新する振分情報更新ステップを、コンピュータ装置に実行させる構成管理プログラムを記憶した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、データに対するトランザクションを分散処理する分散処理システムに関する。
【背景技術】
【０００２】  データに対するトランザクションを複数の処理単位に分散させて並列に処理する分散処理システムが知られている。【０００３】  例えば、このような分散処理システムとして、キーバリューストア（ＫＶＳ：Key Value Store）と呼ばれるデータ管理技術を用いるものが知られている。ＫＶＳは、保存対象のデータ（value）に対して対応する一意のキー（key）を設定する。そして、ＫＶＳは、キーおよびバリューの組を書き込み、キーを指定することでバリューを読み出す。ＫＶＳは、スケーラビリティに優れ、分散処理に適しているという特徴がある。【０００４】  例えば、特許文献１には、分散ＫＶＳに関する関連技術が記載されている。この関連技術は、トランザクションを分散して処理する各サーバに、管理用マップを用意する。管理用マップは、トランザクションＩＤをキーとし、トランザクションの状態および終了待ちのトランザクションＩＤをバリューとして保持する。そしてこの関連技術は、管理用マップを用いることにより、トランザクション間のロックの依存関係を管理し、ロールバックを不必要に発生させることなく、トランザクションの分散処理を実現している。【０００５】  また、このような分散処理システムは、トランザクションを分散処理する各処理単位でトランザクションログ（ＷＡＬ：Write Ahead Logging）を先行して記録する。分散処理システムは、トランザクションログの先行記録により、トランザクション処理を完了する。そして、分散処理システムは、その後、実際のデータに対する反映を、トランザクション処理とは非同期に行う。これにより、このような分散処理システムは、トランザクション処理の高速化を実現している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−０３３３４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】  しかしながら、上述のような、トランザクションログの先行記録およびデータ反映を非同期に行う分散処理システムでは、一意性を有するキーに対する制約違反発生の検出は、データ反映の際に行われていた。一意性を有するキーとは、主キーやユニークキー等である。これは、異なる処理単位で実行されるトランザクション間では、一意性の制約を有するデータが集約・反映される時点まで待たないと、キーの重複を検出できないためである。しかし、この場合、制約違反が検出された時点で、トランザクション自体はトランザクションログの先行書き込みとして完了している。そのため、一意性に関する制約違反の検出策としては不完全であった。【０００８】  ここで、上述のような分散処理システムにおいて、一意性制約のあるキーを集中管理し、トランザクション開始時点で一意性に関する制約違反をチェックする手法も考えられる。しかしながら、その場合、一意性に関する制約違反のチェックが一ヶ所に集中するため、その設計思想に反して、分散処理システムのスケーラビリティが損なわれるという問題があった。【０００９】  また、特許文献１に記載された関連技術では、トランザクション間のロックの依存関係を考慮して処理を行うことができるが、一意性に関する制約違反の検出については記載がない。【００１０】  本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、トランザクションログの先行記録と実際のデータ反映とを非同期に行う分散処理システムにおいて、トランザクションを複数の処理単位で分散処理する際に、スケーラビリティ低下を抑制しつつ、処理単位を跨る一意性制約違反をより確実に検出可能な技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】  上記目的を達成するために、本発明のトランザクション分散処理装置は、トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段と、自装置（トランザクション分散処理装置）に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他の前記トランザクション分散処理装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理手段と、前記トランザクション処理手段による処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映手段と、を備える。【００１２】  また、本発明のアプリケーション装置は、処理対象データに対するトランザクションを生成するアプリケーション手段と、上述のトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報を記憶しておき、前記アプリケーション手段によって生成されたトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に要求するトランザクション振分手段と、前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報を記憶しておき、前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する管理データ振分手段と、を備える。【００１３】  また、本発明のデータ保持装置は、前記処理対象データを保持するデータ保持手段と、上述のトランザクション分散処理装置に保持される前記トランザクションログを、前記データ保持手段に対して反映させるデータ反映手段と、を備える。【００１４】  また、本発明の構成管理装置は、上述のトランザクション分散処理装置の構成変更に応じて、上述のアプリケーション装置に保持される前記トランザクション振分情報および前記管理データ振分情報を更新する振分情報更新手段を備える。【００１５】  また、本発明の分散処理システムは、上述のトランザクション分散処理装置と、前記トランザクション分散処理装置に対してトランザクションの処理を要求する上述のアプリケーション装置と、前記アプリケーション装置によって生成されるトランザクションの対象となる処理対象データを保持する上述のデータ保持装置と、前記トランザクション分散処理装��、前記アプリケーション装置、および、前記データ保持装置の構成を管理する上述の構成管理装置と、を備える。【００１６】  また、本発明の分散処理方法は、処理対象データに対するトランザクションを１つ以上のトランザクション分散処理装置に分散処理させる際に、トランザクション間で一意性制約違反が発生し得る違反検出キーに対応付けた管理データを、前記違反検出キーに基づいて特定される前記トランザクション分散処理装置に振り分け、前記管理データの振分先の前記トランザクション分散処理装置に、前記違反検出キーに対応付けられた他のトランザクションに基づく前記管理データが保持されていない場合に、前記処理対象データが前記トランザクションログの反映待ちである間、前記違反検出キーに対応付けて前記管理データを保持させてから、前記トランザクションの振分先のトランザクション分散処理装置において前記トランザクションログを先行記録することによりトランザクション処理を完了し、前記トランザクション処理とは非同期に、前記トランザクションログを前記処理対象データへ反映させる。【００１７】  また、本発明のトランザクション分散処理方法は、トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段を用いて、自装置に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログを先行記録することにより、トランザクション処理を完了し、前記トランザクション処理とは非同期に、前記トランザクションログを、前記処理対象データに対して反映させる。【００１８】  また、本発明の記憶媒体は、トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段を用いて、自装置に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理ステップと、前記ト��ンザクション処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映ステップと、をコンピュータ装置に実行させるトランザクション分散処理プログラムを記憶する。【００１９】  また、本発明のトランザクション振分方法は、上述のトランザクション分散処理方法を実行するトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報と、前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報とを用いて、処理対象データに対するトランザクションを生成し、生成したトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に対して要求し、前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する。【００２０】  また、本発明の記憶媒体は、上述の記憶媒体に記憶されたトランザクション分散処理プログラムを実行するトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報と、前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報とを用いて、前記処理対象データに対するトランザクションを生成するトランザクション生成ステップと、前記トランザクション生成ステップにおいて生成されたトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に対して要求するトランザクション振分ステップと、前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する管理データ振分ステップと、をコンピュータ装置に実行させるトランザクション振分プログラムを記憶する。【００２１】  また、本発明のデータ保持方法は、上述のトランザクション分散処理方法を実行するトランザクション分散処理装置によって先行記録されるトランザクションログを反映させる処理対象データを保持する。【００２２】  また、本発明の記憶媒体は、データ保持手段に保持される処理対象データに対して、上述の記憶媒体に記憶されたトランザクション分散処理プログラムを実行するトランザクション分散処理装置によって先行記録されるトランザクションログを反映させる反映ステップを、コンピュータ装置に実行させるデータ保持プログラムを記憶する。【００２３】  また、本発明の構成管理方法は、上述のトランザクション分散処理方法を実行するトランザクション分散処理装置の構成変更に応じて、上述のトランザクション振分方法において用いられる前記トランザクション振分情報および前記管理データ振分情報を更新する。【００２４】  また、本発明の記憶媒体は、上述の記憶媒体に記憶されたトランザクション分散��理プログラムを実行するトランザクション分散処理装置の構成変更に応じて、上述の記憶媒体に記憶されたトランザクション振分プログラムによって用いられる前記トランザクション振分情報および前記管理データ振分情報を更新する振分情報更新ステップを、コンピュータ装置に実行させる構成管理プログラムを記憶する。
【発明の効果】
【００２５】  本発明は、トランザクションログの先行記録と実際のデータ反映とを非同期に行う分散処理システムにおいて、トランザクションを複数の処理単位で分散処理する際に、スケーラビリティ低下を抑制しつつ、処理単位を跨る一意性制約違反をより確実に検出可能な技術を提供することができる。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施の形態としての分散処理システムの構成を示すブロック図である。
【図２】本発明の実施の形態としての分散処理システムのハードウェア構成図である。
【図３】本発明の実施の形態としての分散処理システムの機能ブロック図である。
【図４】本発明の実施の形態としての分散処理システムのトランザクション振分動作を説明するフローチャートである。
【図５】本発明の実施の形態としての分散処理システムのトランザクション処理を説明するフローチャートである。
【図６】本発明の実施の形態としての分散処理システムのトランザクションログの反映動作を説明するフローチャートである。
【図７】本発明の実施の形態としての分散処理システムのデータ反映動作を説明するフローチャートである。
【図８】本発明の実施の形態としての分散処理システムの管理データ削除動作を説明するフローチャートである。
【図９】本発明の実施の形態としての分散処理システムの構成管理動作を説明するフローチャートである。
【図１０】本発明の実施の形態としての分散処理システムの具体例の構成を示す模式図である。
【図１１】本発明の実施の形態の具体例における処理対象データを説明する図である。
【図１２】本発明の実施の形態の具体例において分散保持される処理対象データを説明する図である。
【図１３】本発明の実施の形態の具体例における主キーの管理データを説明する図である。
【図１４】本発明の実施の形態の具体例において分散保持される主キーの管理データを説明する図である。
【図１５】本発明の実施の形態の具体例において更新される前後の主キーの管理データ振分情報を説明する図である。
【図１６】本発明の実施の形態としての分散処理システムの他の具体例の構成を示す模式図である。
【図１７】本発明の実施の形態の他の具体例における処理対象データを説明する図である。
【図１８】本発明の実施の形態の他の具体例における処理対象データの実体としてのＫＶＳを説明する図である。
【図１９】本発明の実施の形態の他の具体例におけるユニークキーの管理データを説明する図である。
【発明を実施するための形態】
【００２７】  以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２８】  （構成の説明）  本発明の実施の形態としての分散処理システム１の構成を図１に示す。
【００２９】  図１において、分散処理システム１は、データ保持装置１０と、アプリケーション装置２０と、トランザクション分散処理装置３０と、構成管理装置４０とを備える。また、各装置は、ネットワークを介して互いに通信可能に接続されている。ここで、図１には、複数のデータ保持装置１０と、１つのアプリケーション装置２０と、複数のトランザクション分散処理装置３０と、１つの構成管理装置４０とを示しているが、本発明の分散処理システムが備える各装置の数を限定するものではない。
【００３０】  データ保持装置１０は、処理対象データを保持する装置である。本実施の形態では、処理対象データは、仮想的な表（仮想表）を表し、仮想表の識別情報および仮想表における主キーの値からなる情報をキーとしてデータが対応付けられたキーバリューストア（ＫＶＳ：Key Value Store）であるものとする。また、本実施の形態では、データ保持装置１０は、処理対象データを、他のデータ保持装置１０との間で分散保持するものとする。
【００３１】  アプリケーション装置２０は、処理対象データに対するトランザクションを生成する装置である。本実施の形態では、アプリケーション装置２０は、仮想表を表す上述のＫＶＳに対するトランザクションを生成するものとする。
【００３２】  トランザクション分散処理装置３０は、アプリケーション装置２０によって生成されるトランザクションを、他のトランザクション分散処理装置３０との間で分散処理する装置である。
【００３３】  構成管理装置４０は、分散処理システム１の構成を管理する装置である。
【００３４】  次に、分散処理システム１を構成する各装置のハードウェア構成を図２に示す。図２において、データ保持装置１０は、ＣＰＵ（Central Processing Unit）１００１と、ＲＡＭ（Random Access Memory）１００２と、ＲＯＭ（Read Only Memory）１００３と、ハードディスク等の記憶装置１００４と、ネットワークインタフェース１００５とを備えたコンピュータ装置によって構成可能である。また、アプリケーション装置２０は、ＣＰＵ２００１と、ＲＡＭ２００２と、ＲＯＭ２００３と、ハードディスク等の記憶装置２００４と、ネットワークインタフェース２００５とを備えたコンピュータ装置によって構成可能である。また、トランザクション分散処理装置３０は、ＣＰＵ３００１と、ＲＡＭ３００２と、ＲＯＭ３００３と、ハードディスク等の記憶装置３００４と、ネットワークインタフェース３００５とを備えたコンピュータ装置によって構成可能である。また、構成管理装置４０は、ＣＰＵ４００１と、ＲＡＭ４００２と、ＲＯＭ４００３と、ハードディスク等の記憶装置４００４と、ネットワークインタフェース４００５とを備えたコンピュータ装置によって構成可能である。なお、分散処理システム１を構成する各装置のハードウェア構成は、上述の構成に限定されない。
【００３５】  次に、分散処理システム１を構成する各装置の機能ブロック構成を図３に示す。
【００３６】  まず、トランザクション分散処理装置３０の機能ブロック構成について説明する。
【００３７】  図３において、トランザクション分散処理装置３０は、管理データ分散保持部３１と、トランザクション処理部３２と、トランザクションログ保持部３３と、遅延反映部３４とを有する。ここで、トランザクション分散処理装置３０が図２に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、管理データ分散保持部３１およびトランザクションログ保持部３３は、ＲＡＭ３００２および記憶装置３００４によって構成される。また、トランザクション処理部３２および遅延反映部３４は、ネットワークインタフェース３００５と、ＲＯＭ３００３または記憶装置３００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ３００２に読み込んで実行するＣＰＵ３００１とによって構成される。なお、トランザクション分散処理装置３０を構成する各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００３８】  管理データ分散保持部３１は、違反検出キーに基づいて自装置に振り分けられた管理データを、違反検出キーに対応付けて保持する。ここで、違反検出キーとは、処理対象データにおいて一意性制約を有するキーのうち、トランザクション間で一意性制約違反が発生し得るキーである。また、管理データとは、トランザクションが対象とする処理対象データがトランザクションログの反映待ちであることを表す情報である。また、管理データ分散保持部３１は、そのような管理データを、該当する処理対象データがトランザクションログの反映待ちである間、保持する。
【００３９】  ここで、処理対象データが仮想表を表すＫＶＳである場合、トランザクション間で、ある仮想表の主キーについて一意性制約違反が発生し得るとする。この場合、違反検出キーは、仮想表の識別情報および仮想表における主キーの値からなる情報となる。また、トランザクション間で、ある仮想表のユニークキーについて一意性制約違反が発生し得るとする。この場合、違反検出キーは、仮想表の識別情報および仮想表におけるユニークキーの値からなる情報となる。また、管理データは、違反検出キーに対して後述のトランザクションキーを含む情報が対応付けられたＫＶＳであってもよい。
【００４０】  なお、管理データ分散保持部３１は、違反検出キーの値毎に１つの管理データを記憶し、同一の値の違反検出キーについて同時に複数の管理データを保持できないものとする。どのような値の違反検出キーについての管理データがどのトランザクション分散処理装置３０の管理データ分散保持部３１に振り分けられるかについては、後述のアプリケーション装置２０により、違反検出キーに基づき一意に特定されるよう定められている。
【００４１】  トランザクション処理部３２は、アプリケーション装置２０から要求されたトランザクションを処理する際に、そのトランザクションにおける違反検出キーを、その違反検出キーについての管理データの振分先であるトランザクション分散処理装置３０の管理データ分散保持部３１に保持させることを試みる。もし、そのトランザクションにおいて一意性制約違反が発生し得る複数の違反検出キーがあれば、トランザクション処理部３２は、各違反検出キーについてその振分先への保持を試みればよい。ここで、各管理データの振分先は、アプリケーション装置２０から通知されるものとする。なお、アプリケーション装置２０からの振分先の通知の詳細については後述する。
【００４２】  前述のように、管理データ分散保持部３１は、同一の値の違反検出キーについて１つの管理データを保持し、同一の値の違反検出キーについて複数の管理データを保持しないように構成される。ここで、振分先の管理データ分散保持部３１において、該当する違反検出キーについて既に他のトランザクションに基づく他の管理データが保持されている場合がある。この場合、トランザクション処理部３２は、振分先への管理データの保持に失敗する。一方、振分先の管理データ分散保持部３１において、該当する違反検出キーについて他の管理データが保持されていない場合がある。この場合、トランザクション処理部３２は、振分先への管理データの保持に成功する。
【００４３】  また、トランザクション処理部３２は、要求されたトランザクションに関わる各管理データについて、その振分先への保持に成功すると、次のように動作するよう構成される。この場合、トランザクション処理部３２は、そのトランザクションの処理内容を表すトランザクションログを、トランザクションログ保持部３３に先行記録する。そして、トランザクション処理部３２は、トランザクション処理の完了を、アプリケーション装置２０に対して通知する。
【００４４】  また、トランザクション処理部３２は、要求されたトランザクションに関わる各管理データの少なくともいずれかについて振分先への保持に失敗すると、次のように動作するよう構成される。この場合、トランザクション処理部３２は、このトランザクションの処理を開始する前の状態に戻り、アプリケーション装置２０に対してエラーを通知する。前の状態に戻るとは、例えば、要求されたトランザクションに関わる管理データのうち、いったん振分先での保持に成功した管理データを、振分先から削除する処理を行うことなどである。
【００４５】  なお、トランザクション処理部３２は、各管理データの振分先への保持に成功した後、トランザクションログを先行記録する前に、確認処理を行ってもよい。確認処理とは、その違反検出キーに関わる処理対象データの振分先となるデータ保持装置１０に対して、該当する違反検出キーに関する処理対象データが保持されていないことを確認する処理である。そのような確認先のデータ保持装置１０は、次に説明するデータ振分情報を参照することにより特定可能である。これにより、トランザクション処理部３２は、該当するトランザクションにより、一意性制約違反が発生しないことをさらに確実にできる。
【００４６】  トランザクションログ保持部３３は、トランザクション処理部３２によって先行記録されるトランザクションログを保持する。
【００４７】  遅延反映部３４は、トランザクション処理部３２によるトランザクション処理とは非同期に、トランザクションログ保持部３３に保持されたトランザクションログを、データ保持装置１０の処理対象データに反映させる。
【００４８】  具体的には、遅延反映部３４は、トランザクションログの対象となる処理対象データの振分先となるデータ保持装置１０を特定する。このために、遅延反映部３４は、例えば、データ振分情報をあらかじめ記憶していてもよい。データ振分情報は、データ保持装置１０のうち、各処理対象データの振分先となるデータ保持装置１０を特定するための情報である。例えば、データ振分情報は、仮想表を識別する情報および主キーの値からなる情報から算出されるハッシュ値の範囲に対して、その振分先となるデータ保持装置１０が定められた情報であってもよい。
【００４９】  この場合、遅延反映部３４は、トランザクションログの示す仮想表を識別する情報および主キーの値からなる情報に対してハッシュ関数を適用してハッシュ値を算出する。そして、遅延反映部３４は、算出したハッシュ値を含む範囲に対して対応付けられたデータ保持装置１０を、その処理対象データの振分先として特定すればよい。
【００５０】  そして、遅延反映部３４は、データ振分情報に基づいて特定されるデータ保持装置１０に対して、トランザクションログ保持部３３に保持されたトランザクションログを処理対象データに反映させるための反映情報を送信する。なお、遅延反映部３４は、反映情報の反映が完了したトランザクションログを、トランザクションログ保持部３３から削除する。
【００５１】  次に、アプリケーション装置２０の機能ブロック構成について説明する。
【００５２】  図３において、アプリケーション装置２０は、アプリケーション部２１と、トランザクション振分部２２と、管理データ振分部２３とを有する。ここで、アプリケーション装置２０が図２に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、アプリケーション部２１は、ＲＯＭ２００３または記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１によって構成される。また、トランザクション振分部２２および管理データ振分部２３は、ネットワークインタフェース２００５と、ＲＯＭ２００３または記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１とによって構成される。なお、アプリケーション装置２０を構成する各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００５３】  アプリケーション部２１は、処理対象データに対するトランザクションを生成する。前述のように、本実施の形態では、アプリケーション部２１は、仮想表を表すＫＶＳに対するトランザクションを生成する。また、各トランザクションには、そのトランザクションを識別するトランザクションキーが設定される。例えば、２つの仮想表に同一の項目「Ａ」を表す列がそれぞれ含まれ、各仮想表において「Ａ」列に同一の値を指定する２つの関連する処理が１つのトランザクションクラスとして定義される場合を考える。この場合、トランザクションキーは、項目「Ａ」に指定される値であってもよい。
【００５４】  また、アプリケーション部２１は、生成するトランザクションの定義情報に基づいて、そのトランザクションが他のトランザクションとの間で一意性制約違反を発生し得る違反検出キーを特定可能である。例えば、トランザクション間で、ある仮想表の主キーについて一意性制約違反が発生し得ることを想定する。この場合、アプリケーション部２１は、その仮想表の識別情報およびその仮想表における主キーの値からなる情報を、このトランザクションにおける違反検出キーとして特定する。また、例えば、トランザクション間で、ある仮想表のユニークキーについて一意性制約違反が発生し得ることを想定する。この場合、アプリケーション部２１は、その仮想表の識別情報およびその仮想表におけるユニークキーの値からなる情報を、このトランザクションにおける違反検出キーとして特定する。また、アプリケーション部２１は、トランザクション間で一意性制約違反が発生し得る複数の違反検出キーを特定してもよい。特定された違反検出キーは、後述の管理データ振分部２３によって用いられる。
【００５５】  トランザクション振分部２２は、トランザクション振分情報をあらかじめ記憶している。ここで、トランザクション振分情報は、トランザクション分散処理装置３０のうち、各トランザクションの振分先となるトランザクション分散処理装置３０を特定するための情報である。例えば、トランザクション振分情報は、トランザクションキーから算出されるハッシュ値の範囲に対して、振分先となるトランザクション分散処理装置３０が定められた情報であってもよい。
【００５６】  また、トランザクション振分部２２は、アプリケーション部２１によって生成されたトランザクションについて、トランザクション振分情報に基づいてその振分先のトランザクション分散処理装置３０を特定する。そして、トランザクション振分部２２は、振分先のトランザクション分散処理装置３０に対して、そのトランザクションの処理を要求する。
【００５７】  例えば、トランザクション振分情報が、ハッシュ値の範囲に対して、振分先のトランザクション分散処理装置３０が対応付けられた情報である場合を考える。この場合、トランザクション振分部２２は、トランザクションキーに対してハッシュ関数を適用してハッシュ値を算出する。そして、トランザクション振分部２２は、算出したハッシュ値を含む範囲に対して対応付けられたトランザクション分散処理装置３０を、振分先として特定すればよい。
【００５８】  管理データ振分部２３は、管理データ振分情報をあらかじめ記憶している。ここで、管理データ振分情報は、トランザクション分散処理装置３０のうち、違反検出キーに基づき管理データの振分先となるトランザクション分散処理装置３０を特定するための情報である。例えば、管理データ振分情報は、違反検出キーから算出されるハッシュ値の範囲に対して、振分先となるトランザクション分散処理装置３０が定められた情報であってもよい。
【００５９】  また、管理データ振分部２３は、トランザクションの振分先となるトランザクション分散処理装置３０に対して、そのトランザクションにおける各違反検出キーについて、管理データの振分先を通知する。
【００６０】  例えば、管理データ振分情報が、ハッシュ値の範囲に対して、振分先のトランザクション分散処理装置３０が対応付けられた情報である場合を考える。この場合、管理データ振分部２３は、トランザクションにおける各違反検出キーに対してハッシュ関数を適用してハッシュ値を算出する。そして、管理データ振分部２３は、算出したハッシュ値を含む範囲に対して対応付けられたトランザクション分散処理装置３０を、振分先として特定すればよい。
【００６１】  また、管理データ振分部２３は、データ保持装置１０からの照会に応じて、反映が完了した処理対象データにおける違反検出キーに対応付けられた管理データの振分先を通知してもよい。この照会は、振分先のトランザクション分散処理装置３０において、該当する管理データを削除するよう、データ保持装置１０から要求するために行われる。
【００６２】  次に、データ保持装置１０の機能ブロック構成について説明する。
【００６３】  図３において、データ保持装置１０は、データ保持部１１と、データ反映部１２とを有する。ここで、データ保持装置１０が図２に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、データ保持部１１は、記憶装置１００４によって構成される。また、データ反映部１２は、ネットワークインタフェース１００５と、ＲＯＭ１００３または記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。なお、データ保持装置１０を構成する各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００６４】  データ保持部１１は、処理対象データを保持する。前述のように、本実施の形態では、処理対象データは、複数のデータ保持装置１０に分散保持される。したがって、データ保持部１１は、自装置に振り分けられた処理対象データを保持している。また、本実施の形態では、処理対象データは、仮想表の識別情報および仮想表における主キーの値からなる情報をキーとするＫＶＳである。前述のように、どの処理対象データがどのデータ保持装置１０に保持されるかについては、トランザクション分散処理装置３０に保持されるデータ振分情報により、キーに基づいて一意に特定されるよう定められている。
【００６５】  データ反映部１２は、トランザクション分散処理装置３０から送信されるトランザクションログの反映情報を、データ保持部１１に反映させる。
【００６６】  また、データ反映部１２は、反映の対象となった処理対象データにおける違反検出キーに対応付けられた管理データの振分先となっているトランザクション分散処理装置３０に対して、その管理データの削除を要求する。前述のように、データ反映部１２は、アプリケーション装置２０に照会することにより、該当する管理データの振分先となっているトランザクション分散処理装置３０を特定可能である。もし、分散処理システム１に複数のアプリケーション装置２０が含まれる場合、データ反映部１２は、いずれかのアプリケーション装置２０に対して照会を行えばよい。なお、データ反映部１２は、後述の構成管理装置４０に問い合わせることにより、照会可能な１つ以上のアプリケーション装置２０を表す情報を得ることができる。また、データ反映部１２は、複数のアプリケーション装置２０のうち、所定のルールにしたがって照会先を選択してもよい。例えば、所定のルールとして、直近の照会先を記憶しておき、ラウンドロビンで照会先を変更するルールを適用してもよい。このように構成することにより、特定のアプリケーション装置２０へデータ保持装置１０からの照会が集中することを防止できる。
【００６７】  次に、構成管理装置４０の機能ブロック構成について説明する。
【００６８】  図３において、構成管理装置４０は、振分情報更新部４１を有する。ここで、構成管理装置４０が図２に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、振分情報更新部４１は、ネットワークインタフェース４００５と、ＲＯＭ４００３または記憶装置４００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ４００２に読み込んで実行するＣＰＵ４００１とによって構成される。なお、振分情報更新部４１を構成する各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００６９】  振分情報更新部４１は、分散処理システム１におけるトランザクション分散処理装置３０の構成変更に応じて、アプリケーション装置２０におけるトランザクション振分情報および管理データ振分情報を更新する。トランザクション分散処理装置３０の構成変更とは、例えば、新たなトランザクション分散処理装置３０の追加、または、既存のトランザクション分散処理装置３０の削除などを言う。その他、構成変更とは、このような追加または削除に限らず、各トランザクション分散処理装置３０の負荷状況の変化などであってもよい。その場合、振分情報更新部４１は、それぞれの負荷状況の変化に応じて、トランザクション振分情報や管理データ振分情報における各装置の担当範囲を変更してもよい。
【００７０】  また、振分情報更新部４１は、更新される管理データ振分情報に基づいて管理データが格納されるように、既に格納済みの管理データのトランザクション分散処理装置３０間での移動を制御する。例えば、振分情報更新部４１は、管理データ振分情報の更新内容を決定した後、トランザクション分散処理装置３０間での管理データ移動を制御し、移動が完了すると、管理データ振分情報を更新するようにしてもよい。
【００７１】  また、振分情報更新部４１は、分散処理システム１におけるデータ保持装置１０の構成変更に応じて、トランザクション分散処理装置３０におけるデータ振分情報を更新する。データ保持装置１０の構成変更とは、例えば、新たなデータ保持装置１０の追加、または、既存のデータ保持装置１０の削除などを言う。その他、構成変更とは、このような追加または削除に限らず、各データ保持装置１０の負荷状況の変化などであってもよい。その場合、振分情報更新部４１は、それぞれの負荷状況の変化に応じて、データ振分情報における各装置の担当範囲を変更してもよい。
【００７２】  また、振分情報更新部４１は、更新されるデータ振分情報に基づいて処理対象データが格納されるように、既に格納済みの処理対象データの各データ保持装置１０間での移動を制御する。例えば、振分情報更新部４１は、データ振分情報の更新内容を決定した後、データ保持装置１０間での処理対象データの移動を制御し、移動が完了すると、データ振分情報を更新するようにしてもよい。
【００７３】  なお、例えば、振分情報更新部４１は、分散処理システム１における各装置の構成に関する構成情報を保持しておき、その追加や削除を検出することにより、上述の各振分情報の更新処理を行ってもよい。
【００７４】  （動作の説明）  以上のように構成された分散処理システム１の動作について、図面を参照して説明する。
【００７５】  まず、アプリケーション装置２０のトランザクション振分動作を図４に示す。
【００７６】  図４では、まず、アプリケーション部２１は、処理対象データに対するトランザクションを生成する（ステップＳ１）。前述のように、生成されたトランザクションには、トランザクションキーが設定される。
【００７７】  次に、トランザクション振分部２２は、ステップＳ１で生成されたトランザクションの振分先となるトランザクション分散処理装置３０を特定する（ステップＳ２）。前述のように、トランザクション振分部２２は、トランザクション振分情報を参照することにより振分先の特定を行う。
【００７８】  次に、管理データ振分部２３は、ステップＳ１で生成されたトランザクションにおいて一意性制約違反を発生し得る各違反検出キーに基づいて、管理データの振分先となるトランザクション分散処理装置３０を特定する（ステップＳ３）。前述のように、管理データ振分部２３は、管理データ振分情報を参照することにより振分先の特定を行う。
【００７９】  次に、トランザクション振分部２２は、ステップＳ２で特定されたトランザクションの振分先のトランザクション分散処理装置３０に対して、ステップＳ１で生成されたトランザクションの処理を要求する。また、管理データ振分部２３は、トランザクションの振分先のトランザクション分散処理装置３０に対して、ステップＳ３で特定された各違反検出キーについての管理データの振分先を通知する（ステップＳ４）。
【００８０】  次に、トランザクション振分部２２は、ステップＳ２で特定されたトランザクションの振分先のトランザクション分散処理装置３０から、トランザクション処理の完了またはエラーを表す情報を受信する（ステップＳ５）。
【００８１】  以上で、アプリケーション装置２０は、トランザクション振分動作を終了する。
【００８２】  次に、トランザクション分散処理装置３０のトランザクション処理を図５に示す。
【００８３】  図５では、まず、トランザクション処理部３２は、アプリケーション装置２０から、トランザクションの処理の要求を受信する。あわせて、トランザクション処理部３２は、このトランザクションにおける各違反検出キーについて、その管理データの振分先となるトランザクション分散処理装置３０を表す情報を受信する（ステップＳ１１）。
【００８４】  次に、トランザクション処理部３２は、このトランザクションにおける各違反検出キーについて、以下のステップＳ１２〜Ｓ１３を繰り返す。
【００８５】  ここでは、トランザクション処理部３２は、該当する違反検出キーの振分先の管理データ分散保持部３１に、該当する違反検出キーに対応付けられた他の管理データが保持されているか否かを判断する（ステップＳ１２）。
【００８６】  ここで、該当する違反検出キーに対応付けられた他の管理データが保持されていない場合、トランザクション処理部３２は、振分先の管理データ分散保持部３１に、該当する違反検出キーに対応付けて管理データを保持させる（ステップＳ１３）。
【００８７】  そして、トランザクション処理部３２は、他の違反検出キーがあれば（ステップＳ１４でＹｅｓ）、その違反検出キーについてステップＳ１２からの処理を繰り返す。なお、前述のように、トランザクション処理部３２は、ステップＳ１３を実行後、該当する違反検出キーに関わる処理対象データに関する確認処理を、その振分先のデータ保持装置１０に対して行ってもよい。そして、その場合、トランザクション処理部３２は、確認処理を行ってから、次の違反検出キーについての処理を繰り返すようにしてもよい。
【００８８】  そして、全ての違反検出キーについてその振分先での管理データの保持に成功した場合、トランザクション処理部３２は、トランザクションログの先行記録を行う。詳細には、トランザクション処理部３２は、このトランザクションの処理内容を表すトランザクションログを、トランザクションログ保持部３３に先行記録する（ステップＳ１５）。
【００８９】  次に、トランザクション処理部３２は、トランザクション処理の完了を、アプリケーション装置２０に通知する（ステップＳ１６）。
【００９０】  一方、ステップＳ１２で、いずれかの違反検出キーに対応付けられた管理データがその振分先に保持されていた場合、トランザクション処理部３２は、ステップＳ１１以前の状態に戻る（ステップＳ１７）。具体的には、トランザクション処理部３２は、それまでのステップＳ１３の実行により振分先への保持に一旦成功した管理データを削除する処理等を行えばよい。
【００９１】  次に、トランザクション処理部３２は、アプリケーション装置２０に対して、エラーを通知する（ステップＳ１８）。
【００９２】  以上で、トランザクション分散処理装置３０は、トランザクション処理を終了する。
【００９３】  次に、トランザクション分散処理装置３０の遅延反映動作を図６に示す。
【００９４】  図６では、まず、遅延反映部３４は、トランザクションログ保持部３３に保持されたトランザクションログについて、その処理対象データの振分先となるデータ保持装置１０を特定する（ステップＳ３１）。前述のように、遅延反映部３４は、データ振分情報を参照することにより振分先の特定を行う。
【００９５】  次に、遅延反映部３４は、ステップＳ３１で特定されたデータ保持装置１０に対して、トランザクションログを処理対象データに反映させるための反映情報を送信する（ステップＳ３２）。
【００９６】  以上で、トランザクション分散処理装置３０は、遅延反映動作を終了する。
【００９７】  次に、データ保持装置１０におけるデータ反映動作を図７に示す。
【００９８】  図７では、まず、データ反映部１２は、トランザクション分散処理装置３０から、トランザクションログを処理対象データに反映させるための反映情報を受信する（ステップＳ４１）。
【００９９】  次に、データ反映部１２は、受信した反映情報を、データ保持部１１に反映させる（ステップＳ４２）。
【０１００】  次に、データ反映部１２は、反映の対象となった処理対象データにおける違反検出キーに基づいて、その管理データの振分先となっているトランザクション分散処理装置３０を特定する（ステップＳ４３）。前述のように、振分先のトランザクション分散処理装置３０は、アプリケーション装置２０に照会することにより特定可能である。
【０１０１】  次に、データ反映部１２は、ステップＳ４３で特定されたトランザクション分散処理装置３０に対して、該当する違反検出キーに対応付けられた管理データを削除するよう要求する（ステップＳ４４）。
【０１０２】  以上で、データ保持装置１０は、データ反映動作を終了する。
【０１０３】  次に、上述のステップＳ４４で管理データの削除を要求されたトランザクション分散処理装置３０の管理データ削除動作を図８に示す。
【０１０４】  図８では、まず、トランザクション分散処理装置３０は、データ保持装置１０から、管理データの削除要求を受信する（ステップＳ５１）。
【０１０５】  次に、管理データ分散保持部３１は、該当する違反検出キーに対応付けられた管理データを削除する（ステップＳ５２）。
【０１０６】  以上で、トランザクション分散処理装置３０は、管理データ削除動作を終了する。
【０１０７】  次に、構成管理装置４０が、分散処理システム１の構成を管理する動作を図９に示す。
【０１０８】  図９において、まず、データ保持装置１０の構成変更があった場合について説明する（ステップＳ６１で「データ保持装置」）。この場合、振分情報更新部４１は、各トランザクション分散処理装置３０におけるデータ振分情報の更新内容を決定する（ステップＳ６２）。
【０１０９】  次に、振分情報更新部４１は、ステップＳ６２で決定された更新内容に基づいて、既に格納されている処理対象データの移動を行うよう、各データ保持装置１０を制御する（ステップＳ６３）。
【０１１０】  次に、振分情報更新部４１は、各トランザクション分散処理装置３０におけるデータ振分情報を更新する（ステップＳ６４）。
【０１１１】  なお、振分情報更新部４１は、ステップＳ６３およびＳ６４の処理を、不可分な処理として実行する。例えば、ステップＳ６３またはＳ６４の処理中にデータ振分情報に対する参照を行う他の処理は、ステップＳ６３およびＳ６４の完了を待ち合わせるようにする。
【０１１２】  また、トランザクション分散処理装置３０の構成変更があった場合について説明する（ステップＳ６１で「トランザクション分散処理装置」）。この場合、振分情報更新部４１は、アプリケーション装置２０におけるトランザクション振分情報および管理データ振分情報の更新内容を決定する（ステップＳ６５）。
【０１１３】  次に、振分情報更新部４１は、ステップＳ６５で決定された管理データ振分情報の更新内容に基づいて、既に格納されている管理データの移動を行うよう、各トランザクション分散処理装置３０を制御する（ステップＳ６６）。
【０１１４】  次に、振分情報更新部４１は、アプリケーション装置２０のトランザクション振分情報および管理データ振分情報を更新する（ステップＳ６７）。
【０１１５】  なお、振分情報更新部４１は、ステップＳ６６およびＳ６７の処理を、不可分な処理として実行する。例えば、ステップＳ６６またはＳ６７の処理中にトランザクション振分情報または管理データ振分情報に対する参照を行う他の処理は、ステップＳ６６およびＳ６７の完了を待ち合わせるようにする。
【０１１６】  以上で、構成管理装置４０は、構成管理動作を終了する。
【０１１７】  （本発明の実施の形態の具体例１）  次に、本実施の形態について1つ目の具体例（具体例１）を示す。なお、この具体例１では、データ保持装置１０を、Ｓ層に配置されたコンピュータまたはノードＳと呼ぶものとする。また、アプリケーション装置２０を、Ｐ層に配置されたコンピュータまたはノードＰと呼ぶものとする。また、トランザクション分散処理装置３０を、Ｔ層に配置されたコンピュータまたはノードＴと呼ぶものとする。図１０は、具体例１の構成を模式的に示す図である。図１０において、この分散処理システム１は、Ｐ層に１つのノードＰ１と、Ｔ層に３つのノードＴ１〜Ｔ３と、Ｓ層に２つのノードＳ１〜Ｓ２とを備える。なお、構成管理装置４０については、図示を省略している。
【０１１８】  また、この具体例１では、トランザクション間で一意性制約違反が発生し得る違反検出キーとして、仮想表の主キーが適用される例について説明する。この場合、ノードＰ１の管理データ振分情報は、仮想表の主キーに基づく管理データ振分情報となる。また、ノードＴ１〜Ｔ３の管理データ分散保持部３１は、仮想表の主キーについての管理データを保持することになる。
【０１１９】  また、この具体例１では、処理対象データは、商品の注文および請求に関わる仮想表Ａおよび仮想表Ｂを表すＫＶＳであることを想定する。図１１に、仮想表Ａおよび仮想表Ｂ、ならびに、その実体としてのＫＶＳを示す。仮想表Ａでは、主キーとして“請求書番号”の列が設定されている。また、仮想表Ｂでは、主キーとして“注文番号”が設定されている。なお、図１１のＫＶＳでは、仮想表Ｂに対応するＫＶペアに、主キーではない“請求書番号”の指定によりアクセスできるよう、“索引_表Ｂ_”から始まるキーに対応付けて、該当するＫＶペアへのインデックスが保持されている。また、これらの処理対象データ（ＫＶＳ）の各ＫＶペアは、図１２に示すように、キーによって一意に特定されるノードＳ１またはＳ２に分散保持される。
【０１２０】  また、この具体例１では、トランザクション処理の単位が、「各仮想表において“請求書番号”列が同じ値毎」と規定されているとする。この場合、“請求書番号”列が、トランザクションキーとなる。以降、“請求書番号”で識別されるトランザクション処理単位を、“トランザクションクラス１”と呼ぶとする。このとき、“トランザクションクラス１”が、Ｐ層において以下のように定義されていることを想定する。・「トランザクションクラス１」は、仮想表Ａの“請求書番号”列から生成される。・「トランザクションクラス１」は、仮想表Ｂの“請求書番号”列から生成される。
【０１２１】  ここで、トランザクションキーを請求書番号“１０００８”とする以下２つのトランザクションが、同時に実行されようとしている場合を考える。＜トランザクション１＞・仮想表Ａに、「請求書番号：１０００８、請求先：佐藤、請求日：２０１３／０７／０１」を挿入・仮想表Ｂに、「注文番号：０００１０、品名：炊飯器、請求書番号：１０００８」を挿入＜トランザクション２＞・仮想表Ａに、「請求書番号：１０００８、請求先：田中、請求日：２０１３／０７／０１」を挿入・仮想表Ｂに、「注文番号：０００１０、品名：ラジオ、請求書番号：１０００８」を挿入  この場合、ノードＰ１のトランザクション振分部２２は、トランザクション振分情報として、トランザクションキーから算出されるハッシュ値の範囲に、その振分先となるノードＴが対応付けられた情報を保持する。
【０１２２】  また、ノードＴの遅延反映部３４は、データ振分情報として、「仮想表名＋主キーの値」から算出されるハッシュ値の範囲に、その振分先となるノードＳが対応付けられた情報を保持する。なお、ここでは、ノードＴ１〜Ｔ３には、同一のデータ振分情報が保持されるものとする。また、「Ｘ＋Ｙ」とは、ＸおよびＹからなる情報を表すものとする。
【０１２３】  このとき、Ｔ層における各トランザクションの振分先は、ノードＰ１におけるトランザクション振分情報に基づいて、トランザクションキーである請求書番号“１０００８”から一意に決定される。また、処理対象データとしてのＫＶペアのＳ層における振分先は、ノードＴにおけるデータ振分情報に基づいて、「仮想表名＋主キーの値」から一意に決定される。
【０１２４】  また、このとき、トランザクションの振分先となったＴ層のノードは、各トランザクションについてトランザクションログを先行記録（ＷＡＬ：Write Ahead Logging）することによりトランザクション処理を完了する。以下、先行記録されたトランザクションログも、ＷＡＬとも記載する。また、処理対象データの振分先となったＳ層のノードは、トランザクション処理とは非同期に、処理対象データにＷＡＬを反映することになる。そのため、トランザクション１およびトランザクション２が実行されることにより、仮想表Ａにおいて主キー制約違反（“請求書番号”の重複）が発生する可能性がある。また、仮想表Ｂにおいて主キー制約違反（“注文番号”の重複）が発生する可能性がある。
【０１２５】  そこで、この具体例１では、一意性制約違反が発生し得る「仮想表Ａ＋主キーの値」と、「仮想表Ｂ＋主キーの値」とが違反検出キーとなる。そこで、ノードＰ１の管理データ振分部２３は、主キーに関わる管理データ振分情報を記憶しておく。具体的には、主キーに関わる管理データ振分情報は、「仮想表名＋主キーの値」から算出されるハッシュ値の範囲に、その振分先のノードＴが対応付けられた情報となる。これにより、管理データの振分先となるノードＴは、ノードＰ１の管理データ振分情報に基づいて、一意に決定される。
【０１２６】  また、この具体例１において生成される主キーについての管理データを、図１３に示す。なお、図１３の左図は、主キーについての管理データを模式的に表形式で示しているが、右図のように、その実体は、ＫＶＳである。図１３の左図において、各行が示す管理データは、「仮想表名」および「主キーの値」に対して、「トランザクションキー」が対応付けられた情報となっている。また、図１３の右図において、各行が示す管理データのＫＶペアは、「仮想表名＋主キーの値」をキーとして、「仮想表名、主キー、トランザクションキー」を含むデータが対応付けられた情報となっている。この場合、「仮想表名＋主キーの値」をキーとする管理データのＫＶペアは、その「仮想表名＋主キーの値」をキーとする処理対象データのＫＶペアが、ノードＳへの格納待ちとなっていることを表していると言える。
【０１２７】  また、これらの主キーについての管理データは、この具体例において、図１４に示すように、ノードＴ１〜Ｔ３に分散されて保持される。どの管理データがどのノードＴに保持されるかについては、前述のように、ノードＰ１の管理データ振分情報に基づいて決定される。
【０１２８】  以上のように構成された具体例１における分散処理システム１の動作について説明する。
【０１２９】  まず、ノードＰ１において、アプリケーション部２１は、上述のトランザクション１を生成する（図４のステップＳ１）。
【０１３０】  このとき、このトランザクション１のトランザクションキーは、請求書番号“１０００８”である。そこで、トランザクション振分部２２は、このトランザクション１の振分先を、トランザクション振分情報を参照することにより特定する（ステップＳ２）。具体的には、トランザクション振分部２２は、請求書番号“１０００８”のハッシュ値を算出し、トランザクション振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードＴを特定すればよい。ここでは、ノードＴ１が特定されたとする。
【０１３１】  また、トランザクション１における１つ目の仮想表Ａへの挿入処理で一意性制約違反が発生し得る違反検出キーは、仮想表Ａにおける請求項番号、すなわち、“表Ａ＿１０００８”である。また、２つ目の仮想表Ｂへの挿入処理で一意性制約違反が発生し得る違反検出キーは、仮想表Ｂにおける注文番号、すなわち、“表Ｂ＿０００１０”である。
【０１３２】  そこで、管理データ振分部２３は、違反検出キー“表Ａ＿１０００８”に関わる管理データの振分先を、管理データ振分情報を参照することにより特定する。具体的には、管理データ振分部２３は、“表Ａ＿１０００８”のハッシュ値を算出し、管理データ振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードＴを特定すればよい。ここでは、ノードＴ２が特定されたとする。同様に、管理データ振分部２３は、違反検出キー“表Ｂ＿０００１０”に対応する管理データの振分先を、管理データ振分情報を参照することにより特定する。ここでは、ノードＴ３であったとする（ステップＳ３）。
【０１３３】  次に、トランザクション振分部２２は、このトランザクション１の振分先のノードＴ１に対して、トランザクション１の処理を要求する。また、管理データ振分部２３は、ノードＴ１に対して、違反検出キー“表Ａ＿１０００８”についての管理データの振分先としてノードＴ２を通知する。また、管理データ振分部２３は、ノードＴ１に対して、違反検出キー“表Ｂ＿０００１０”についての管理データの振分先としてノードＴ３を通知する（ステップＳ４）。
【０１３４】  次に、トランザクション１の処理を要求されたノードＴ１は、次のように動作する。ノードＴ１のトランザクション処理部３２は、１つ目の違反検出キー“表Ａ＿１０００８”についての管理データを、その振分先として通知されたノードＴ２の管理データ分散保持部３１に保持させることを試みる。
【０１３５】  ここでは、ノードＴ２の管理データ分散保持部３１に、“表Ａ＿１０００８”をキーとする他の管理データ（ＫＶペア）が保持されていなかったとする（図５のステップＳ１２でＮｏ）。
【０１３６】  この場合、ノードＴ１のトランザクション処理部３２は、ノードＴ２の管理データ分散保持部３１に、“表Ａ＿１０００８”をキーとして、トランザクションキー“１０００８”を含むデータを対応付けたＫＶペアを保持させる（ステップＳ１３）。
【０１３７】  ここで、“表Ａ＿１０００８”をキーとする管理データ（ＫＶペア）のＴ層での保持に成功することは、次のことを示している。すなわち、この保持の成功は、“表Ａ＿１０００８”をキーとする処理対象データ（ＫＶペア）がＳ層のデータ保持部１１（ＫＶＳ）への格納待ちとなったことを、後続のトランザクションに対して示している。また、この保持の成功は、直前までに、Ｓ層のデータ保持部１１（ＫＶＳ）への格納を待つ“表Ａ＿１０００８”をキーとする他の処理対象データ（ＫＶペア）が存在しなかったことを示している。
【０１３８】  次に、ノードＴ１のトランザクション処理部３２は、Ｓ層に、更新反映済の“表Ａ＿１０００８”をキーとする処理対象データ（ＫＶペア）が存在しないことを確認してもよい。これにより、ノードＴ１のトランザクション処理部３２は、一意性制約違反（主キーの重複）が発生しないことを確実にする。なお、この確認処理において、Ｓ層のどのノードが“表Ａ＿１０００８”をキーとする処理対象データを保持しているかは、データ振分情報を参照することにより特定可能である。
【０１３９】  次に、ノードＴ１のトランザクション処理部３２は、２つ目の違反検出キー“表Ｂ＿０００１０”についても、上述と同様にステップＳ１２〜Ｓ１３を実行する。
【０１４０】  すなわち、トランザクション処理部３２は、２つ目の違反検出キー“表Ｂ＿０００１０”についての管理データを、その振分先として通知されたノードＴ３に保持させることを試みる。
【０１４１】  ここでは、ノードＴ３の管理データ分散保持部３１に、“表Ｂ＿０００１０”をキーとする他の管理データ（ＫＶペア）が保持されていなかったとする（ステップＳ１２でＮｏ）。
【０１４２】  この場合、ノードＴ１のトランザクション処理部３２は、ノードＴ３の管理データ分散保持部３１に、“表Ｂ＿０００１０”をキーとして、トランザクションキー“１０００８”を含むデータを対応付けたＫＶペアを保持させる（ステップＳ１３）。
【０１４３】  前述のように、“表Ｂ＿０００１０”をキーとする管理データ（ＫＶペア）のＴ層での保持に成功することは、次のことを示している。すなわち、この保持の成功は、“表Ｂ＿０００１０”をキーとする処理対象データ（ＫＶペア）がＳ層のデータ保持部１１（ＫＶＳ）への格納待ちとなったことを、後続のトランザクションに対して示している。また、この保持の成功は、直前までに、Ｓ層のデータ保持部１１（ＫＶＳ）への格納を待つ“表Ｂ＿０００１０”をキーとする他の処理対象データ（ＫＶペア）が存在しなかったことを示している。
【０１４４】  次に、ノードＴ１のトランザクション処理部３２は、Ｓ層に、更新反映済の“表Ｂ＿０００１０”をキーとする処理対象データ（ＫＶペア）が存在しないことを確認してもよい。これにより、トランザクション処理部３２は、一意性制約違反（主キーの重複）が発生しないことを確実にする。なお、この確認処理において、Ｓ層のどのノードが“表Ｂ＿０００１０”をキーとする処理対象データを保持しているかは、データ振分情報を参照することにより特定可能である。
【０１４５】  このようにして、ノードＴ１は、トランザクション１において一意性制約違反が発生し得る違反検出キー“表Ａ＿１０００８”および“表Ｂ＿０００１０”について、Ｔ層での管理データの保持に成功した。これにより、トランザクション1によって主キーの重複が発生しないことが確認されたことになる。
【０１４６】  そこで、ノードＴ１のトランザクション処理部３２は、トランザクション１のＷＡＬを、自装置のトランザクションログ保持部３３に先行記録する（ステップＳ１５）。
【０１４７】  そして、トランザクション処理部３２は、トランザクション１の完了を、ノードＰ１に通知する（ステップＳ１６）。
【０１４８】  以上で、トランザクション１の処理が完了する。なお、トランザクション処理部３２は、トランザクションにおける各違反検出キーについての管理データの保持を確認する順序について、あらかじめ定められた所定のルールにしたがって行えばよい。例えば、トランザクション処理部３２は、違反検出キーを文字列として評価し、その昇順で管理データの保持の確認処理を行ってもよい。
【０１４９】  上記のトランザクション１の処理とは非同期に、ノードＴ１の遅延反映部３４は、次のように、トランザクションログ保持部３３に記録されたトランザクション１のＷＡＬの反映を行う。
【０１５０】  まず、遅延反映部３４は、トランザクション１のＷＡＬが示す１つ目の処理における違反検出キー“表Ａ＿１０００８”に基づいて、処理対象データの振分先のノードＳを、データ振分情報を参照することにより特定する（図６のステップＳ３１）。具体的には、遅延反映部３４は、“表Ａ＿１０００８”のハッシュ値を算出する。そして、遅延反映部３４は、データ振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードＳを特定すればよい。ここでは、ノードＳ２であったとする。
【０１５１】  次に、遅延反映部３４は、ノードＳ２に対して、仮想表Ａへの挿入処理の反映情報を送信する（ステップＳ３２）。
【０１５２】  次に、ノードＳ２のデータ反映部１２は、反映情報に基づいて、データ保持部１１に、“表Ａ＿１０００８”をキーとする処理対象データ（ＫＶペア）を挿入する（図７のステップＳ４２）。
【０１５３】  次に、データ反映部１２は、反映した処理対象データにおける違反検出キー“表Ａ＿１０００８”についての管理データの振分先を、ノードＰ１に照会することにより特定する（ステップＳ４３）。ここでは、ノードＴ２が特定される。
【０１５４】  次に、データ反映部１２は、ノードＴ２に対して、違反検出キー“表Ａ＿１０００８”に対応付けられた管理データの削除を要求する（ステップＳ４４）。
【０１５５】  これにより、ノードＴ２の管理データ分散保持部３１は、違反検出キー“表Ａ＿１０００８”をキーとする管理データ（ＫＶペア）を削除する。
【０１５６】  同様に、ノードＴ１の遅延反映部３４は、トランザクション１のＷＡＬが示す２つ目の挿入処理についても、その処理対象データの振分先として、例えばノードＳ１を特定し、反映情報を送信する。そして、反映情報を受信したノードＳ１は、上記と略同様に動作して、データ保持部１１に、“表Ｂ＿０００１０”をキーとする処理対象データを挿入する。そして、ノードＳ１からの要求により、ノードＴ３は、管理データ分散保持部３１から、違反検出キー“表Ｂ＿０００１０”をキーとする管理データ（ＫＶペア）を削除する。
【０１５７】  以上で、トランザクション１のＷＡＬのＳ層への反映が終了する。
【０１５８】  ここで、ノードＴ１におけるトランザクション１の処理に並行して、ノードＰ１がトランザクション２を生成し、ノードＴ２に対してその処理を要求したことを想定する。トランザクション２において、一意性違反が発生し得る違反検出キーは、トランザクション１と同様に、“表Ａ＿１０００８”および“表Ｂ＿０００１０”である。上述と同様に、違反検出キー“表Ａ＿１０００８”の管理データの振分先はノードＴ２となり、違反検出キー“表Ｂ＿０００１０”の管理データの振分先はノードＴ３となる。
【０１５９】  この場合、ノードＴ２の管理データ分散保持部３１には、上述のトランザクション１の処理により既に違反検出キー“表Ａ＿１０００８”をキーする管理データ（ＫＶペア）が保持されている。したがって、ノードＴ２のトランザクション処理部３２は、違反検出キー“表Ａ＿１０００８”をキーとする管理データ（ＫＶペア）のＴ層での保持に失敗する。
【０１６０】  あるいは、トランザクション２の処理中に、上述のトランザクション１のＷＡＬの反映が非同期に進行しているとする。そのため、ノードＴ２の管理データ分散保持部３１から、トランザクション１による“表Ａ＿１０００８”をキーとする管理データ（ＫＶペア）が既に削除されていることも考えられる。この場合、ノードＴ２のトランザクション処理部３２は、違反検出キー“表Ａ＿１０００８”をキーとする管理データ（ＫＶペア）のＴ層での保持に成功する。
【０１６１】  しかしながら、トランザクション１のＷＡＬの反映がまだ完了していないとする。そのため、ノードＴ３の管理データ分散保持部３１には、トランザクション１に基づく“表Ｂ＿０００１０”をキーとする管理データ（ＫＶペア）が、依然として保持されていたとする。この場合、ノードＴ２のトランザクション処理部３２は、違反検出キー“表Ｂ＿０００１０”をキーとする管理データ（ＫＶペア）のＴ層での保持に失敗する。
【０１６２】  このように、トランザクション２の処理を要求されたノードＴ２では、トランザクション処理部３２は、違反検出キーの管理データのＴ層での保持に失敗したとする（ステップＳ１２でＹｅｓ）。詳細には、トランザクション処理部３２は、違反検出キー“表Ａ＿１０００８”の管理データおよび違反検出キー“表Ｂ＿０００１０”の管理データの少なくともいずれかについて、Ｔ層での保持に失敗している。
【０１６３】  この場合、ノードＴ２のトランザクション処理部３２は、トランザクション２の処理を開始する前の状態に戻した上で（ステップＳ１７）、ノードＰ１に対してトランザクション２のエラーを通知する（ステップＳ１８）。例えば、“表Ａ＿１０００８”の管理データの保持には成功したが、“表Ｂ＿０００１０”の管理データの保持に失敗した場合について説明する。この場合、ノードＴ２のトランザクション処理部３２は、“表Ａ＿１０００８”の管理データの保持を取り消すことにより、元の状態に戻せばよい。
【０１６４】  以上で、トランザクション２の処理の説明を終了する。
【０１６５】  次に、この具体例１において、Ｔ層にノードＴ４が追加された場合の構成管理装置４０の動作について説明する。
【０１６６】  ここで、ノードＴ４が追加される前において、ノードＰ１の管理データ振分部２３に保持される管理データ振分情報（ＫＶＳ）の一例を、図１５の表ａに示す。
【０１６７】  まず、構成管理装置４０の振分情報更新部４１は、ノードＴ４が新たに追加されたので、ノードＰ１のトランザクション振分情報および管理データ振分情報の更新内容を決定する（ステップＳ６５）。
【０１６８】  ここでは、管理データ振分情報については、図１５の表ａに示した管理データ振分情報（ＫＶＳ）が、図１５の表ｂに示すように更新されることが決定されたものとする。具体的には、既存のノードＴ１〜Ｔ３に振り分けられていたハッシュレンジの一部が、新たなノードＴ４に振り分けられることが決定されている。
【０１６９】  そこで、振分情報更新部４１は、既存のノードＴ１〜Ｔ３に対して、それぞれの管理データ分散保持部３１における管理データの移動を制御する（ステップＳ６６）。詳細には、ノードＴ１〜Ｔ３は、振分情報更新部４１の制御の下、各管理データ分散保持部３１において、新たにノードＴ４に振り分けられることになったハッシュレンジに含まれるキーのＫＶペア（管理データ）をノードＴ４に移動する。
【０１７０】  移動が完了すると、振分情報更新部４１は、ノードＰ１の管理データ振分情報を、図１５の表ｂに示すように更新する。また、振分情報更新部４１は、ノードＰ１のトランザクション振分情報を更新する（ステップＳ６７）。なお、前述したように、振分情報更新部４１は、ステップＳ６６およびＳ６７を不可分な処理として実行する。
【０１７１】  以上で、構成管理装置４０は、構成管理動作を終了する。
【０１７２】  （本発明の実施の形態の具体例２）  次に、本実施の形態について２つ目の具体例（具体例２）を示す。この具体例２では、トランザクション間で一意性制約違反が発生し得る違反検出キーとして、仮想表における主キーに加えて、仮想表におけるユニークキーが適用される例について説明する。具体例２の構成を模式的に図１６に示す。図１６において、この分散処理システム１は、上述の具体例１と同様に、Ｐ層に１つのノードＰ１と、Ｔ層に３つのノードＴ１〜Ｔ３と、Ｓ層に２つのノードＳ１〜Ｓ２と、構成管理装置４０とを備える。なお、図１６では、構成管理装置４０の図示を省略している。
【０１７３】  ノードＰ１の管理データ振分情報は、前述の具体例１における「仮想表の主キーに関する管理データ振分情報」に加えて、「仮想表のユニークキーに関する管理データ振分情報」を記憶する。
【０１７４】  ノードＴ１〜Ｔ３の管理データ分散保持部３１は、前述の具体例１における「仮想表の主キーに関わる管理データ」に加えて、「仮想表のユニークキーに関わる管理データ」を記憶する。
【０１７５】  また、この具体例２では、処理対象データは、施設の予約に関する仮想表Ｃ、仮想表Ｄおよび仮想表Ｅを表すＫＶＳであることを想定する。図１７に、仮想表Ｃ、仮想表Ｄおよび仮想表Ｅを示す。また、図１８に、これらの仮想表の実体としてのＫＶＳを示す。仮想表Ｃでは、主キーとして“予約番号”の列が設定されている。また、仮想表Ｄでは、主キーとして“利用者コード”が設定されている。また、仮想表Ｅでは、主キーとして“施設コード”が設定されている。ここで、「利用者毎に一度だけ、他人と異なる施設を予約できる」と規定されるとき、仮想表Ｄの「施設コード」はユニーク制約を受ける。
【０１７６】  なお、図１８のＫＶＳでは、仮想表Ｃに対応するＫＶペアに、主キーではない“施設コード”の指定によりアクセスできるよう、“索引_表Ｃ_”から始まるキーに対応付けて、該当するＫＶペアへのインデックスが保持されている。同様に、仮想表Ｄに対応するＫＶペアに、主キーではない“施設コード”の指定によりアクセスできるよう、“索引_表Ｄ_”から始まるキーに対応付けて、該当するＫＶペアへのインデックスが保持されている。
【０１７７】  また、図１８に示した処理対象データ（ＫＶＳ）の各ＫＶペアは、具体例１の場合と同様に、キーによって一意に特定されるノードＳ１またはＳ２に分散保持される。
【０１７８】  また、この具体例２では、トランザクション処理の単位が、「各仮想表において“施設コード”列が同じ値毎」と規定されているとする。この場合、“施設コード”列が、トランザクションキーとなる。以降、“施設コード”で識別されるトランザクション処理単位を、“トランザクションクラス２”と呼ぶとする。このとき、“トランザクションクラス２”が、Ｐ層において以下のように定義されているものとする。・「トランザクションクラス２」は、仮想表Ｃの“施設コード”列から生成される。・「トランザクションクラス２」は、仮想表Ｄの“施設コード”列から生成される。
【０１７９】  ここで、トランザクションキーを施設コード“Ｓ２００４”とする以下２つのトランザクションが、同時に実行されようとしている場合を考える。＜トランザクション３＞・仮想表Ｄの「利用者コード：００００３、利用者名：田中」の行の施設コードをＳ２００４に更新・仮想表Ｃに、「予約番号：０６１９０９３００１、予約日：２０１３／０６／１９、施設コード：Ｓ２００４」を挿入＜トランザクション４＞・仮想表Ｄの「利用者コード：００００７、利用者名：山崎」の行の施設コードをＳ２００４に更新・仮想表Ｃに、「予約番号：０６１９０９３００１、予約日：２０１３／０６／１９、施設コード：Ｓ２００４」を挿入  この場合、ノードＰ１のトランザクション振分部２２は、トランザクション振分情報として、トランザクションキーから算出されるハッシュ値の範囲に、その振分先のノードＴが対応付けられた情報を保持する。
【０１８０】  また、前述の具体例１と同様に、ノードＴの遅延反映部３４は、「仮想表名＋主キーの値」から算出されるハッシュ値の範囲に、その振分先となるノードＳが対応付けられた情報を保持する。なお、ここでは、ノードＴ１〜Ｔ３には、同一のデータ振分情報が保持されるものとする。
【０１８１】  このとき、Ｔ層における各トランザクションの振分先は、ノードＰ１における「トランザクション振分情報に基づいて、トランザクションキーである施設コード“Ｓ２００４”から一意に決定される。また、処理対象データとしてのＫＶＳの各行（ＫＶペア）のＳ層における振分先は、ノードＴにおけるデータ振分情報に基づいて、「仮想表名＋主キー」から一意に決定される。
【０１８２】  また、このとき、前述の具体例１と同様に、Ｔ層におけるトランザクション処理（ＷＡＬの記録）と、Ｓ層におけるＷＡＬの反映とは、非同期に行われる。そのため、トランザクション３およびトランザクション４が実行されることにより、仮想表Ｄにおいてユニークキー制約違反（“施設コード”の重複）が発生する可能性がある。また、仮想表Ｃにおいて主キー制約違反（“予約番号”の重複）が発生する可能性がある。
【０１８３】  そこで、この具体例２では、「仮想表Ｃ＋主キーの値」と、「仮想表Ｄ＋ユニークキーの値」とが、一意性制約違反の発生し得る違反検出キーとなる。そこで、ノードＰ１の管理データ振分部２３は、主キーに関わる管理データ振分情報と、ユニークキーに関わる管理データ振分情報とを記憶しておく。主キーに関わる管理データ振分情報は、「仮想表名＋主キーの値」から算出されるハッシュ値の範囲に、管理データの振分先となるノードＴが対応付けられた情報となる。また、ユニークキーに関わる管理データ振分情報は、「仮想表名＋ユニークキーの値」から算出されるハッシュ値の範囲に、管理データの振分先となるノードＴが対応付けられた情報となる。これにより、主キーに関する管理データおよびユニークキーに関する管理データのそれぞれの振分先となるノードＴは、ノードＰ１におけるそれぞれの管理データ振分情報に基づいて、一意に決定される。
【０１８４】  また、この具体例２において、ノードＴの管理データ分散保持部３１に分散保持される管理データのうち、ユニークキーに関する管理データを、図１９に示す。なお、図１９の左図は、管理データ分散保持部３１に保持される情報を表形式で示しているが、右図のように、その実体は、ＫＶＳである。図１９の左図において、各行が示す管理データは、「仮想表名」および「ユニークキーの値」に対して、「トランザクションキー」が対応付けられた情報となっている。つまり、図１９の右図において、各行が示す管理データのＫＶペアは、「仮想表名＋ユニークキーの値」をキーとして、「仮想表名、ユニークキー、トランザクションキー」を表すデータが対応付けられた情報である。この場合、「仮想表名＋ユニークキーの値」をキーとする管理データのＫＶペアは、その「仮想表名＋ユニークキーの値」から特定される処理対象データのＫＶペアが、ノードＳへの格納待ちとなっていることを表している。
【０１８５】  以上のように構成された具体例２における分散処理システム１の動作について説明する。
【０１８６】  まず、ノードＰ１において、アプリケーション部２１は、上述のトランザクション３を生成する（図４のステップＳ１）。
【０１８７】  このとき、このトランザクション３のトランザクションキーは、施設コード“Ｓ２００４”である。そこで、トランザクション振分部２２は、このトランザクション３の振分先を、トランザクション振分情報を参照することにより特定する（ステップＳ２）。具体的には、トランザクション振分部２２は、施設コード“Ｓ２００４”のハッシュ値を算出する。そして、トランザクション振分部２２は、トランザクション振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードＴを特定すればよい。ここでは、ノードＴ１が特定されたとする。
【０１８８】  また、トランザクション３における１つ目の仮想表Ｄの更新処理で一意性制約違反が発生し得る違反検出キーは、仮想表Ｄにおける施設コード、すなわち、“表Ｄ＿Ｓ２００４”である。また、２つ目の仮想表Ｃへの挿入処理で一意性制約違反が発生し得る違反検出キーは、仮想表Ｃにおける予約番号、すなわち、“表Ｃ＿０６１９０９３００１”である。
【０１８９】  そこで、管理データ振分部２３は、ユニークキーを含む違反検出キーである“表Ｄ＿Ｓ２００４”に関わる管理データの振分先を、ユニークキーに関わる管理データ振分情報を参照することにより特定する。具体的には、管理データ振分部２３は、“表Ｄ＿Ｓ２００４”のハッシュ値を算出する。そして、管理データ振分部２３は、ユニークキーに関わる管理データ振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードＴを特定すればよい。ここでは、ノードＴ２が特定されたとする。同様に、管理データ振分部２３は、主キーを含む違反検出キー“表Ｃ＿０６１９０９３００１”に関わる管理データの振分先を、主キーに関わる管理データ振分情報を参照することにより特定する。具体的には、管理データ振分部２３は、“表Ｃ＿０６１９０９３００１”のハッシュ値を算出する。そして、管理データ振分部２３は、主キーに関わる管理データ振分情報において、算出したハッシュ値を含む範囲に対応付けられたノードＴを特定すればよい。ここでは、ノードＴ３が特定されたとする（ステップＳ３）。
【０１９０】  次に、トランザクション振分部２２は、このトランザクション３の振分先のノードＴ１に対して、トランザクション３の処理を要求する。また、管理データ振分部２３は、ノードＴ１に対して、ユニークキーを含む違反検出キー“表Ｄ＿Ｓ２００４”についての管理データの振分先としてノードＴ２を通知する。また、管理データ振分部２３は、ノードＴ１に対して、主キーを含む違反検出キー“表Ｃ＿０６１９０９３００１”についての管理データの振分先としてノードＴ３を通知する（ステップＳ４）。
【０１９１】  次に、トランザクション３の処理を要求されたノードＴ１は、次のように動作する。ノードＴ１のトランザクション処理部３２は、１つ目の、ユニークキーを含む違反検出キー“表Ｄ＿Ｓ２００４”についての管理データを、その振分先として通知されたノードＴ２の管理データ分散保持部３１に保持させることを試みる。
【０１９２】  ここでは、ノードＴ２の管理データ分散保持部３１に、“表Ｄ＿Ｓ２００４”をキーとする他の管理データ（ＫＶペア）が保持されていなかったとする（図５のステップＳ１２でＮｏ）。
【０１９３】  この場合、ノードＴ１のトランザクション処理部３２は、ノードＴ２の管理データ分散保持部３１に、“表Ｄ＿Ｓ２００４”をキーとして、トランザクションキー“Ｓ２００４”を含むデータを対応付けたＫＶペアを保持させる（ステップＳ１３）。
【０１９４】  ここで、“表Ｄ＿Ｓ２００４”をキーとする管理データ（ＫＶペア）のＴ層での保持に成功することは、次のことを示している。すなわち、この保持の成功は、“表Ｄ＿Ｓ２００４”に関わる処理対象データがＳ層のデータ保持部１１（ＫＶＳ）への格納待ちとなったことを、後続のトランザクションに対して示している。また、この保持の成功は、直前までに、Ｓ層のデータ保持部１１（ＫＶＳ）への格納を待つ“表Ｄ＿Ｓ２００４”に関わる処理対象データが存在しなかったことを示している。
【０１９５】  次に、ノードＴ１のトランザクション処理部３２は、Ｓ層に、更新反映済の“表Ｄ＿Ｓ２００４”に関わる処理対象データ（ＫＶペア）が存在しないことを確認してもよい。これにより、トランザクション処理部３２は、一意性制約違反（ユニークキーの重複）が発生しないことを確実にする。なお、この確認処理において、Ｓ層のどのノードが“表Ｄ＿Ｓ２００４”に関わる処理対象データを保持しているかは、データ振分情報を参照することにより特定可能である。
【０１９６】  次に、トランザクション処理部３２は、２つ目の、主キーを含む違反検出キー“表Ｃ＿０６１９０９３００”についても、上述と同様にステップＳ１２〜Ｓ１３を実行する。
【０１９７】  すなわち、トランザクション処理部３２は、２つ目の、主キーを含む違反検出キー“表Ｃ＿０６１９０９３００”についての管理データを、その振分先として通知されたノードＴ３に保持させることを試みる。
【０１９８】  ここでは、ノードＴ３の管理データ分散保持部３１に、“表Ｃ＿０６１９０９３００”をキーとする他の管理データ（ＫＶペア）が保持されていなかったとする（ステップＳ１２でＮｏ）。
【０１９９】  この場合、ノードＴ１のトランザクション処理部３２は、ノードＴ３の管理データ分散保持部３１に、“表Ｃ＿０６１９０９３００”をキーとして、トランザクションキー“Ｓ２００４”を含むデータを対応付けたＫＶペアを保持させる（ステップＳ１３）。
【０２００】  前述のように、“表Ｃ＿０６１９０９３００”をキーとする管理データ（ＫＶペア）のＴ層での保持に成功することは、次のことを示している。すなわち、この保持の成功は、“表Ｃ＿０６１９０９３００”をキーとする処理対象データ（ＫＶペア）がＳ層のデータ保持部１１（ＫＶＳ）への格納待ちとなったことを、後続のトランザクションに対して示している。また、この保持の成功は、直前までに、Ｓ層のデータ保持部１１（ＫＶＳ）への格納を待つ“表Ｃ＿０６１９０９３００”をキーとする処理対象データ（ＫＶペア）が存在しなかったことを示している。
【０２０１】  次に、ノードＴ１のトランザクション処理部３２は、Ｓ層に、更新反映済の“表Ｃ＿０６１９０９３００”をキーとする処理対象データ（ＫＶペア）が存在しないことを確認してもよい。これにより、トランザクション処理部３２は、一意性制約違反（主キーの重複）が発生していないことを確実にする。なお、この確認処理において、Ｓ層のどのノードが“表Ｃ＿０６１９０９３００”をキーとする処理対象データを保持しているかは、データ振分情報を参照することにより特定可能である。
【０２０２】  このようにして、ノードＴ１は、トランザクション３において、ユニークキーを含む違反検出キー“表Ｄ＿Ｓ２００４”および主キーを含む違反検出キー“表Ｃ＿０６１９０９３００”について、Ｔ層での管理データの保持に成功した。これにより、トランザクション３によってユニークキーの重複および主キーの重複が発生しないことが確認されたことになる。
【０２０３】  そこで、ノードＴ１のトランザクション処理部３２は、トランザクション３のＷＡＬを、自装置のトランザクションログ保持部３３に記録する（ステップＳ１５）。
【０２０４】  そして、トランザクション処理部３２は、トランザクション３の完了を、ノードＰ１に通知する。
【０２０５】  以上で、トランザクション３の処理が完了する。
【０２０６】  また、上記のトランザクション３の処理とは非同期に、ノードＴ１の遅延反映部３４は、次のように、トランザクションログ保持部３３に記録されたトランザクション３のＷＡＬの反映を行う。
【０２０７】  まず、遅延反映部３４は、トランザクション３のＷＡＬが示す１つ目の処理における違反検出キー“表Ｄ＿Ｓ２００４”に基づいて、処理対象データの振分先を特定する（図６のステップＳ３１）。詳細には、遅延反映部３４は、データ振分情報を参照することにより、“索引＿表Ｄ＿施設コード＿Ｓ２００４”に対応するノードＳを特定する。ここでは、ノードＳ２であったとする。
【０２０８】  次に、遅延反映部３４は、ノードＳ２に対して、１つ目の仮想表Ｄの更新処理の反映情報を送信する（ステップＳ３２）。
【０２０９】  次に、ノードＳ２のデータ反映部１２は、反映情報に基づいて、データ保持部１１において、“索引＿表Ｄ＿施設コード＿Ｓ２００４”をキーとする索引情報のＫＶペアと、“表Ｄ＿０００３”をキーとするＫＶペアとを更新する（図７のステップＳ４２）。
【０２１０】  次に、データ反映部１２は、反映した処理対象データにおけるユニークキーを含む違反検出キー“表Ｄ＿Ｓ２００４”について、その管理データの振分先のノードＴを、ノードＰ１に照会することにより特定する（ステップＳ４３）。ここでは、ノードＴ２が特定される。
【０２１１】  次に、データ反映部１２は、ノードＴ２に対して、違反検出キー“表Ｄ＿Ｓ２００４”についての管理データの削除を要求する（ステップＳ４４）。
【０２１２】  これにより、ノードＴ２の管理データ分散保持部３１は、“表Ｄ＿Ｓ２００４”をキーとする管理データ（ＫＶペア）を削除する。
【０２１３】  同様に、ノードＴ１の遅延反映部３４は、トランザクション３のＷＡＬが示す２つ目の挿入処理についても、その処理対象データの振分先として、例えばノードＳ１を特定し、挿入処理の反映情報を送信する。そして、反映情報を受信したノードＳ１は、上記と略同様に動作して、データ保持部１１に、“表Ｃ＿０６１９０９３００”をキーとする処理対象データを挿入する。そして、ノードＳ１からの要求により、ノードＴ３は、管理データ分散保持部３１から、違反検出キー“表Ｃ＿０６１９０９３００”をキーとする管理データ（ＫＶペア）を削除する。
【０２１４】  以上で、トランザクション３のＷＡＬのＳ層への反映が終了する。
【０２１５】  ここで、ノードＴ１におけるトランザクション処理に並行して、ノードＰ１がトランザクション４を生成し、ノードＴ２に対してその処理を要求したことを想定する。トランザクション４において、一意性違反が発生し得る違反検出キーは、トランザクション３と同様に、ユニークキーを含む“表Ｄ＿Ｓ２００４”および主キーを含む“表Ｃ＿０６１９０９３００”となる。上述と同様に、ユニークキーを含む“表Ｄ＿Ｓ２００４”の管理データの振分先はＴ２となり、主キーを含む“表Ｃ＿０６１９０９３００”の管理データの振分先はノードＴ３となる。
【０２１６】  この場合、ノードＴ２の管理データ分散保持部３１には、上述のトランザクション３の処理により既に“表Ｄ＿Ｓ２００４”をキーとする管理データ（ＫＶペア）が保持されている。したがって、ノードＴ２のトランザクション処理部３２は、“表Ｄ＿Ｓ２００４”をキーとする管理データ（ＫＶペア）のＴ層での保持に失敗する。
【０２１７】  あるいは、トランザクション４の処理中に、上述のトランザクション３のＷＡＬの反映が非同期に進行しているとする。そして、ノードＴ２の管理データ分散保持部３１から、トランザクション３による“表Ｄ＿Ｓ２００４”をキーとする管理データ（ＫＶペア）が既に削除されていることも考えられる。この場合、ノードＴ２のトランザクション処理部３２は、“表Ｄ＿Ｓ２００４”をキーとする管理データ（ＫＶペア）のＴ層での保持に成功する。
【０２１８】  しかしながら、トランザクション３のＷＡＬの反映が完了していないとする。そして、ノードＴ３の管理データ分散保持部３１には、トランザクション３による“表Ｃ＿０６１９０９３００”をキーとする管理データ（ＫＶペア）が依然として保持されていたとする。この場合、ノードＴ２のトランザクション処理部３２は、“表Ｃ＿０６１９０９３００”をキーとする管理データ（ＫＶペア）のＴ層での保持に失敗する。
【０２１９】  このように、トランザクション４の処理を要求されたノードＴ２のトランザクション処理部３２は、違反検出キーの管理データのＴ層での保持に失敗したとする（ステップＳ１２でＹｅｓ）。詳細には、トランザクション処理部３２は、違反検出キー“表Ｄ＿Ｓ２００４”の管理データおよび違反検出キー“表Ｃ＿０６１９０９３００”の管理データの少なくともいずれかの保持に失敗している。
【０２２０】  この場合、ノードＴ２のトランザクション処理部３２は、トランザクション４の処理を開始する前の状態に戻した上で（ステップＳ１７）、ノードＰ１に対してトランザクション４のエラーを通知する（ステップＳ１８）。例えば、“表Ｄ＿Ｓ２００４”の管理データの保持には成功したが、“表Ｃ＿０６１９０９３００”の管理データの保持には失敗した場合について説明する。この場合、ノードＴ２のトランザクション処理部３２は、“表Ｄ＿Ｓ２００４”の管理データの保持を取り消すことにより、元の状態に戻せばよい。
【０２２１】  以上で、ノードＴ２によるトランザクション４の処理の説明を終了する。
【０２２２】  なお、ノードＴ４追加時の構成管理装置４０の動作については、前述の具体例１と略同様である。ただし、ステップＳ６５において、振分情報更新部４１は、トランザクション振分情報および主キーに基づく管理データ振分情報の更新内容に加えて、ユニークキーに基づく管理データ振分情報の更新内容を決定する。また、ステップＳ６６において、振分情報更新部４１は、ノードＴ１〜Ｔ３間における主キーに関する管理データの移動の制御に加えて、ユニークキーに関する管理データの移動を制御する。また、ステップＳ６７において、振分情報更新部４１は、ノードＰ１のトランザクション振分情報および主キーに基づく管理データ振分情報の更新に加えて、ユニークキーに基づく管理データ振分情報を更新する。
【０２２３】  以上で、具体例２の説明を終了する。
【０２２４】  次に、本発明の実施の形態の効果について述べる。
【０２２５】  本発明の実施の形態としての分散処理システムは、トランザクションログの記録と実際のデータ反映とが非同期に行われる分散処理システムにおいて、次の効果を奏する。すなわち、本発明の実施の形態としての分散処理システムは、トランザクションを複数の処理単位で分散実行する際に、スケーラビリティ低下を抑制しつつ、処理単位を跨る一意性に関する制約違反をより確実に検出することができる。
【０２２６】  その理由は、トランザクション分散処理装置の各装置が、次のように動作するよう構成されるからである。すなわち、管理データ分散保持部が、トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、違反検出キーに対応付けて保持する。また、管理データ分散保持部が、このような管理データを、トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間保持する。そして、トランザクション処理部が、要求されたトランザクションを処理する際に、そのトランザクションにおける違反検出キーについて、その管理データの振分先への保持を試みる。そして、トランザクション処理部が、その管理データが振分先のトランザクション分散処理装置の管理データ分散保持部に保持されていない場合に、これを保持させる。そして、管理データの振分先への保持が成功した場合に、トランザクション処理部が、トランザクションログを記録することによりトランザクション処理を完了する。そして、遅延反映部が、トランザクション処理とは非同期に、トランザクションログをデータ保持装置の処理対象データに反映させる。
【０２２７】  これにより、本実施の形態は、トランザクション処理に遅延して非同期に処理対象データへの反映が行われる場合であっても、処理対象データへの反映を待たずに、トランザクション処理時点で、一意性制約違反を確実に検出することができる。また、本実施の形態は、そのような一意性制約違反を確実に検出するための管理データを、トランザクションの定義情報に基づいて生成し、処理対象データの永続化時点で削除する。このため、本実施の形態は、特別なユーザ操作を必要としない。また、本実施の形態は、そのような一意性制約違反を確実に検出するための管理データを１つ以上のトランザクション分散処理装置に分散保持する。このため、本実施の形態は、１つの装置がそのような一意性制約違反を集中管理する場合に比べて、負荷が一装置に集中せず、分散処理システムのスケーラビリティを損なわない。また、本実施の形態は、分散処理システムを構成する各装置の追加または削除などの構成変更に応じて、そのような一意性制約違反を確実に検出するための管理データの分散保持先を更新する。このため、本実施の形態は、スケールアウトが容易である。
【０２２８】  なお、本実施の形態において、トランザクション振分情報、管理データ振分情報、および、データ振分情報は、キーの値から算出されるハッシュ値の範囲に対して振分先の装置が定められた情報であるものとして説明した。この他、各振分情報は、キーの値に基づいて振分先が一意に特定可能なものであれば、その他の情報であってもよい。
【０２２９】  また、本実施の形態において、アプリケーション装置が、トランザクションの振分先のトランザクション分散処理装置に対して、管理データの振分先を通知する例について説明した。この他、トランザクション処理が振り分けられたトランザクション分散処理装置が、アプリケーション装置に照会することにより該当する管理データの振分先を得るように構成してもよい。
【０２３０】  また、本実施の形態において、トランザクションログの反映を行ったデータ保持装置が、アプリケーション装置に照会することにより該当する管理データの振分先を得る例について説明した。この他、トランザクションログの反映を要求したトランザクション分散処理装置が、反映の振分先のデータ保持装置に対して、該当する管理データが振り分けられている装置を通知するように構成してもよい。この場合、データ保持装置は、トランザクションログの反映を要求したトランザクション分散処理装置との通信コネクションを、データ反映が終了するまで維持しておけばよい。これにより、データ保持装置は、データ反映後に管理データの振分先を特定する必要がなくなり、通信コストが低減される。
【０２３１】  また、本実施の形態において、処理対象データが、複数のデータ保持装置に分散保持される例を中心に説明したが、本発明における処理対象データは、かならずしも複数の装置に分散保持されるものでなくてもよい。その場合、本実施の形態におけるトランザクション分散処理装置の遅延反映部は、必ずしもデータ振分情報を記憶していなくてもよい。
【０２３２】  また、本実施の形態において、処理対象データが仮想表を表すＫＶＳである例を中心に説明したが、本発明は、処理対象データに対するトランザクションを分散処理する各種のシステムに適用可能である。
【０２３３】  その他、本発明は、上述した実施の形態に限定されず、トランザクション処理と処理対象データへの反映とを非同期に行う各種の分散処理システムに適用可能である。
【０２３４】  また、上述した本発明の各実施の形態において、データ保持装置、トランザクション分散処理装置、アプリケーション装置、および、構成管理装置の各機能ブロックが、記憶装置またはＲＯＭに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０２３５】  また、上述した本発明の各実施の形態において、各装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【０２３６】  また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した各装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておいてもよい。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０２３７】  以上、上述した実施の形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施の形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【０２３８】  この出願は、２０１３年１２月２４日に出願された日本出願特願２０１３−２６５５１６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０２３９】  １    分散処理システム  １０    データ保持装置  １１    データ保持部  １２    データ反映部  ２０    アプリケーション装置  ２１    アプリケーション部  ２２    トランザクション振分部  ２３    管理データ振分部  ３０    トランザクション分散処理装置  ３１    管理データ分散保持部  ３２    トランザクション処理部  ３３    トランザクションログ保持部  ３４    遅延反映部  ４０    構成管理装置  ４１    振分情報更新部  １００１、２００１、３００１、４００１    ＣＰＵ  １００２、２００２、３００２、４００２    ＲＡＭ  １００３、２００３、３００３、４００３    ＲＯＭ  １００４、２００４、３００４、４００４    記憶装置  １００５、２００５、３００５、４００５    ネットワークインタフェース
【図１】
2015097991.tif 000003
【図２】
2015097991.tif 000004
【図３】
2015097991.tif 000005
【図４】
2015097991.tif 000006
【図５】
2015097991.tif 000007
【図６】
2015097991.tif 000008
【図７】
2015097991.tif 000009
【図８】
2015097991.tif 000010
【図９】
2015097991.tif 000011
【図１０】
2015097991.tif 000012
【図１１】
2015097991.tif 000013
【図１２】
2015097991.tif 000014
【図１３】
2015097991.tif 000015
【図１４】
2015097991.tif 000016
【図１５】
2015097991.tif 000017
【図１６】
2015097991.tif 000018
【図１７】
2015097991.tif 000019
【図１８】
2015097991.tif 000020
【図１９】
2015097991.tif 000021
【手続補正書】
【提出日】平成28年6月22日(2016.6.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段と、
自装置（トランザクション分散処理装置）に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他の前記トランザクション分散処理装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理手段と、
前記トランザクション処理手段による処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映手段と、
を備えたトランザクション分散処理装置。
【請求項２】
前記処理対象データが、仮想的な表（仮想表）の識別情報および前記仮想表における主キーの値からなる情報をキーとして該キーに対してデータが対応付けられた形式で表され、前記トランザクション間で前記仮想表における主キーまたはユニークキーについて一意性制約違反が発生し得るとき、
前記管理データ分散保持手段は、前記仮想表の識別情報と前記主キーの値または前記ユニークキーの値とからなる情報に対応付けて、前記管理データを保持することを特徴とする請求項１に記載のトランザクション分散処理装置。
【請求項３】
処理対象データに対するトランザクションを生成するアプリケーション手段と、
請求項１または請求項２に記載のトランザクション分散処理装置のうち、前記トランザクションの振分先となるトランザクション分散処理装置を特定するためのトランザクション振分情報を記憶しておき、前記アプリケーション手段によって生成されたトランザクションの処理を、前記トランザクション振分情報に基づいて特定されるトランザクション分散処理装置に要求するトランザクション振分手段と、
前記トランザクション分散処理装置のうち、前記管理データの振分先となる前記トランザクション分散処理装置を特定するための管理データ振分情報を記憶しておき、前記管理データ振分情報に基づいて特定されるトランザクション分散処理装置を、前記トランザクションの振分先となるトランザクション分散処理装置に対して通知する管理データ振分手段と、
を備えたアプリケーション装置。
【請求項４】
前記アプリケーション手段は、仮想的な表（仮想表）の識別情報および前記仮想表における主キーの値からなる情報をキーとして該キーに対してデータが対応付けられた形式で表された前記処理対象データに対して、前記トランザクションを生成し、
前記管理データ振分手段は、前記トランザクション間で前記仮想表における主キーまたはユニークキーについて一意性制約違反が発生し得るとき、前記仮想表の識別情報と前記主キーの値または前記ユニークキーの値とからなる情報に基づいて前記管理データの振分先となる前記トランザクション分散処理装置を特定するための前記管理データ振分情報を記憶しておくことを特徴とする請求項３に記載のアプリケーション装置。
【請求項５】
前記処理対象データを保持するデータ保持手段と、
請求項１又は請求項２に記載のトランザクション分散処理装置に保持される前記トランザクションログを、前記データ保持手段に対して反映させるデータ反映手段と、
を備えたデータ保持装置。
【請求項６】
前記データ保持手段は、仮想的な表（仮想表）の識別情報および前記仮想表における主キーの値からなる情報をキーとして該キーに対するデータの形式で、前記処理対象データを保持することを特徴とする請求項５に記載のデータ保持装置。
【請求項７】
請求項１または請求項２に記載のトランザクション分散処理装置の構成変更に応じて、請求項３または請求項４に記載のアプリケーション装置に保持される前記トランザクション振分情報および前記管理データ振分情報を更新する振分情報更新手段を備えた構成管理装置。
【請求項８】
請求項１または請求項２に記載のトランザクション分散処理装置と、
前記トランザクション分散処理装置に対してトランザクションの処理を要求する請求項３または請求項４に記載のアプリケーション装置と、
前記アプリケーション装置によって生成されるトランザクションの対象となる処理対象データを保持する請求項５または請求項６に記載のデータ保持装置と、
前記トランザクション分散処理装置、前記アプリケーション装置、および、前記データ保持装置の構成を管理する請求項７に記載の構成管理装置と、
を備えた分散処理システム。
【請求項９】
処理対象データに対するトランザクションを１つ以上のトランザクション分散処理装置に分散処理させる際に、
トランザクション間で一意性制約違反が発生し得る違反検出キーに対応付けた管理データを、前記違反検出キーに基づいて特定される前記トランザクション分散処理装置に振り分け、
前記管理データの振分先の前記トランザクション分散処理装置に、前記違反検出キーに対応付けられた他のトランザクションに基づく前記管理データが保持されていない場合に、前記処理対象データが前記トランザクションログの反映待ちである間、前記違反検出キーに対応付けて前記管理データを保持させてから、
前記トランザクションの振分先のトランザクション分散処理装置において前記トランザクションログを先行記録することによりトランザクション処理を完了し、
前記トランザクション処理とは非同期に、前記トランザクションログを前記処理対象データへ反映させる、分散処理方法。
【請求項１０】
トランザクション間で一意性制約違反が発生し得る違反検出キーに基づいて自装置に振り分けられた管理データを、前記トランザクションが対象とする処理対象データがトランザクションログの反映待ちである間、前記違反検出キーに対応付けて保持する管理データ分散保持手段を用いて、
自装置に処理が振り分けられたトランザクションを処理する際に、該トランザクションにおける前記違反検出キーに基づき特定される前記管理データの振分先となる自装置または他装置の前記管理データ分散保持手段に、該違反検出キーに対応付けられた他の管理データが保持されていない場合に、該トランザクションに関する前記管理データを、該振分先の前記管理データ分散保持手段に該違反検出キーに対応付けて保持させてから、該トランザクションの処理内容を表すトランザクションログをトランザクションログ保持手段に先行記録することにより、トランザクション処理を完了するトランザクション処理ステップと、
前記トランザクション処理とは非同期に、前記トランザクションログ保持手段に保持されたトランザクションログを、前記処理対象データに対して反映させる遅延反映ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【国際調査報告】
2015097991.tif 000022
2015097991.tif 000023