(57)【要約】【課題】楽観的排他に基づいてトランザクションの実行を制御するトランザクション処理システムでは、スケーラビリティを確保しつつ、特定のトランザクションを他のトランザクションより優先して処理することは困難であること。【解決手段】サーバ装置は、クライアント装置から受信したトランザクションが、優先クラスに属するか否かを判定し、優先クラスに属すると判定したトランザクションが使用するデータと同じ組のフラグの値を、優先クラスに属さないトランザクションによる更新を制限する値に設定する。その後、サーバ装置は、楽観的排他に基づいて、上記トランザクションの実行を制御する。【選択図】図１
2015118431.tif 000002
【特許請求の範囲】
【請求項１】
トランザクションを送信するクライアント装置と、
データとフラグとの組を記憶するデータ格納装置と、
前記クライアント装置と前記データ格納装置との間に接続されたサーバ装置と
を有し、
前記サーバ装置は、
前記クライアント装置から受信した前記トランザクションが、優先クラスに属するか否かを判定する優先判定手段と、
前記データ格納装置に格納された前記データのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定するフラグ処理手段と、
楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御するトランザクション実行部と
を有する
トランザクション処理システム。
【請求項２】
クライアント装置と、データとフラグとの組を記憶するデータ格納装置と、前記クライアント装置と前記データ格納装置との間に接続されたサーバ装置とを有するトランザクション処理システムが実行するトランザクション処理方法であって、
前記クライアント装置が、トランザクションを前記サーバ装置へ送信し、
前記サーバ装置が、前記クライアント装置から受信した前記トランザクションが、優先クラスに属するか否かを判定し、前記データ格納装置に格納された前記データのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定し、楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御する
トランザクション処理方法。
【請求項３】
トランザクションを送信するクライアント装置と、データとフラグとの組を記憶するデータ格納装置との間に接続されたサーバ装置であって、
前記クライアント装置から受信した前記トランザクションが、優先クラスに属するか否かを判定する優先判定手段と、
前記データ格納装置に格納された前記データのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定するフラグ処理手段と、
楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御するトランザクション実行部と
を有するサーバ装置。
【請求項４】
前記データ格納装置は、前記フラグの有効期限を記憶する
請求項３に記載のサーバ装置。
【請求項５】
前記フラグの有効期限は、前記優先クラスに属する前記トランザクションの実行所要時間に基づいて決定される
請求項４に記載のサーバ装置。
【請求項６】
前記フラグの値自体が前記フラグの有効期限を表す
請求項５に記載のサーバ装置。
【請求項７】
前記優先判定手段は、前記判定では、
前記優先クラスに属する旨の情報が前記クライアント装置から受信した前記トランザクションに付加されていること、
前記トランザクションのエラー回数が閾値の回数以上であること、
前記トランザクションの実行所要時間が閾値の時間以上であること、
前記トランザクションで使用する前記データが、前記サーバ装置に記憶された優先リストに記載されたデータに一致すること、
のうちの少なくとも１つに基づいて、前記トランザクションが前記優先クラスに属するか否かを判定する
請求項３乃至６の何れかに記載のサーバ装置。
【請求項８】
前記データは、前記データのバージョン情報を有し、
前記トランザクション実行部は、
前記優先クラスに属していない前記トランザクションについては、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであり、且つ、前記トランザクションが更新する前記データの前記フラグの値が前記優先クラスに属さない前記トランザクションによる更新を制限しない値であることを確認して、前記トランザクションが更新する前記データおよび前記バージョン情報を更新し、前記トランザクションのコミットを行い、
前記優先クラスに属する前記トランザクションについては、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであることを確認して、前記トランザクションのコミットを行う
請求項３乃至７の何れかに記載のトランザクション処理システム。
【請求項９】
トランザクションを送信するクライアント装置と、データとフラグとの組を記憶するデータ格納装置との間に接続されたサーバ装置が実行するトランザクション処理方法であって、
前記クライアント装置から受信した前記トランザクションが優先クラスに属するか否かを判定し、
前記データ格納装置に格納されたデータのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定し、
楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御する
トランザクション処理方法。
【請求項１０】
トランザクションを送信するクライアント装置と、データとフラグとの組を記憶するデータ格納装置との間に接続されたサーバ装置を構成するコンピュータを、
前記クライアント装置から受信した前記トランザクションが、優先クラスに属するか否かを判定する優先判定手段と、
前記データ格納装置に格納された前記データのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定するフラグ処理手段と、
楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御するトランザクション実行部と
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トランザクション処理システム、トランザクション処理方法、サーバ装置、サーバ装置におけるトランザクション処理方法およびプログラムに関する。
【背景技術】
【０００２】
トランザクション処理システムは、データの処理性能を向上させるために、データの一貫性を保証しつつ複数のトランザクションを並行して実行する。そのために、トランザクション処理システムは、排他制御技術を使用する。排他制御技術には、悲観的排他と楽観的排他とがある。
【０００３】
悲観的排他は、トランザクションの実行に先だって当該トランザクションで参照または更新する全てのデータを予め排他（ロック）することにより、データの一貫性を確保する。他方、楽観的排他は、トランザクションで参照または更新するデータには事前に排他（ロック）はかけない。その代わりに楽観的排他では、トランザクションの実行の最後にデータの一貫性が確保されているか否かを確認し、一貫性が確保されていればトランザクションをコミットし、そうでなければコミット失敗とする。悲観的排他では、排他を取得したトランザクションが終了するまで、同じデータを使用する他のトランザクションを実行できないため、スケーラビリティに欠ける。そのため、スケーラビリティを重視するトランザクション処理システムでは、楽観的排他が用いられている（例えば特許文献１参照）。
【０００４】
他方、トランザクション処理システムにおいて、特定のトランザクションを他のトランザクションより優先して処理することが本発明に関連する第１の関連技術として提案されている（例えば特許文献２参照）。より具体的には、上記第１の関連技術では、データの競合が発生する都度、トランザクション間で当該データの占有権を調整して、業務上最も優先すべきトランザクションに当該データの占有権を変更することにより、特定のトランザクションを他のトランザクションより優先して処理する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−４５３５６号公報
【特許文献２】特開平６−３３２７８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、トランザクション間でデータの占有権を調整することによって特定のトランザクションを他のトランザクションより優先する上記第１の関連技術では、占有権を調整するためにトランザクション間の通信が必要になるため、スケーラビリティを確保することが困難である。そのため、上記第１の関連技術を楽観的排他に基づくトランザクション処理システムに適用した場合、スケーラビリティが悪化する。
【０００７】
本発明の目的は、上述した課題、すなわち、楽観的排他に基づいてトランザクションの実行を制御するトランザクション処理システムでは、スケーラビリティを確保しつつ、特定のトランザクションを他のトランザクションより優先して処理することは困難である、という課題を解決するトランザクション処理システムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明の第１の観点に係るトランザクション処理システムは、
トランザクションを送信するクライアント装置と、
データとフラグとの組を記憶するデータ格納装置と、
上記クライアント装置と上記データ格納装置との間に接続されたサーバ装置と
を有し、
上記サーバ装置は、
上記クライアント装置から受信した上記トランザクションが、優先クラスに属するか否かを判定する優先判定手段と、
上記データ格納装置に格納された上記データのうち、上記優先クラスに属すると判定した上記トランザクションが使用する上記データと同じ上記組の上記フラグの値を、上記優先クラスに属さない上記トランザクションによる更新を制限する値に設定するフラグ処理手段と、
楽観的排他に基づいて、上記クライアント装置から受信した上記トランザクションの実行を制御するトランザクション実行部と
を有する。
【０００９】
本発明の第２の観点に係るトランザクション処理方法は、
クライアント装置と、データとフラグとの組を記憶するデータ格納装置と、上記クライアント装置と上記データ格納装置との間に接続されたサーバ装置とを有するトランザクション処理システムが実行するトランザクション処理方法であって、
上記クライアント装置が、トランザクションを上記サーバ装置へ送信し、
上記サーバ装置が、上記クライアント装置から受信した上記トランザクションが、優先クラスに属するか否かを判定し、上記データ格納装置に格納された上記データのうち、上記優先クラスに属すると判定した上記トランザクションが使用する上記データと同じ上記組の上記フラグの値を、上記優先クラスに属さない上記トランザクションによる更新を制限する値に設定し、楽観的排他に基づいて、上記クライアント装置から受信した上記トランザクションの実行を制御する。
【００１０】
本発明の第３の観点に係るサーバ装置は、
トランザクションを送信するクライアント装置と、データとフラグとの組を記憶するデータ格納装置との間に接続されたサーバ装置であって、
上記クライアント装置から受信した上記トランザクションが、優先クラスに属するか否かを判定する優先判定手段と、
上記データ格納装置に格納された上記データのうち、上記優先クラスに属すると判定した上記トランザクションが使用する上記データと同じ上記組の上記フラグの値を、上記優先クラスに属さない上記トランザクションによる更新を制限する値に設定するフラグ処理手段と、
楽観的排他に基づいて、上記クライアント装置から受信した上記トランザクションの実行を制御するトランザクション実行部と
を有する。
【００１１】
本発明の第４の観点に係るサーバ装置におけるトランザクション処理方法は、
トランザクションを送信するクライアント装置と、データとフラグとの組を記憶するデータ格納装置との間に接続されたサーバ装置が実行するトランザクション処理方法であって、
上記クライアント装置から受信した上記トランザクションが優先クラスに属するか否かを判定し、
上記データ格納装置に格納されたデータのうち、上記優先クラスに属すると判定した上記トランザクションが使用する上記データと同じ上記組の上記フラグの値を、上記優先クラスに属さない上記トランザクションによる更新を制限する値に設定し、
楽観的排他に基づいて、上記クライアント装置から受信した上記トランザクションの実行を制御する。
【００１２】
本発明の第５の観点に係るプログラムは、
トランザクションを送信するクライアント装置と、データとフラグとの組を記憶するデータ格納装置との間に接続されたサーバ装置を構成するコンピュータを、
上記クライアント装置から受信した上記トランザクションが、優先クラスに属するか否かを判定する優先判定手段と、
上記データ格納装置に格納された上記データのうち、上記優先クラスに属すると判定した上記トランザクションが使用する上記データと同じ上記組の上記フラグの値を、上記優先クラスに属さない上記トランザクションによる更新を制限する値に設定するフラグ処理手段と、
楽観的排他に基づいて、上記クライアント装置から受信した上記トランザクションの実行を制御するトランザクション実行部と
して機能させる。
【発明の効果】
【００１３】
本発明は上述した構成を有するため、楽観的排他に基づいてトランザクションの実行を制御するトランザクション処理システムにおいて、スケーラビリティを確保しつつ、特定のトランザクションを他のトランザクションより優先して処理することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態のブロック図である。
【図２】本発明の第１の実施形態におけるサーバ装置の処理の一例を示すフローチャートである。
【図３】本発明の第１の実施形態における楽観的排他に基づいてトランザクションの実行を制御する処理の詳細を示すフローチャートである。
【図４】本発明の第１の実施形態の一変形例におけるデータ格納装置のブロック図である。
【図５】本発明の第１の実施形態の他の変形例におけるデータ格納装置のブロック図である。
【図６】本発明の第２の実施形態のブロック図である。
【図７】本発明の第２の実施形態のより詳細なブロック図である。
【図８】本発明の第２の実施形態における処理解析サーバのブロック図である。
【図９】本発明の第２の実施形態における処理解析サーバの優先判定基準の一例を示す図である。
【図１０】本発明の第２の実施形態においてクライアントから処理解析サーバに送信される処理要求の例を示す図である。
【図１１】本発明の第２の実施形態におけるデータ格納サーバのブロック図である。
【図１２】本発明の第２の実施形態における処理解析サーバの処理例を示すフローチャートである。
【図１３】本発明の第２の実施形態におけるデータ格納サーバのフラグ管理部の処理例を示すフローチャートである。
【図１４】本発明の第３の実施形態における処理解析サーバの処理例を示すフローチャートである。
【図１５】本発明の第４の実施形態におけるデータ格納サーバのブロック図である。
【図１６】本発明の第４の実施形態における処理解析サーバの処理例を示すフローチャートである。
【図１７】本発明の第５の実施形態における処理解析サーバの処理例を示すフローチャートである。
【図１８】本発明の第６の実施形態における処理解析サーバのブロック図である。
【図１９】本発明の第６の実施形態における処理解析サーバの優先判定基準の一例を示す図である。
【図２０】本発明の第６の実施形態における処理解析サーバの優先リストの一例を示す図である。
【図２１】本発明の第６の実施形態における処理解析サーバの優先リストの他の例を示す図である。
【図２２】本発明の第７の実施形態における処理解析サーバの処理例を示すフローチャートである。
【図２３】本発明の第８の実施形態における処理解析サーバの処理例を示すフローチャートである。
【図２４】本発明の第８の実施形態におけるデータ格納サーバのデータ反映要求受信時の処理例を示すフローチャートである。
【図２５】本発明の第８の実施形態におけるデータ格納サーバのフラグ設定要求受信時の処理例を示すフローチャートである。
【図２６】本発明の第８の実施形態における処理解析サーバの別の処理例を示すフローチャートである。
【図２７】本発明の第８の実施形態におけるデータ格納サーバのデータ反映要求受信時の別の処理例を示すフローチャートである。
【図２８】本発明の第８の実施形態における処理解析サーバの更に別の処理例を示すフローチャートである。
【図２９】ロングトランザクションで行う処理の一例を説明するためのデータの構成図である。
【発明を実施するための形態】
【００１５】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図１を参照すると、本発明の第１の実施形態に係るトランザクション処理システム１００は、クライアント装置１１０とサーバ装置１２０とデータ格納装置１３０とを有する。
【００１６】
クライアント装置１１０は、トランザクションをサーバ装置１２０に送信する装置である。クライアント装置１１０は、例えば、ＣＰＵ、ＲＯＭやＲＡＭ等のメモリ、各種の情報を格納する外部記憶装置、入出力インターフェース、通信インターフェース、およびこれらを相互に接続するバスを備える専用または汎用のコンピュータであってよい。またクライアント装置１１０は、複数存在してよい。
【００１７】
データ格納装置１３０は、データ１３１とフラグ１３２との組を１以上記憶する機能を有する。フラグ１３２は、その値が特定の値であるときに限定して、同じ組のデータ１３１に対する優先クラスに属するトランザクション以外のトランザクション（即ち優先クラスに属さないトランザクション）からの更新を制限する機能を有する。以下では、フラグ１３２は値０または値１の何れかの値をとり、値１であるときに限定して、同じ組のデータ１３１に対する優先クラスに属さないトランザクションからの更新を制限するものとする。但し、フラグ１３２が取り得る値および上記制限を有効とする値は、上記の例に限定されない。
【００１８】
データ格納装置１３０は、例えば、ＢｅｒｋｌｅｙＤＢなどのデータベースや、キーバリューストアや、リレーショナルデータベースなど楽観的排他による制御ができるデータベースであればよい。またデータ格納装置１３０は、複数存在してよい。データ格納装置１３０に記憶されるデータ１３１とフラグ１３２との組は、前述のような種類のデータベースに、それぞれの持つデータ格納方式（キーバリュー方式、関係モデル方式など）に従って適宜記憶される。データ１３１は、例えばキーバリューストアであれば、図１に示すように、ＫＶデータ１３３とバージョン情報１３４とを有する。ＫＶデータ１３３は、キー値とバリュー値とのペアである。バージョン情報１３４は、ＫＶデータ１３３のバージョンを表す。以下、データ１３１は、ＫＶデータ１３３とバージョン情報１３４とを有するものとして説明するが、本発明はそのような形式のデータに限定されない。
【００１９】
サーバ装置１２０は、クライアント装置１１０とデータ格納装置１３０との間に接続されている。サーバ装置１２０は、例えば、ＣＰＵ、ＲＯＭやＲＡＭ等のメモリ、各種の情報を格納する外部記憶装置、入出力インターフェース、通信インターフェース、およびこれらを相互に接続するバスを備える専用または汎用のコンピュータであってよい。またサーバ装置１２０は、複数台存在してもよい。
【００２０】
サーバ装置１２０は、トランザクション実行部１２１と優先判定部１２２とフラグ処理部１２３とを有する。
【００２１】
優先判定部１２２は、クライアント装置１１０から受信したトランザクションが、優先クラスに属するか否かを判定する機能を有する。優先判定部１２２は、サーバ装置１２０を構成するＣＰＵとそのＣＰＵで実行されるソフトウェアとで実現されるものであってよい。
【００２２】
優先判定部１２２において、トランザクションが優先クラスに属するか否かを判定する基準は任意である。例えば、優先判定部１２２は、優先クラスに属する旨の情報がクライアント装置１１０から受信したトランザクションに付加されているか否かを調べ、そのような情報が付加されていれば優先クラスに属すると判定し、そうでなければ優先クラスに属さないと判定してよい。あるいは優先判定部１２２は、トランザクションのエラー回数が閾値以上であるか否かを調べ、閾値以上であれば優先クラスに属すると判定し、そうでなければ優先クラスに属さないと判定してよい。あるいは優先判定部１２２は、トランザクションの実行所要時間が閾値の時間以上であるか否かを調べ、閾値以上であれば優先クラスに属すると判定し、そうでなければ優先クラスに属さないと判定してよい。あるいは優先判定部１２２は、トランザクションで使用するデータが、サーバ装置１２０に記憶された優先リストに記載されたデータに一致するか否かを調べ、一致すれば優先クラスに属すると判定し、そうでなければ優先クラスに属さないと判定してよい。あるいは優先判定部１２２は、上述した４つの基準、すなわち、優先クラスに属する旨の情報がトランザクションに付加されていること、トランザクションのエラー回数が閾値以上であること、トランザクションの実行所要時間が閾値の時間以上であること、トランザクションで使用するデータが優先リストに記載されたデータに一致することのうちの任意の２つ、３つまたは４つの基準の組み合わせを使用し、組み合わせ中の全ての基準を満たす場合に優先クラスに属すると判定し、そうでなければ優先クラスに属しないと判定してよい。あるいは優先判定部１２２は、上述した４つの基準以外のその他の基準を使用してよい。
【００２３】
フラグ処理部１２３は、データ格納装置１３０に格納されたデータ１３１のうち、優先判定部１２２によって優先クラスに属すると判定したトランザクションが使用するデータと同じ組のフラグ１３２の値を、優先クラスに属さないトランザクションによる更新を制限する値（例では値１）に設定する機能を有する。フラグ処理部１２３は、データ１３１のフラグ１３２の値を１に設定する場合、設定前のフラグ１３２の値を確認してもよいし、確認しなくてもよい。確認する場合、フラグ１３２の値が既に値１に設定されていれば、フラグ１３２の値を１に設定する操作を省略しても良いし、値１を上書きしてもよい。フラグ処理部１２３は、サーバ装置１２０を構成するＣＰＵとそのＣＰＵで実行されるソフトウェアとで実現されるものであってよい。
【００２４】
トランザクション実行部１２１は、楽観的排他に基づいて、クライアント装置１１０から受信したトランザクションの実行を制御する機能を有する。トランザクション実行部１２１は、サーバ装置１２０を構成するＣＰＵとそのＣＰＵで実行されるソフトウェアとで実現されるものであってよい。トランザクション実行部１２１は、同じサーバ装置１２０上に複数存在してよい。
【００２５】
次に本実施形態の動作を説明する。
【００２６】
クライアント装置１１０は、トランザクションをサーバ装置１２０へ送信する。サーバ装置１２０は、トランザクションを受信する毎に、そのトランザクションを解析して実行する。以下、図２を参照して、サーバ装置１２０の動作をより詳細に説明する。
【００２７】
サーバ装置１２０の優先判定部１２２は、クライアント装置１１０から受信したトランザクションが優先クラスに属するか否かを判定する（ステップＳ１０１）。優先クラスに属する場合（ステップＳ１０２でＹＥＳ）、サーバ装置１２０のフラグ処理部１２３は、データ格納装置１３０に格納されたデータ１３１のうち、上記トランザクションが使用するデータ１３１と同じ組のフラグ１３２の値を、優先クラスに属さないトランザクションによる更新を制限する値（例では値１）に設定する（ステップＳ１０３）。他方、クライアント装置１１０から受信したトランザクションが優先クラスに属さない場合（ステップＳ１０２でＮＯ）、ステップＳ１０３の処理はスキップする。
【００２８】
そして、サーバ装置１２０のトランザクション実行部１２１は、楽観的排他に基づいてトランザクションの実行を制御する（ステップＳ１０４）。
【００２９】
図３はステップＳ１０４の処理の詳細を示すフローチャートである。以下、図３を参照して、サーバ装置１２０のトランザクション実行部１２１が、楽観的排他に基づいて、トランザクションの実行を制御する動作について説明する。
【００３０】
先ずトランザクション実行部１２１は、トランザクションで使用するデータ１３１をデータ格納装置１３０から取得し、図示しないキャッシュに保存する（ステップＳ１１１）。次にトランザクション実行部１２１は、キャッシュ上のデータ１３１のＫＶデータ１３３を使用してトランザクションの処理を実行する（ステップＳ１１２）。そして、トランザクション実行部１２１は、トランザクションの処理の実行を終えると、以下の処理を実行する。
【００３１】
先ずトランザクション実行部１２１は、トランザクションで使用したデータ１３１のバージョン情報１３４をデータ格納装置１３０から取得し、トランザクションの実行開始時点のバージョン情報１３４と同じか否かを判定する（ステップＳ１１３）。若し同じでなければ、トランザクションの実行開始後、終了するまでに他のトランザクションが同じデータを既に更新しているため、コミット失敗と判断し、ステップＳ１１１の処理に戻って、当該トランザクションを再実行する。なお、ステップＳ１１３からステップＳ１１１へ移行する際、図２のステップＳ１０２、Ｓ１０３と同様の処理を行ってよい。
【００３２】
バージョン情報１３４が同じであれば、当該トランザクションがデータの更新を行う更新トランザクションか否かを判定する（ステップＳ１１４）。若し更新トランザクションでなく、データの参照のみを行う参照トランザクションであれば（ステップＳ１１４でＮＯ）、トランザクション実行部１２１は、コミット成功と判断し、クライアント装置１１０へ当該トランザクションが正常に終了した旨の成功応答を送信し（ステップＳ１１８）、図３に示す処理を終了する。
【００３３】
他方、更新トランザクションであれば（ステップＳ１１４でＹＥＳ）、トランザクション実行部１２１は、当該トランザクションが優先クラスに属するトランザクションであるか否かを判定する（ステップＳ１１５）。若し優先クラスに属するトランザクションであれば、トランザクション実行部１２１は、当該トランザクションが更新したデータの内容をデータ格納装置１３０に反映する（ステップＳ１１７）。即ち、更新後のＫＶデータ１３３で更新前のＫＶデータ１３３を書き換え、バージョン情報１３４を例えばインクリメントして更新する。そして、トランザクション実行部１２１は、コミット成功と判断し、クライアント装置１１０へ当該トランザクションが正常に終了した旨の成功応答を送信し（ステップＳ１１８）、図３に示す処理を終了する。しかし、当該トランザクションが優先クラスに属しないトランザクションであれば（ステップＳ１１５でＮＯ）、当該トランザクションが更新するデータ１３１のフラグ１３２をデータ格納装置１３０から取得し、優先クラスに属さないトランザクションによる更新を制限しない値（非制限値。例では値０）であるか否かを判定する（ステップＳ１１６）。若し非制限値でなければ、データの更新が行えないためコミット失敗と判断し、ステップＳ１１１の処理に戻って、当該トランザクションを再実行する。他方、非制限値であれば、トランザクション実行部１２１は、当該トランザクションが更新したデータの内容をデータ格納装置１３０に反映し（ステップＳ１１７）、コミット成功と判断してクライアント装置１１０へ当該トランザクションが正常に終了した旨の成功応答を送信し（ステップＳ１１８）、図３に示す処理を終了する。なお、ステップＳ１１６からステップＳ１１１へ移行する際、図２のステップＳ１０２、Ｓ１０３と同様の処理を行ってよい。
【００３４】
図３に示した処理では、優先クラスに属していない更新トランザクションについては、トランザクションで使用するデータ１３１のバージョン情報１３４がそのトランザクションの実行開始時と同じであり、且つ、そのトランザクションで更新するデータ１３１のフラグ１３２が優先クラスに属さないトランザクションによる更新を制限しない値であることを確認して、トランザクションのコミットを行う。従って、Ｃｏｍｐａｒｅ  ａｎｄ  Ｓｗａｐ操作を使用して楽観的排他を行う場合、優先クラスに属していない更新トランザクションについては、実行開始時点のデータ１３１のバージョン情報１３４と更新を制限しないフラグ１３２の値の組と、実行完了時点のデータ格納装置１３０におけるデータ１３１のバージョン情報１３４とフラグ１３２の値の組とを比較（Ｃｏｍｐａｒｅ）し、一致していれば、更新後のＫＶデータ１３３とバージョン情報１３４とで構成されるデータ１３１を使用してデータ格納装置１３０のデータ１３１を更新（Ｓｗａｐ）してコミット成功とし、上記比較（Ｃｏｍｐａｒｅ）で一致しないときは上記更新は実施されず、コミット失敗となる。
【００３５】
また図３に示した処理では、優先クラスに属する更新トランザクションについては、トランザクションで使用するデータ１３１のバージョン情報１３４がそのトランザクションの実行開始時と同じであることを確認して、トランザクションのコミットを行う。従って、Ｃｏｍｐａｒｅ  ａｎｄ  Ｓｗａｐ操作を使用して楽観的排他を行う場合、優先クラスに属する更新トランザクションについては、実行開始時点のデータ１３１のバージョン情報１３４と実行完了時点のデータ格納装置１３０のデータ１３１のバージョン情報１３４とを比較（Ｃｏｍｐａｒｅ）し、一致していれば、更新後のＫＶデータ１３３とバージョン情報１３４とで構成されるデータ１３１を使用してデータ格納装置１３０のデータ１３１を更新（Ｓｗａｐ）してコミット成功とし、上記比較（Ｃｏｍｐａｒｅ）で一致しないときは上記更新は実施されず、コミット失敗となる。
【００３６】
次に本実施形態の効果を説明する。
【００３７】
本実施形態によれば、楽観的排他に基づいてトランザクションの実行を制御するトランザクション処理システム１００において、スケーラビリティを確保しつつ、特定のトランザクションを他のトランザクションより優先して処理することができる。
【００３８】
特定のトランザクションを他のトランザクションより優先して処理することができる理由は、優先クラスに属するトランザクションで使用するデータ１３１が優先クラスに属さないトランザクションによって更新されないように、フラグ１３２によって制限しているためである。これにより、相前後して実行を開始した複数のトランザクションにおいて、優先クラスに属するトランザクションで使用するデータが優先クラスに属さないトランザクションによって先に更新されることを防止でき、優先クラスに属するトランザクションが優先クラスに属さないトランザクションによるデータ更新を理由に楽観的排他に失敗することがなくなる。
【００３９】
またスケーラビリティを確保できる理由は、トランザクションが優先クラスに属するか否かの判定、優先クラスに属するトランザクションで使用するデータと同じ組のフラグの値を、優先クラスに属さないトランザクションによる更新を制限する値に設定する操作は、トランザクション間で調整する必要はなく個々のトランザクション毎に独立に実施できるためである。
【００４０】
本実施形態は、以上説明した構成を基本としつつ、以下のような各種の付加変更が可能である。
【００４１】
優先クラスに属するトランザクションで使用するデータ１３１のフラグ１３２の値をそのトランザクションの処理終了後も制限を有効とする値にしておくと、何時まで経っても、そのデータを更新する優先クラスに属さないトランザクションの実行が困難になる。そのため、フラグ１３２の値を優先クラスに属さないトランザクションによる更新を制限しない値に戻す仕組みを付加してよい。例えば、優先クラスに属するトランザクションのコミット時に、トランザクション実行部１２１が、そのトランザクションが使用したデータ１３１のフラグ１３２の値を元の値、即ち、優先クラスに属さないトランザクションによる更新を制限しない値に戻すようにしてよい。
【００４２】
あるいはデータ格納装置１３０は、図４に示すように、フラグ１３２の有効期限１３５を記憶してよい。有効期限１３５は、フラグ１３２の値が、優先クラスに属さないトランザクションによる更新を制限する値に設定されているとき、何時までその制限が有効であるか、何時以降その制限が無効になるかを表している。フラグ１３２の値が優先クラスに属さないトランザクションによる更新を制限する値に設定されている場合、トランザクション実行部１２１は、その有効期限１３５を確認し、有効期限切れでなければ制限を有効と判断するが、有効期限切れであれば制限を無効と判断する。あるいは、定期的に有効期限１３５を確認し、有効期限切れのフラグ１３２の値を優先クラスに属さないトランザクションによる更新を制限しない値に戻す処理をサーバ装置１２０あるいはデータ格納装置１３０で実行するようにしてもよい。
【００４３】
またサーバ装置１２０のフラグ処理部１２３は、フラグ１３２の値を優先クラスに属さないトランザクションによる更新を制限する値に設定する際、トランザクションの実行所要時間に応じた期限をフラグの有効期限１３５として設定するようにしてよい。例えば、トランザクションの実行所要時間をＴとすると、そのトランザクションの実行開始時刻からＴ時間経過後の時刻をフラグの有効期限１３５として設定してよい。あるいは余裕時間Δを考慮し、そのトランザクションの実行開始時刻からＴ＋Δ時間経過後の時刻をフラグの有効期限１３５として設定してよい。これにより、優先クラスに属するトランザクションの実行中に限って、そのトランザクションで使用するデータ１３１のフラグ１３２の値を、優先クラスに属さないトランザクションによる更新を制限する値に設定することができる。なお、フラグの有効期限１３５が既に設定されている場合、新たな有効期限を上書きしてもよいし、上書きしないようにしてもよい。或いは、既に設定されている有効期限が切れているときは上書きし、切れていないときは上書きしないようにしてよい。
【００４４】
また図４では、フラグ１３２とは独立にその有効期限１３５を記憶するようにしたが、図５に示すように、フラグ１３２の値自体を有効期限としてよい。この場合、フラグ１３２の値が示す有効期限が切れていないときは、当該フラグ１３２は優先クラスに属さないトランザクションによる更新を制限する機能を有し、有効期限が切れているときは、当該フラグ１３２は優先クラスに属さないトランザクションによる更新を制限する機能を有しないとして扱う。
【００４５】
[第２の実施形態]
次に本発明の第２の実施形態について説明する。
【００４６】
図６を参照すると、本実施形態に係るトランザクション処理システム２００は、クライアント２１０と処理解析サーバ２２０とデータ格納サーバ２３０とを有する。
【００４７】
本実施形態に係るトランザクション処理システム２００では、クライアント２１０は、まず処理解析サーバ２２０に処理要求を送る。ここで、１つの処理要求は、１つのトランザクションに相当する。クライアント２１０からの処理要求を受信した処理解析サーバ２２０は、処理要求を解析し、データ格納サーバ２３０から必要な最新データをコピーしてきて、更新・参照処理を行う。処理解析サーバ２２０は、受信した処理要求に係る処理の完了後、応答をクライアント２１０に返す。クライアント２１０と処理解析サーバ２２０間、処理解析サーバ２２０とデータ格納サーバ２３０間の全ての処理要求に係る処理は並列に行われるが、データの一貫性が失われることはない。また、クライアント２１０からデータ格納サーバ２３０に直接に処理要求を送ることはない。
【００４８】
図７は本実施形態に係るトランザクション処理システム２００のより詳細な構成を示す。図７を参照すると、本実施形態に係るトランザクション処理システム２００は、ｉ個（ｉは１以上の整数）のクライアント（Ｃ）２１０を持つ分散データベースシステムである。分散データベースシステム内には、ｊ個（ｊは１以上の整数）の処理解析サーバ（Ｐ）２２０と、ｋ個（ｋは１以上の整数）のデータ格納サーバ（Ｔ）２３０が存在する。各々のクライアント２１０は、全ての処理解析サーバ２２０と繋がっているため、任意の処理解析サーバ２２０に処理要求を送ることができる。また、各々の処理解析サーバ２２０は、全てのデータ格納サーバ２３０と繋がっているため、任意のデータ格納サーバ２３０に処理要求を送ることができる。
【００４９】
図８は処理解析サーバ２２０のブロック図である。処理解析サーバ２２０は、処理入出力部２２１、処理実行部２２２、およびデータ格納部２２３を有する。処理入出力部２２１は、クライアントとの通信部２２１１とデータ格納サーバとの通信部２２１２とを有し、他機能サーバと処理要求やデータなどの送受信を行う。処理実行部２２２は、受信した処理要求に係る処理を実行するトランザクション実行部２２２１と、実行する処理要求が優先クラスに属するか否かを判定する優先判定部２２２２と、優先判定部２２２２によって優先クラスに属すると判定した処理要求が使用するデータのフラグの値を、優先クラスに属さない処理要求による更新を制限する値に設定するフラグ処理部２２２３とを有する。データ格納部２２３は、データ格納サーバ２３０からコピーしたデータを格納するコピーデータ格納部２２３１と、処理要求が優先クラスに属するか否かの判定基準を格納する優先判定基準格納部２２３２と、処理要求の実行に要した時間を格納する処理実行時間格納部２２３３とを有する。
【００５０】
本実施形態では、優先判定基準格納部２２３２には、図９に示す３つの判定基準が記憶されている。
【００５１】
１つ目の判定基準は、クライアント２１０から処理解析サーバ２２０に送信される処理要求に、値１の優先フラグが付加されていることである。図１０は、クライアント２１０から処理解析サーバ２２０に送信される３つの処理要求の例を示す。図１０（ａ）に示す処理要求と図１０（ｃ）に示す処理要求には、値が０の優先フラグが付加されている。これは、それらの処理要求については、クライアント２１０は優先的な処理を希望していないことを意味している。他方、図１０（ｂ）の処理要求には、値が１の優先フラグが付加されている。これは、その処理要求については、クライアント２１０が優先的な処理を希望していることを意味している。優先フラグの値が０の処理要求は、その他の判定基準を満足するか否かに関係無く、優先的に処理されることはない。他方、優先フラグの値が１の処理要求は、その他の判定基準を満足すれば、優先的に処理されることになる。
【００５２】
２つ目の判定基準は、処理要求の実行が楽観的排他の失敗による再実行であることである。
【００５３】
３つ目の判定基準は、実行に要する時間が閾値Ｔ以上であることである。即ち、３つ目の判定基準は、ロングトランザクションであることを要求している。ロングトランザクションは、処理開始から処理終了までに長い時間を要するため、処理開始後に実行を開始した他のトランザクションによって先にデータを更新される確率が高い。そのため、再試行を繰り返しても毎回、楽観的排他に失敗してエラーする。例えば、図２９に示すようなデータに対して、全ＩＤの単価更新を行うトランザクションＴＲａは、まずデータ格納サーバ２３０から全ＩＤ（例ではＩＤ１〜ＩＤ５）のデータをコピーデータ格納部２２３１にコピーし、そのデータを更新し、その後に処理結果をデータ格納サーバ２３０に反映する。このとき、各ＩＤのデータに対してデータ更新処理を行う複数の他のトランザクションＴＲｂが存在していると、トランザクションＴＲａの処理実行中に各ＩＤのデータに対する更新が他のトランザクションＴＲｂから行われる可能性が高くなり、トランザクションＴＲａは何度再試行しても毎回エラーになる。そこで、本実施形態では、ロングトランザクションの処理時間に基づいて閾値Ｔを定め、実行に要する時間が閾値Ｔ以上であることを１つの判定基準とすることにより、ロングトランザクションがエラーし続けることを防止する。
【００５４】
図１１はデータ格納サーバ２３０のブロック図である。データ格納サーバ２３０は、処理解析サーバ２２０と同様に、処理入出力部２３１、処理実行部２３２、およびデータ格納部２３３を有する。処理入出力部２３１は、処理解析サーバとの通信部２３１１を有する。データ格納サーバ２３０はクライアント２１０と通信を行わないため、処理解析サーバ２２０におけるクライアントとの通信部２２１１に相当する通信部は有していない。データ格納部２３３は、最新のデータを格納する格納部２３３１を有する。格納部２３３１に格納されるデータ２３３２は、ＫＶデータ２３３３、バージョン情報２３３４、フラグ２３３５、およびフラグの有効期限２３３６を有する。ＫＶデータ２３３３は、キー値とバリュー値とのペアである。バージョン情報２３３４は、ＫＶデータ２３３３のバージョンを表す。フラグ２３３５は、０または１の値をとる。フラグ２３３５の値が１のときは、優先クラスに属さない処理要求からのＫＶデータ２３３３の更新は禁止される。フラグ２３３５の値が０のときは、そのような制限はない。有効期限２３３６は、フラグ２３３５の値が、優先クラスに属さないトランザクションによる更新を制限する値に設定されているとき、何時までその制限が有効であるか、何時以降その制限が無効になるかを表している。処理実行部２３２は、処理解析サーバ２２０から要求された処理を行う処理実行部２３２１と、有効期限を過ぎたフラグ２３３５の値を０に更新する処理を定期的に行うフラグ管理部２３２２とを有する。
【００５５】
次に本実施形態の動作を説明する。
【００５６】
まずクライアント２１０の動作を説明する。クライアント２１０は、処理要求を何れかの処理解析サーバ２２０へ送信する。その際、クライアント２１０は、優先的な処理を希望するならば、値１の優先フラグを処理要求に付加して送信し、そうでなければ値０の優先フラグを処理要求に付加して送信する。
【００５７】
次に処理解析サーバ２２０の動作を説明する。図１２は処理解析サーバ２２０の処理例を示すフローチャートである。
【００５８】
処理解析サーバ２２０のトランザクション実行部２２２１は、クライアント２１０から処理要求を受信すると（ステップＳ２０１）、優先判定部２２２２において当該処理要求が優先クラスに属するか否かを判定し、その判定結果に応じて当該処理要求に付与する優先クラスフラグの値を決定する（ステップＳ２０２）。優先判定基準格納部２２３２に記憶されている図９に示した判定基準では、クライアント２１０から受信した時点では全ての処理要求は判定基準２を満足しないため優先クラスに属していないと決定される。このため、受信した処理要求に対しては、優先クラスに属していない旨を示す値０の優先クラスフラグが付与される。
【００５９】
次に、トランザクション実行部２２２１は、受信した処理要求に係る処理で参照、更新するデータをデータ格納サーバ２３０からコピーデータ格納部２２３１にコピーし、処理要求に係る処理を実行する（ステップＳ２０３）。コピーの取得では、処理解析サーバ２２０のトランザクション実行部２２２１からデータ格納サーバ２３０の処理実行部２３２１に対して、キー値を指定したデータ取得要求を送信し、処理実行部２３２１が同じキー値を有するＫＶデータ２３３３をデータ格納部２３３１から検索し、そのバージョン情報２３３４と一緒に処理解析サーバ２２０へ送り返すことで行われる。また処理解析サーバ２２０のトランザクション実行部２２２１は、処理要求に係る処理の実行時間を測定し、測定した実行時間を処理実行時間格納部２２３３に記録する（ステップＳ２０４）。
【００６０】
処理要求に係る処理の完了後、処理解析サーバ２２０のトランザクション実行部２２２１は、データの一貫性を保証するために、データ格納サーバ２３０のデータのバージョン情報が、当該処理要求に係る処理で使用したデータの取得時と同じか否かを確認する（ステップＳ２０５）。即ち、トランザクション実行部２２２１は、処理要求で使用したデータ２３３２のバージョン情報２３３４をデータ格納サーバ２３０から取得し、コピーデータ格納部２２３１に記憶されているデータ取得時のバージョン情報２３３４と同じか否かを判定する。若し両者のバージョン情報が相違していれば、処理要求の実行開始後、終了するまでに他の処理要求が同じデータを既に更新しているため、コミット失敗と判断して当該処理要求を再試行するためにステップＳ２１１の処理へと進む。
【００６１】
他方、双方のバージョン情報２３３４が一致していれば、トランザクション実行部２２２１は、当該処理要求がデータの更新を行う更新トランザクションか否かを判定する（ステップＳ２０６）。若し更新トランザクションでなく、データの参照のみを行う参照トランザクションであれば、トランザクション実行部２２２１は、コミット成功と判断してクライアント２１０へ当該処理要求が正常に終了した旨の成功応答を送信し（ステップＳ２１０）、ステップＳ２０１の処理に戻って次の処理要求を受信する。
【００６２】
また、当該処理要求がデータの更新を行う更新トランザクションであれば（ステップＳ２０６でＹＥＳ）、トランザクション実行部２２２１は、優先クラスフラグの値に基づいて当該処理要求が優先クラスに属するか否かを判定する（ステップＳ２０７）。若し優先クラスに属する処理要求であれば（ステップＳ２０７でＹＥＳ）、トランザクション実行部２２２１は、当該処理要求で更新したデータの内容をコピーデータ格納部２２３１から取得してデータ格納サーバ２３０に反映する（ステップＳ２０９）。即ち、更新後のＫＶデータ２３３３で更新前のＫＶデータ２３３３を書き換え、バージョン情報２３３４を例えばインクリメントして更新する。そして、トランザクション実行部２２２１は、コミット成功と判断してクライアント２１０へ当該処理要求が正常に終了した旨の成功応答を送信し（ステップＳ２１０）、ステップＳ２０１の処理に戻る。
【００６３】
しかし、当該処理要求が優先クラスに属しない処理要求であれば（ステップＳ２０７でＮＯ）、当該処理要求で更新したデータ２３３２のフラグ２３３５をデータ格納サーバ２３０から取得し、優先クラスに属しない処理要求による更新を制限しない値（例では値０）であるか否かを判定する（ステップＳ２０８）。若しデータのフラグ２３３５が値０でなければ、データの更新を行えないのでコミット失敗と判断し、当該処理要求を再試行するためにステップＳ２１１の処理へと進む。またデータのフラグ２３３５が優先クラスに属しない処理要求による更新を制限しない値０であれば、トランザクション実行部２２２１は、当該処理要求で更新したデータの内容をデータ格納サーバ２３０に反映し（ステップＳ２０９）、コミット成功と判断してクライアント２１０へ当該処理要求が正常に終了した旨の成功応答を送信し（ステップＳ２１０）、ステップＳ２０１の処理へ戻る。
【００６４】
トランザクション実行部２２２１は、ステップＳ２１１では、処理の完了した処理要求が優先クラスの基準を満たしているか否かを優先判定部２２２２により再び判定する。優先判定基準格納部２２３２に記憶されている図９の基準では、ステップＳ２０８からステップＳ２１１の処理へ移行した処理要求は、判定基準２を満足する。このため、優先判定部２２２２は、判定基準１と判定基準３とを確認する。判定基準１の確認では、優先判定部２２２２は、処理要求に付加されている優先フラグの値が１であれば、判定基準１を満足し、そうでなければ判定基準１を満足しないと決定する。判定基準３の確認では、優先判定部２２２２は、当該処理要求の処理時間の情報を処理実行時間格納部２２３３から読み出し、閾値Ｔと比較し、処理実行時間が閾値Ｔ以上であれば、判定基準３を満足し、そうでなければ判定基準３を満足しないと決定する。
【００６５】
トランザクション実行部２２２１は、優先判定部２２２２による判定の結果、処理要求が全ての判定基準１〜３を満足していれば、以下の処理を行う。
【００６６】
まずトランザクション実行部２２２１は、当該処理要求の優先クラスフラグの値を１に設定する（ステップＳ２１２）。
【００６７】
次にトランザクション実行部２２２１は、フラグ処理部２２２３を使用して、フラグの有効期限を算出する（ステップＳ２１３）。フラグの有効期限の算出では、フラグ処理部２２２３は、当該処理要求の処理時間の情報を処理実行時間格納部２２３３から読み出し、当該処理要求の処理時間以上の時間をフラグの有効期限として算出する。また、フラグ処理部２２２３は、当該処理要求の処理時間に予め定められた余裕時間αを加算した時間を、フラグの有効期限として算出してよい。ここで、余裕時間αは、例えば、処理解析サーバとデータ格納サーバ間で所定長のメッセージを通信するのに要する時間の倍の時間に、データ格納サーバにおいてフラグの値を更新するのに要する時間を加えた時間としてよい。余裕時間αは、毎回同じ値でなくてもよく、また全処理で共通である必要もない。
【００６８】
次にトランザクション実行部２２２１は、データのフラグの更新と有効期限の設定とを行う（ステップＳ２１１）。データのフラグの更新では、フラグ処理部２２２３は、データ格納サーバ２３０のデータ格納部２３３１に記憶されたデータ２３３２のうち、当該処理要求が参照または更新する全てのデータ２３３２のフラグ２３３５の値を１に更新し、且つ、有効期限２３３６の値をステップＳ２１３で算出した有効期限の値に更新（上書き）する。
【００６９】
そして、トランザクション実行部２２２１は、ステップＳ２１５の処理へと進む。他方、トランザクション実行部２２２１は、優先判定部２２２２による判定の結果、処理要求が判定基準１〜３のうちの少なくとも１つの判定基準を満足していなければ、ステップＳ２１２〜Ｓ２１４の処理をスキップして、ステップＳ２１５の処理へと進む。
【００７０】
ステップＳ２１５では、トランザクション実行部２２２１は、当該処理要求が使用する最新のデータをデータ格納サーバ２３０からコピーデータ格納部２２３１にコピーする。そして、トランザクション実行部２２２１は、ステップＳ２０１に戻り、当該処理要求を再実行する。
【００７１】
次にデータ格納サーバ２３０の動作を説明する。データ格納サーバ２３０の処理実行部２３２１における処理部２３２１は、処理解析サーバ２２０の処理実行部２２２からのデータ２３３２の読み出し要求、データ２３３２の書き込み要求に応じた処理を行う。他方、処理実行部２３２のフラグ管理部２３３２は、定期的にフラグ２３３５の有効期限２３３６を確認し、有効期限切れのフラグ２３３５の値を優先クラスに属さないトランザクションによる更新を制限しない値（例では値０）に戻す処理を行う。
【００７２】
図１３はフラグ管理部２３２２の処理の一例を示すフローチャートである。フラグ管理部２３２２は、起動すると、データ格納部２３３の格納部２３３１に格納されているデータ２３３２の１つに注目する（ステップＳ２３１）。次に、注目中のデータ２３３２の有効期限２３３６を現在時刻と比較することにより有効期限が過ぎているか否かを判定する（ステップＳ２３２）。有効期限２３３６が示す時刻が現在時刻より過去の時刻であれば、有効期限が切れているため、フラグ管理部２３２２は、注目中のデータ２３３２のフラグ２３３５の値を０に設定する（ステップＳ２３３）。そして、フラグ管理部２３２２は、ステップＳ２３４の処理へ進む。他方、有効期限２３３６が示す時刻が現在時刻より過去の時刻でなければ、有効期限が切れていないため、フラグ管理部２３２２は、ステップＳ２３３をスキップしてステップＳ２３４の処理へ進む。
【００７３】
フラグ管理部２３２２は、ステップＳ２３４では、データ格納部２３３に格納されている次の１つのデータ２３３２に注目を移す。そして、そのようなデータが存在すれば（ステップＳ２３５でＮＯ）、ステップＳ２３２に戻って上述した処理と同様の処理を当該注目中のデータに対して実施する。他方、データ格納部２３３に格納されている全てのデータ２３３２に注目し終えた場合（ステップＳ２３５でＹＥＳ）、フラグ管理部２３２２は、一定時間だけ待ち合わせを行った後（ステップＳ２３６）、ステップＳ２３１の処理から再び上述した動作を繰り返す。
【００７４】
次に本実施形態の効果を説明する。
【００７５】
本実施形態によれば、楽観的排他に基づいて処理要求（トランザクション）の実行を制御するトランザクション処理システム２００において、第１の実施形態と同様の理由により、スケーラビリティを確保しつつ、特定の処理要求を他の処理要求より優先して処理することができる。
【００７６】
また本実施形態によれば、優先クラスに属する処理要求に係る処理が完了した後は、同じデータを更新する優先クラスに属さない処理要求に係る処理を支障なく実施することができる。その理由は、優先クラスに属しない処理要求による更新を制限するフラグ２３３５に有効期限２３３６を付与し、優先クラスに属する処理要求に係る処理が完了して有効期限２３３６の切れたフラグ２３３５は、優先クラスに属しない処理要求による更新を制限しない値に自動的に更新されるためである。
【００７７】
また本実施形態によれば、フラグ２３３５の有効期限２３３６を最適化することができる。その理由は、優先クラスに属する処理要求に係る処理の所要時間を計測し、その計測値に基づいて有効期限を設定しているためである。
【００７８】
また本実施形態によれば、優先クラスに属する処理要求のコミット時に、処理解析サーバ２２０が、その処理要求が使用したデータのフラグ２３３５の値を元の値、即ち、優先クラスに属さない処理要求による更新を制限しない値に戻す操作を行う必要がない。その理由は、データ格納サーバ２３０が、有効期限の切れたフラグ２３３５を自動的に元の値に戻すためである。
【００７９】
また本実施形態によれば、ロングトランザクションの成功確率を高めることができる。その理由は、ロングトランザクションであることを優先クラスに属する基準の１つにしているためである。
【００８０】
また本実施形態によれば、ロングトランザクションのうちクライアントが希望するロングトランザクションの成功確率を高めることができる。その理由は、クライアントが優先フラグを１に設定しているトランザクションであることを優先クラスに属する基準の１つにしているためである。
【００８１】
また本実施形態によれば、ロングトランザクションの再実行時にその成功確率を高めることができる。その理由は、楽観的排他の失敗によるトランザクションの再実行であることを優先クラスに属する基準の１つにしているためである。
【００８２】
［第３の実施形態］
上記第２の実施形態では、処理解析サーバ２２０のトランザクション実行部２２２１は、図１２に示すフローチャートにおいて、データのフラグ２３３５の値が１であれば（ステップＳ２０８でＮＯ）、直ちにステップＳ２１１の処理へ移行した。本実施形態では、データのフラグ２３３５の値が１の場合、図１４のフローチャートに示すように、フラグ２３３５の有効期限２３３６を確認し（ステップＳ３０１）、有効期限切れでなければステップＳ２１１の処理へ移行し、有効期限切れであればデータを更新するステップＳ２０９の処理へ移行するようにした点で、第２の実施形態と相違する。
【００８３】
第２の実施形態では、データ格納サーバ２３０のフラグ管理部２３２２が有効期限切れのフラグ２３３５を定期的に検出して値を元に戻している。しかし、定期的な動作であるため、有効期限が既に切れているのに値が元に戻されていないフラグ２３３５が発生し得る。本実施形態では、そのような有効期限切れのフラグ２３３５によって、優先クラスに属さない処理要求がコミットに失敗するのを防止する。
【００８４】
本実施形態のデータ格納サーバは、第２の実施形態のデータ格納サーバ２３０と同じであっても良い。この場合、データ格納サーバ２３０のフラグ管理部２３２２が有効期限切れを検出して値を０に戻したフラグに関しては、処理解析サーバ２２０は図１４のステップＳ３０１の判定処理を行う必要がなく、処理解析サーバ２２０の処理量を削減することができる。
【００８５】
また本実施形態のデータ格納サーバは、第２の実施形態のデータ格納サーバ２３０からフラグ管理部２３２２の機能を省略したものであっても良い。この場合、データ格納サーバ２３０の処理量を削減することができる。
【００８６】
［第４の実施形態］
第２の実施形態では、フラグ２３３５とは独立にその有効期限２３３６を記憶するようにしたが、本実施形態では、フラグ１３２の値自体を有効期限とする。
【００８７】
図１５は、本実施形態におけるデータ格納サーバ４３０のブロック図である。データ格納サーバ４３０は、処理入出力部４３１、処理実行部４３２、およびデータ格納部４３３を有する。処理入出力部４３１は、処理解析サーバとの通信部４３１１を有する。データ格納部４３３は、最新のデータを格納する格納部４３３１を有する。格納部４３３１に格納されるデータ４３３２は、ＫＶデータ４３３３、バージョン情報４３３４、およびフラグ４３３５を有する。ＫＶデータ４３３３は、キー値とバリュー値とのペアである。バージョン情報４３３４は、ＫＶデータ４３３３のバージョンを表す。フラグ４３３５は有効期限を表す。フラグ４３３５が表す有効期限が現在時刻より古い時刻であるときは、当該フラグ４３３５は優先クラスに属さない処理要求からのＫＶデータ４３３３の更新を禁止する。フラグ４３３５が表す有効期限が現在時刻より古くない時刻であるときは、当該フラグ４３５５は優先クラスに属さない処理要求からのＫＶデータ４３３３の更新を禁止しない。フラグ４３３５の初期値は、現在時刻より古い時刻である。処理実行部４３２は、処理解析サーバから要求された処理を行う処理部４３２１を有する。
【００８８】
本実施形態における処理解析サーバは、基本的に第２の実施形態における処理解析サーバ２３０と同じである。但し、本実施形態の処理解析サーバ２３０は、図１２の処理に代えて図１６に示す処理を実行する。以下、第２の実施形態との相違点を中心に、本実施形態の処理解析サーバ２３０の動作を説明する。
【００８９】
処理解析サーバ２２０のトランザクション実行部２２２１が実行する図１６の処理中、ステップＳ４０１、Ｓ４０２以外の処理は、図１２に示す処理と同じである。
【００９０】
図１６のステップＳ４０１では、トランザクション実行部２２２１は、データ４３３２のフラグ４３３５をデータ格納サーバ４３０から取得し、そのフラグ４３３５が表す有効期限が現在時刻より古いか否かを判定する。若し、フラグ４３３５が表す有効期限が現在時刻より古くなければ、当該優先クラスに属さない処理要求に係るデータの更新を行えないためコミット失敗と判断し、当該処理要求を再試行するためにステップＳ２１１の処理へと進む。他方、フラグ４３３５が表す有効期限が現在時刻より古ければ、トランザクション実行部２２２１は、当該処理要求で更新したデータの内容をデータ格納サーバ４３０に反映し（ステップＳ２０９）、クライアントへ当該処理要求が正常に終了した旨の成功応答を送信し（ステップＳ２１０）、ステップＳ２０１の処理へ戻る。
【００９１】
トランザクション実行部２２２１は、ステップＳ２１１では、処理の完了した処理要求が優先クラスの基準を満たしているか否かを優先判定部２２２２により再び判定する。トランザクション実行部２２２１は、優先判定部２２２２による判定の結果、処理要求が全ての判定基準を満足していれば、第２の実施形態と同様に、当該処理要求の優先クラスフラグの値を１に設定し（ステップＳ２１２）、フラグの有効期限を算出する（ステップＳ２１３）。そして、本実施形態では、トランザクション実行部２２２１は、データ格納サーバ４３０のデータのフラグ４３３５にステップＳ２１３で算出した有効期限を設定する（ステップＳ４０２）。そして、トランザクション実行部２２２１は、ステップＳ２１５の処理へと進む。他方、トランザクション実行部２２２１は、優先判定部２２２２による判定の結果、処理要求が判定基準のうちの少なくとも１つの判定基準を満足していなければ、ステップＳ２１２、Ｓ２１３、Ｓ４０２の処理をスキップして、ステップＳ２１５の処理へと進む。ステップＳ２１５では、トランザクション実行部２２２１は、当該処理要求が使用する最新のデータをデータ格納サーバ４３０からコピーデータ格納部２２３１にコピーする。そして、トランザクション実行部２２２１は、ステップＳ２０３に戻り、当該処理要求を再実行する。
【００９２】
このように本実施形態によれば、優先クラスに属さない処理要求によるデータの更新を制限するフラグ４３３５の値自体を有効期限としたため、フラグの値とその有効期限とを独立に記憶する構成に比べてデータ量を削減することができる。
【００９３】
［第５の実施形態］
第２の実施形態では、処理解析サーバ２２０のトランザクション実行部２２２１は、図１２に示すフローチャートにおいて、データのフラグ２３３５の値が１であれば（ステップＳ２０８でＮＯ）、ステップＳ２１１の処理へ移行して処理要求を再実行した。本実施形態では、データのフラグ２３３５の値が１の場合、図１７のフローチャートに示すように、クライアントにエラー応答を送信し（ステップＳ５０１）、ステップＳ２０１の処理に戻って次の処理要求をクライアントから受信するようにした点で、第２の実施形態と相違する。
【００９４】
優先クラスに属さない処理要求が更新を希望するデータのフラグ２３３５の値が１である場合、そのフラグ２３３５の値が０になるまで、優先クラスに属さない処理要求はエラーし続けることになる。その影響は、優先クラスに属する処理要求をロングトランザクションとする場合に特に顕著である。そこで、本実施形態では、優先クラスに属さない処理要求が更新を希望するデータのフラグ２３３５の値が１であった場合、その処理要求を再実行せずにエラーとし、処理解析サーバの処理を次の処理要求に進ませる。これにより、次の処理要求が参照のみに係る処理要求、または優先クラスに属する処理要求とは異なるデータの更新を行う処理要求の場合、処理を滞らせることなく運用し続けることができ、システム全体のスループットを高めることができる。
【００９５】
本実施形態は、第２の実施形態を前提としたが、第３および第４の実施形態を前提としてもよい。第３の実施形態を前提とする場合、図１４のステップＳ３０１でＮＯと判定した場合に処理要求をエラーとする。また第４の実施形態を前提とする場合、図１６のステップ４０１でＮＯと判定した場合に処理要求をエラーとする。
【００９６】
［第６の実施形態］
図１８は、本実施形態における処理解析サーバのブロック図である。処理解析サーバ６２０は、処理入出力部６２１と処理実行部６２２とデータ格納部６２３を有する。処理入出力部２２１は、通信部２２１１と通信部２２１２とを有する。処理実行部６２２は、トランザクション実行部６２２１と優先判定部６２２２とフラグ処理部６２２３とを有する。データ格納部６２３は、コピーデータ格納部６２３１と優先判定基準格納部６２３２と処理実行時間格納部６２３３と優先リスト６２３４とを有する。これらのうち、優先判定基準格納部６２３２と優先リスト６２３４と優先判定部６２２２以外の要素は、第２の実施形態における対応する要素と同じである。
【００９７】
本実施形態では、優先判定基準格納部６２３２には、図１９に示す３つの判定基準が記憶されている。判定基準２、３は、第２の実施形態における図９の判定基準２、３と同じである。判定基準１は、クライアントから処理解析サーバ６２０に送信される処理要求に値１の優先フラグが付加されているか、或いは、優先リスト６２３４に記載のデータを参使用する処理要求であることである。
【００９８】
優先リスト６２３４の一例を図２０に示す。図中、ＩＤはデータを一意に識別する識別子である。また、プライオリティはリストの各列の優先度であり、０が一番高く、その次に１が高く、２が一番低くなっている。このプライオリティは、優先リスト６２３４中の一部の列だけを使用するためのものである。すなわち、外部から優先判定部６２２２に与える優先度指定によって、リスト中の使用する列を限定する。例えば、外部より優先度指定として優先度１を与えた場合、優先リスト６２３４の３つの列のうち、優先度０、１の２つの列を使用する。以下では、優先度指定せずに全列を使用する場合について説明する。なお、常に全列を使用する場合、上記プライオリティは省略することができる。
【００９９】
優先リスト６２３４の先頭の列には、ＩＤ＝１、ＩＤ＝２が記述されている。これは、トランザクション処理に必要なデータにＩＤ＝１のデータとＩＤ＝２のデータとが含まれる場合、判定基準１を満たすことを表している。また、２番目の列は、トランザクション処理に必要なデータにＩＤ＝３が含まれる場合、判定基準１を満たすことを表している。また、３番目の列は、トランザクション処理に必要なデータにＩＤ＝７が含まれる場合、判定基準１を満たすことを表している。
【０１００】
図２０に示す優先リスト６２３４では、ＩＤ＝１のデータとＩＤ＝２のデータの何れか一方のみしか使用しない処理要求は判定基準１を満たさない。若し、ＩＤ＝２のデータを使用していればＩＤ＝１のデータの使用の有無に関係なく優先処理を行うが、ＩＤ＝１のデータを使用しているときはＩＤ＝２のデータも一緒に使用しているときのみ優先処理を行うように設定したい場合は、図２１に示すような優先リストにすればよい。
【０１０１】
本実施形態では、処理解析サーバ６２０の優先判定部６２２２は、処理要求が優先クラスに属しているか否かを判定する際に、優先リスト６２３４を参照する。そして、優先判定部６２２２は、当該処理要求が、優先リスト６２３４の何れかの列に記載された全てのデータを参照または更新していれば、判定基準１を満たすと判断する。優先判定部６２２２は、判定基準１を満たす場合、残りの判定基準２、３を満たすか否かを判定し、全ての判定基準１〜３を満たす場合、当該処理要求は優先クラスに属すると判定する。
【０１０２】
次に本実施形態の効果を説明する。クライアントが、或るデータを参照または更新する処理要求については優先的な処理を希望する場合、第２の実施形態では、クライアント自身がその処理要求に値１の優先フラグを付加して処理解析サーバ６２０へ送信する必要がある。これに対して本実施形態では、予め優先リスト６２３４を設定しておくことで、所定のデータを参照または更新する処理要求については、その処理要求に値１の優先フラグを付加しなくても、値１の優先フラグを付加した場合と同様の扱いとなる。
【０１０３】
また本実施形態では、優先リスト６２３４に記載されたデータを使用しない処理要求であっても、クライアントが値１の優先フラグを付加した処理要求は、優先リスト６２３４に記載されたデータを使用する処理要求と同様に扱うことが可能である。但し、図１９に示した判定基準１から「処理要求に付加された優先フラグの値が１であること」という要件を削除した実施の形態としてもよい。
【０１０４】
［第７の実施形態］
第２の実施形態では、処理解析サーバ２２０のトランザクション実行部２２２１は、図１２に示すフローチャートにおいて、データのバージョン情報が一致しない場合（ステップＳ２０５でＮＯ）、直ちにステップＳ２１１の処理へ移行した。本実施形態では、データのバージョン情報が一致しない場合、図２２のフローチャートに示すように、トランザクション実行部２２２１は、バージョン情報が一致しなかったデータが更新データであるか否かを確認する（ステップＳ７０１）。そして、更新データのバージョンが一致しなかった場合には（ステップＳ７０１でＹＥＳ）、当該処理要求を再実行することなくクライアントにエラー応答を送信し（ステップＳ７０２）、ステップＳ２０１の処理に戻って次の処理要求をクライアントから受信する。他方、バージョン情報が一致しなかったデータが更新データでなく参照データであれば（ステップＳ７０１でＮＯ）、第２の実施形態と同様に、ステップＳ２１１へ移行して当該処理要求の再実行を行う。
【０１０５】
このように本実施形態によれば、処理要求に係る処理の完了時、当該処理要求で使用したデータのバージョン情報が変わっていた場合、その原因が更新データにあれば再実行せずにクライアントにエラーを返すことができる。そのため、クライアントは、更新された値を確認した上で当該処理要求を再度実行するか否かを判断することができる。例えば、元のデータが示す値を２倍に更新する処理要求を実行したとき、クライアントは、値が既に更新されていたらその更新された値を確認してから再度処理を実行したい場合がある。本実施形態では、そのような要望に応えることができる。
【０１０６】
本実施形態は、第２の実施形態を前提としたが、第３乃至第６の実施形態を前提としてもよい。
【０１０７】
［第８の実施形態］
第２の実施形態では、処理解析サーバ２２０は、フラグの有効期限の算出、フラグの値の設定、有効期限の書き込みを自ら実施したが、本実施形態では、それらの処理を処理解析サーバ２２０からの要求に従ってデータ格納サーバ２３０で実施する。また、第２の実施形態では、処理解析サーバ２２０は、処理要求に係る処理の実行完了時、処理要求で使用したデータのバージョン情報が変わっていないか否かの確認、データのフラグの値の確認等を自ら実施したが、本実施形態では、それらの処理を処理解析サーバ２２０からの要求に従ってデータ格納サーバ２３０で実施する。
【０１０８】
本実施形態では、処理解析サーバ２２０の処理実行部２２２におけるトランザクション実行部２２２１は、図１２に示す処理に代えて図２３に示す処理を実行する。また、本実施形態では、データ格納サーバ２３０の処理実行部２３２における処理部２３２１は、図２４および図２５に示す処理を実行する機能を有する。
【０１０９】
図２３において、ステップＳ８０１〜Ｓ８０４の処理は図１２におけるステップＳ２０１〜Ｓ２０４の処理と同じである。処理要求に係る処理の完了後、処理解析サーバ２２０のトランザクション実行部２２２１は、データの一貫性を保証するために、当該処理要求の優先クラスフラグの値、参照および更新するデータに関する情報を有するデータ反映要求をデータ格納サーバ２３０へ送信する（ステップＳ８０５）。上記参照および更新するデータに関する情報は、参照または更新するデータの識別情報（例えばキー値）、バージョン情報、更新するデータについては更新後データを有する。
【０１１０】
図２４は、上記データ反映要求を受信したデータ格納サーバ２３０の処理部２３２１が実行する処理の一例を示すフローチャートである。データ格納サーバ２３０の処理部２３２１は、データ反映要求に含まれるデータ識別子で特定されるデータの現在のバージョン情報２３３４がデータ反映要求に含まれるバージョン情報と同じか否かを確認する（ステップＳ８３１）。若し両者のバージョン情報が相違していれば、エラー応答を処理解析サーバ２２０へ送信する（ステップＳ８３２）。
【０１１１】
他方、双方のバージョン情報２３３４が一致していれば、処理部２３２１は、当該処理要求がデータの更新を行う更新トランザクションか否かを判定する（ステップＳ８３３）。若し更新トランザクションでなく、データの参照のみを行う参照トランザクションであれば、処理部２３２１は、正常応答を処理解析サーバ２２０へ送信する（ステップＳ８３７）。
【０１１２】
また、当該処理要求がデータの更新を行う更新トランザクションであれば（ステップＳ８３３でＹＥＳ）、処理部２３２１は、当該処理要求の優先クラスフラグが値１か否か、即ち優先クラスに属するか否かを判定する（ステップＳ８３４）。若し優先クラスに属する処理要求であれば（ステップＳ８３４でＹＥＳ）、処理部２３２１は、当該処理要求に含まれる更新後データでデータ格納部２３３の更新前のＫＶデータ２３３３を書き換え、バージョン情報２３３４を例えばインクリメントして更新する（ステップＳ８３６）。そして、処理部２３２１は、正常応答を処理解析サーバ２２０に送信する（ステップＳ８３７）。
【０１１３】
しかし、当該処理要求が優先クラスに属しない処理要求であれば（ステップＳ８３４でＮＯ）、当該処理要求で更新対象としたデータ２３３２のフラグ２３３５をデータ格納部２３３から読み出し、優先クラスに属しない処理要求による更新を制限しない値（例では値０）であるか否かを判定する（ステップＳ８３５）。若しデータのフラグ２３３５が値０でなければ、データの更新を行えないのでエラー応答を処理解析サーバ２２０へ送信する（ステップＳ８３２）。またデータのフラグ２３３５が優先クラスに属しない処理要求による更新を制限しない値０であれば、処理部２３２１は、当該処理要求に含まれる更新後データでデータ格納部２３３の更新前のＫＶデータ２３３３を書き換え、バージョン情報２３３４を例えばインクリメントして更新する（ステップＳ８３６）。そして、処理部２３２１は、正常応答を処理解析サーバ２２０に送信する（ステップＳ８３７）。
【０１１４】
トランザクション実行部２２２１は、データ反映要求に対する応答をデータ格納サーバ２３０から受信し、正常応答か否かを判定する（図２３のステップＳ８０６）。そして、正常応答であれば、クライアントに対して成功応答を送信する（ステップＳ８０７）。他方、エラー応答であれば、トランザクション実行部２２２１は、ステップＳ８０８の処理へ進む。
【０１１５】
ステップＳ８０８では、トランザクション実行部２２２１は、処理の完了した処理要求が優先クラスの基準を満たしているか否かを優先判定部２２２２により再び判定する。そして、トランザクション実行部２２２１は、優先判定部２２２２による判定の結果、処理要求が全ての判定基準１〜３を満足していれば、以下の処理を行う。
【０１１６】
まずトランザクション実行部２２２１は、当該処理要求の優先クラスフラグの値を１に設定する（ステップＳ８０９）。次にトランザクション実行部２２２１は、フラグ設定要求をデータ格納サーバ２３０へ送信する（ステップＳ８１０）。上記フラグ設定要求は、当該処理要求で使用するデータの識別情報（例えばキー値）と当該処理要求の処理時間の情報とを有する。そして、トランザクション実行部２２２１は、ステップＳ８１１の処理へと進む。
【０１１７】
他方、トランザクション実行部２２２１は、優先判定部２２２２による判定の結果、処理要求が判定基準１〜３のうちの少なくとも１つの判定基準を満足していなければ、ステップＳ８０９〜Ｓ８１０の処理をスキップして、ステップＳ８１１の処理へと進む。
【０１１８】
ステップＳ８１１では、トランザクション実行部２２２１は、当該処理要求が使用する最新のデータをデータ格納サーバ２３０からコピーデータ格納部２２３１にコピーする。そして、トランザクション実行部２２２１は、ステップＳ８０３に戻り、当該処理要求を再実行する。
【０１１９】
図２５は上記フラグ設定要求を受信したデータ格納サーバ２３０の処理部２３２１が実行する処理の一例を示すフローチャートである。データ格納サーバ２３０の処理部２３２１は、フラグ設定要求に含まれる処理要求の処理時間からフラグの有効期限を算出する（ステップＳ８５１）。フラグの有効期限の算出は、処理解析サーバ２２０のフラグ処理部２２２３で行った有効期限の算出と同じである。
【０１２０】
次にデータ格納サーバ２３０の処理部２３２１は、データのフラグの更新と有効期限の設定とを行う（ステップＳ８５２）。データのフラグの更新では、フラグ処理部２２２３は、データ格納サーバ２３０のデータ格納部２３３１に記憶されたデータ２３３２のうち、フラグ設定要求に含まれるデータ識別情報で特定される全てのデータ２３３２のフラグ２３３５の値を１に更新し、且つ、有効期限２３３６の値をステップＳ８５１で算出した有効期限の値に更新する。
【０１２１】
このように本実施形態では、第２の実施形態と比較して、処理解析サーバ２２０の負荷を軽減することができる。その理由は、第２の実施形態では処理解析サーバ２２０自身が実施していたフラグの有効期限の算出、フラグの値の設定、有効期限の書き込みの処理を、本実施形態では処理解析サーバ２２０からの要求に従ってデータ格納サーバ２３０で実施するためである。また、第２の実施形態では処理解析サーバ２２０自身が実施していたバージョン情報の確認、データのフラグの値の確認等の処理を、本実施形態では処理解析サーバ２２０からの要求に従ってデータ格納サーバ２３０で実施するためである。
【０１２２】
本実施形態は、第２の実施形態を前提としたが、第３乃至第７の実施形態を前提としてもよい。なお、第５の実施形態を前提とする場合、処理解析サーバは図２３の処理に代えて図２６の処理を実行し、データ格納サーバは図２４の処理に代えて図２７の処理を実行する。図２７を参照すると、データ格納サーバは、バージョン情報が一致しない場合、処理解析サーバに対して第１のエラー応答を送信し（ステップＳ８３２）、データのフラグが値０でない場合、第２のエラー応答を送信する（ステップＳ８５１）。即ち、データ格納サーバは、エラーの種別を処理解析サーバへ通知する。図２６を参照すると、処理解析サーバは、エラー応答を受信すると、その種別を判定し、第１のエラー応答であれば（ステップＳ８４１でＹＥＳ）、ステップＳ８０８の処理へ進み、第２のエラー応答であれば（ステップＳ８４１でＮＯ）、クライアントにエラー応答を送信し、ステップＳ８０１の処理へ進む。
【０１２３】
また、第７の実施形態を前提とする場合、処理解析サーバは図２３の処理に代えて図２６の処理を実行し、データ格納サーバは図２４の処理に代えて図２８の処理を実行する。図２８を参照すると、データ格納サーバは、バージョン情報が一致しない場合、バージョンが一致しないデータが更新データか否かを判定し（ステップＳ８６１）、更新データでなければ、処理解析サーバに対して第１のエラー応答を送信し（ステップＳ８６２）、更新データであれば、第２のエラー応答を送信する（ステップＳ８５１）。処理解析サーバは、エラー応答を受信すると、その種別を判定し、第１のエラー応答であれば（ステップＳ８４１でＹＥＳ）、ステップＳ８０８の処理へ進み、第２のエラー応答であれば（ステップＳ８４１でＮＯ）、クライアントにエラー応答を送信し、ステップＳ８０１の処理へ進む。
【０１２４】
以上、本発明を幾つかの実施形態を挙げて説明したが、本発明は以上の実施形態にのみ限定されず、その他各種の付加変更が可能である。
【産業上の利用可能性】
【０１２５】
本発明はトランザクション処理システム、特にロングトランザクションを処理するシステムに利用して有益である。
【０１２６】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
（付記１）
トランザクションを送信するクライアント装置と、
データとフラグとの組を記憶するデータ格納装置と、
前記クライアント装置と前記データ格納装置との間に接続されたサーバ装置と
を有し、
前記サーバ装置は、
前記クライアント装置から受信した前記トランザクションが、優先クラスに属するか否かを判定する優先判定手段と、
前記データ格納装置に格納された前記データのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定するフラグ処理手段と、
楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御するトランザクション実行部と
を有する
トランザクション処理システム。
（付記２）
前記データ格納装置は、前記フラグの有効期限を記憶する
付記１に記載のトランザクション処理システム。
（付記３）
前記フラグの有効期限は、前記優先クラスに属する前記トランザクションの実行所要時間に基づいて決定される
付記２に記載のトランザクション処理システム。
（付記４）
前記フラグの値自体が前記フラグの有効期限を表す
付記３に記載のトランザクション処理システム。
（付記５）
前記サーバ装置の前記優先判定手段は、前記判定では、
前記優先クラスに属する旨の情報が前記クライアント装置から受信した前記トランザクションに付加されていること、
前記トランザクションのエラー回数が閾値の回数以上であること、
前記トランザクションの実行所要時間が閾値の時間以上であること、
前記トランザクションで使用する前記データが、前記サーバ装置に記憶された優先リストに記載されたデータに一致すること、
のうちの少なくとも１つに基づいて、前記トランザクションが前記優先クラスに属するか否かを判定する
付記１乃至４の何れかに記載のトランザクション処理システム。
（付記６）
前記データは、前記データのバージョン情報を有し、
前記サーバ装置の前記トランザクション実行部は、
前記優先クラスに属していない前記トランザクションについては、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであり、且つ、前記トランザクションが更新する前記データの前記フラグの値が前記優先クラスに属さない前記トランザクションによる更新を制限しない値であることを確認して、前記トランザクションが更新する前記データおよび前記バージョン情報を更新し、前記トランザクションのコミットを行い、
前記優先クラスに属する前記トランザクションについては、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであることを確認して、前記トランザクションのコミットを行う
付記１乃至５の何れかに記載のトランザクション処理システム。
（付記７）
前記サーバ装置の前記トランザクション実行部は、前記コミットでは、前記データのバージョン情報と前記フラグの値とを前記データ格納装置から前記サーバ装置に読み出して、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであることを確認し、また、前記トランザクションが更新する前記データの前記フラグの値が前記優先クラスに属さない前記トランザクションによる更新を制限しない値であることを確認する
付記６に記載のトランザクション処理システム。
（付記８）
前記サーバ装置の前記トランザクション実行部は、前記コミットでは、前記コミットの対象とする前記トランザクションが前記優先クラスに属するか否かの情報と、前記コミットの対象とする前記トランザクションが参照または更新した前記データの識別情報、バージョン情報および更新後データとを有するデータ反映要求を前記データ格納装置へ送信し、前記データ反映要求に対する前記データ格納装置からの応答に基づいて前記コミットを行い、
前記データ格納装置は、
前記データ反映要求を受信し、
前記優先クラスに属していない前記トランザクションに係る前記データ反映要求については、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであり、且つ、前記トランザクションが更新する前記データの前記フラグの値が前記優先クラスに属さない前記トランザクションによる更新を制限しない値であることを確認して、前記トランザクションが更新する前記データの値を前記更新後データに更新すると共に前記バージョン情報を更新し、応答を前記処理解析サーバへ送信し、
前記優先クラスに属する前記トランザクションに係る前記ついては、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであることを確認して、前記トランザクションが更新する前記データの値を前記更新後データに更新すると共に前記バージョン情報を更新し、応答を前記処理解析サーバへ送信する
付記６に記載のトランザクション処理システム。
（付記９）
前記サーバ装置の前記トランザクション実行部は、前記コミットに失敗した場合、前記トランザクションが前記優先クラスに属するか否かを確認する処理を含めて、前記コミットに失敗した前記トランザクションを再実行する
付記６に記載のトランザクション処理システム。
（付記１０）
前記サーバ装置の前記トランザクション実行部は、前記優先クラスに属しない前記トランザクションが前記フラグによる制限によって前記コミットに失敗した場合、再実行せずにエラーとする
付記６に記載のトランザクション処理システム。
（付記１１）
クライアント装置と、データとフラグとの組を記憶するデータ格納装置と、前記クライアント装置と前記データ格納装置との間に接続されたサーバ装置とを有するトランザクション処理システムが実行するトランザクション処理方法であって、
前記クライアント装置が、トランザクションを前記サーバ装置へ送信し、
前記サーバ装置が、前記クライアント装置から受信した前記トランザクションが、優先クラスに属するか否かを判定し、前記データ格納装置に格納された前記データのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定し、楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御する
トランザクション処理方法。
（付記１２）
トランザクションを送信するクライアント装置と、データとフラグとの組を記憶するデータ格納装置との間に接続されたサーバ装置であって、
前記クライアント装置から受信した前記トランザクションが、優先クラスに属するか否かを判定する優先判定手段と、
前記データ格納装置に格納された前記データのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定するフラグ処理手段と、
楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御するトランザクション実行部と
を有するサーバ装置。
（付記１３）
前記データ格納装置は、前記フラグの有効期限を記憶する
付記１２に記載のサーバ装置。
（付記１４）
前記フラグの有効期限は、前記優先クラスに属する前記トランザクションの実行所要時間に基づいて決定される
付記１３に記載のサーバ装置。
（付記１５）
前記フラグの値自体が前記フラグの有効期限を表す
付記１４に記載のサーバ装置。
（付記１６）
前記優先判定手段は、前記判定では、
前記優先クラスに属する旨の情報が前記クライアント装置から受信した前記トランザクションに付加されていること、
前記トランザクションのエラー回数が閾値の回数以上であること、
前記トランザクションの実行所要時間が閾値の時間以上であること、
前記トランザクションで使用する前記データが、前記サーバ装置に記憶された優先リストに記載されたデータに一致すること、
のうちの少なくとも１つに基づいて、前記トランザクションが前記優先クラスに属するか否かを判定する
付記１２乃至１５の何れかに記載のサーバ装置。
（付記１７）
前記データは、前記データのバージョン情報を有し、
前記トランザクション実行部は、
前記優先クラスに属していない前記トランザクションについては、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであり、且つ、前記トランザクションが更新する前記データの前記フラグの値が前記優先クラスに属さない前記トランザクションによる更新を制限しない値であることを確認して、前記トランザクションが更新する前記データおよび前記バージョン情報を更新し、前記トランザクションのコミットを行い、
前記優先クラスに属する前記トランザクションについては、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであることを確認して、前記トランザクションのコミットを行う
付記１２乃至１６の何れかに記載のトランザクション処理システム。
（付記１８）
前記トランザクション実行部は、前記コミットでは、前記データのバージョン情報と前記フラグの値とを前記データ格納装置から前記サーバ装置に読み出して、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであることを確認し、また、前記トランザクションが更新する前記データの前記フラグの値が前記優先クラスに属さない前記トランザクションによる更新を制限しない値であることを確認する
付記１７に記載のトランザクション処理システム。
（付記１９）
前記トランザクション実行部は、前記コミットでは、前記コミットの対象とする前記トランザクションが前記優先クラスに属するか否かの情報と、前記コミットの対象とする前記トランザクションが参照または更新した前記データの識別情報、バージョン情報および更新後データとを有するデータ反映要求を前記データ格納装置へ送信し、前記データ反映要求に対する前記データ格納装置からの応答に基づいて前記コミットを行い、
前記データ格納装置は、
前記データ反映要求を受信し、
前記優先クラスに属していない前記トランザクションに係る前記データ反映要求については、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであり、且つ、前記トランザクションが更新する前記データの前記フラグの値が前記優先クラスに属さない前記トランザクションによる更新を制限しない値であることを確認して、前記トランザクションが更新する前記データの値を前記更新後データに更新すると共に前記バージョン情報を更新し、応答を前記処理解析サーバへ送信し、
前記優先クラスに属する前記トランザクションに係る前記ついては、前記トランザクションが使用する前記データの前記バージョン情報が前記トランザクションの実行開始時と同じであることを確認して、前記トランザクションが更新する前記データの値を前記更新後データに更新すると共に前記バージョン情報を更新し、応答を前記処理解析サーバへ送信する
付記１７に記載のサーバ装置。
（付記２０）
前記トランザクション実行部は、前記コミットに失敗した場合、前記トランザクションが前記優先クラスに属するか否かを確認する処理を含めて、前記コミットに失敗した前記トランザクションを再実行する
付記１７に記載のサーバ装置。
（付記２１）
前記トランザクション実行部は、前記優先クラスに属しない前記トランザクションが前記フラグによる制限によって前記コミットに失敗した場合、再実行せずにエラーとする
付記１７に記載のサーバ装置。
（付記２２）
トランザクションを送信するクライアント装置と、データとフラグとの組を記憶するデータ格納装置との間に接続されたサーバ装置が実行するトランザクション処理方法であって、
前記クライアント装置から受信した前記トランザクションが優先クラスに属するか否かを判定し、
前記データ格納装置に格納されたデータのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定し、
楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御する
トランザクション処理方法。
（付記２３）
トランザクションを送信するクライアント装置と、データとフラグとの組を記憶するデータ格納装置との間に接続されたサーバ装置を構成するコンピュータを、
前記クライアント装置から受信した前記トランザクションが、優先クラスに属するか否かを判定する優先判定手段と、
前記データ格納装置に格納された前記データのうち、前記優先クラスに属すると判定した前記トランザクションが使用する前記データと同じ前記組の前記フラグの値を、前記優先クラスに属さない前記トランザクションによる更新を制限する値に設定するフラグ処理手段と、
楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御するトランザクション実行部と
して機能させるためのプログラム。
【符号の説明】
【０１２７】
１００…トランザクション処理システム
１１０…クライアント装置
１２０…サーバ装置
１２１…トランザクション実行部
１２２…優先判定部
１２３…フラグ処理部
１３０…データ格納装置
１３１…データ
１３２…フラグ
１３３…ＫＶデータ
１３４…バージョン情報
【図１】
2015118431.tif 000003
【図２】
2015118431.tif 000004
【図３】
2015118431.tif 000005
【図４】
2015118431.tif 000006
【図５】
2015118431.tif 000007
【図６】
2015118431.tif 000008
【図７】
2015118431.tif 000009
【図８】
2015118431.tif 000010
【図９】
2015118431.tif 000011
【図１０】
2015118431.tif 000012
【図１１】
2015118431.tif 000013
【図１２】
2015118431.tif 000014
【図１３】
2015118431.tif 000015
【図１４】
2015118431.tif 000016
【図１５】
2015118431.tif 000017
【図１６】
2015118431.tif 000018
【図１７】
2015118431.tif 000019
【図１８】
2015118431.tif 000020
【図１９】
2015118431.tif 000021
【図２０】
2015118431.tif 000022
【図２１】
2015118431.tif 000023
【図２２】
2015118431.tif 000024
【図２３】
2015118431.tif 000025
【図２４】
2015118431.tif 000026
【図２５】
2015118431.tif 000027
【図２６】
2015118431.tif 000028
【図２７】
2015118431.tif 000029
【図２８】
2015118431.tif 000030
【図２９】
2015118431.tif 000031