(57)【特許請求の範囲】
【請求項１】
実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータ、及びその数を特定する、トランザクション解析部と、
前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ロック管理部と、
前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、トランザクション実行部と、を備え、
前記トランザクション解析部は、特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかを設定し、
前記トランザクション実行部は、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
ことを特徴とするトランザクション処理装置。
【請求項２】
前記ロック管理部が、特定された前記データに、ロック情報を付加することによって、前記トランザクションにロックを取得させる、
請求項１に記載のトランザクション処理装置。
【請求項３】
前記データベースが、トランザクションでアクセスされるデータと、それに対応するキーとを、ペアデータとして格納している場合に、
前記トランザクション解析部は、前記実行対象となるトランザクションでアクセスされるデータとそれに対応するキーとの前記ペアデータを特定し、
前記ロック管理部は、特定された前記ペアデータのキーを用いて、前記データベースに対して、特定された前記ペアデータの特定の領域に前記ロック情報を書き込むように指示を行ない、それによって前記トランザクションにロックを取得させ、
前記トランザクション実行部は、前記トランザクションの実行後に、特定された前記ペアデータのキーを用いて、前記データベースに格納されている前記ペアデータを更新する、
請求項２に記載のトランザクション処理装置。
【請求項４】
前記実行対象となるトランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかに設定する、排他制御方式設定部を更に備え、
前記トランザクション実行部は、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
請求項１〜３のいずれかに記載のトランザクション処理装置。
【請求項５】
前記排他制御方式設定部が、前記第１の排他制御方式を設定している場合において、前記実行対象となるトランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、前記第１の排他制御方式に代えて、前記第２の排他制御方式を設定する、請求項４に記載のトランザクション処理装置。
【請求項６】
前記トランザクション解析部が、特定された前記データの数が１つの場合に、前記第１の排他制御方式を設定し、特定された前記データの数が２つ以上の場合に、前記第２の排他制御方式を設定する、
請求項１に記載のトランザクション処理装置。
【請求項７】
前記実行対象となっているが、実行が完了していないトランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定し、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、前記実行対象となるトランザクションを、実行対象から排除する、タイムアウト処理部を更に備えている、
請求項１〜６のいずれかに記載のトランザクション処理装置。
【請求項８】
（ａ）コンピュータによって、実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータ、及びその数を特定する、ステップと、
（ｂ）前記コンピュータによって、前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ステップと、
（ｃ）前記コンピュータによって、前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、ステップと、を有し、
前記（ａ）のステップにおいて、特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかを設定し、
前記（ｃ）のステップにおいて、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
ことを特徴とするトランザクション処理方法。
【請求項９】
コンピュータに、
（ａ）実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータ、及びその数を特定する、ステップと、
（ｂ）前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ステップと、
（ｃ）前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、ステップと、
を実行させ、
前記（ａ）のステップにおいて、特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかを設定し、
前記（ｃ）のステップにおいて、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースと連携してトランザクションを処理する、トランザクション処理装置、トラザクション処理方法、及びこれらを実現するためのプログラムに関する。
【背景技術】
【０００２】
近年、スケータブルなアプリケーションの実行基盤として、多数のコンピュータを用いるシステム、いわゆるクラウドシステムが注目されている。また、クラウドシステムのインフラストラクチャにおけるスケーラブルなデータ永続化手段としては、ＫＶＳ（Key Value Store）が広く知られている。
【０００３】
ＫＶＳは、保存対象となるデータ（Value）に対して、対応する一意の標識（Key）を設定し、これらをペア（ＫＶペア）で保存するデータストアである。また、ＫＶＳのうち、特に、複数のサーバ装置又は記憶装置に分散してデータを保存できる機能をもったものは、「分散ＫＶＳ」と呼ばれている。
【０００４】
また、ＫＶＳにおけるトランザクションの排他制御方式としては、楽観的排他制御方式と呼ばれる排他制御方式と、悲観的排他制御方式と呼ばれる排他制御方式とが知られている（例えば、特許文献１及び２参照）。
【０００５】
このうち、楽観的排他制御方式は、トランザクションの実行時において、参照対象又は更新対象となるデータに対してロックを取得しない排他制御方式である。楽観的排他制御方式では、トランザクションのコミット時に、他のトランザクションとの競合がないかどうかがチェックされ、競合がない場合はコミットが確定され、競合がある場合はトランザクションがアボートされる。
【０００６】
一方、悲観的排他制御方式は、トランザクション実行時において、参照対象又は更新対象となるデータに対してロックを取得する排他制御方式である。悲観的排他制御方式では、ロックが取得されると、対象となるトランザクションが終了するまでの間に、他のトランザクションは実行されないため、この方式によれば、確実にトランザクション間の競合を制御することができる。
【０００７】
そして、これらの排他制御方式のうち、楽観的排他制御方式では、ロックが取得されないため、ロック管理のためのコストが発生せず、スケーラビリティに優れるという特徴が備えられる。このため、ＫＶＳを用いるシステムにおいては、楽観的排他制御が採用されることが多くなっている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−１６５３７０号公報
【特許文献２】特開２００９−０３７５４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、楽観的排他制御方式を採用したシステムでは、特定のＫＶペアに対して更新が集中すると、トランザクション同士が頻繁に競合するため、コミットに失敗したトランザクションのやり直しによるオーバーヘッドが大きくなるという問題がある。また、楽観的排他制御方式の性質上、ロングトランザクションは失敗する可能性が高く、いつまでたってもトランザクションのコミットが成功しない可能性がある。
【００１０】
一方、システムにおいて悲観的排他制御方式を採用すれば、トランザクションの競合によりコミットが失敗することはなくなるが、ロックの管理がボトルネックとなり、システムのスケーラビリティが低下してしまう問題がある。
【００１１】
本発明の目的の一例は、上記問題を解消し、更新処理が集中した場合のオーバーヘッドの増大を抑制しつつ、スケーラビリティの低下も抑制し得る、トランザクション処理装置、トランザクション処理方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明の一側面におけるトランザクション処理装置は、実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータを特定する、トランザクション解析部と、
前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ロック管理部と、
前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、トランザクション実行部と、を備えている、
ことを特徴とする。
【００１３】
また、上記目的を達成するため、本発明の一側面におけるトランザクション処理方法は、（ａ）実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータを特定する、ステップと、
（ｂ）前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ステップと、
（ｃ）前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、ステップと、を有する、
ことを特徴とする。
【００１４】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、コンピュータに、
（ａ）実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータを特定する、ステップと、
（ｂ）前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ステップと、
（ｃ）前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、ステップと、
を実行させることを特徴とする。
【発明の効果】
【００１５】
以上のように、本発明によれば、更新処理が集中した場合のオーバーヘッドの増大を抑制しつつ、スケーラビリティの低下も抑制することができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、本発明の実施の形態１におけるトランザクション処理装置の概略構成を示すブロック図である。
【図２】図２は、本発明の実施の形態１におけるトランザクション処理装置の具体的構成を示すブロック図である。
【図３】図３は、本発明の実施の形態１におけるトランザクション処理装置の動作を示すフロー図である。
【図４】図４は、本発明の実施の形態１で利用されるＫＶペアの一例を示す図である。
【図５】図５は、図３に示すステップＳ２０２の実行後に判定される排他違反の一例を説明するための説明図である。
【図６】図６は、図３に示すステップＳ２０２の実行後に判定される排他違反の他の例を説明するための説明図である。
【図７】図７は、図３に示すステップＳ２０５の実行後に判定される排他違反の一例を説明するための説明図である。
【図８】図８は、図３に示すステップＳ２０５の実行後に判定される排他違反の他の例を説明するための説明図である。
【図９】図９は、本発明の実施の形態１におけるトランザクション処理装置のトランザクション再実行処理時の動作を示すフロー図である。
【図１０】図１０は、本発明の実施の形態２におけるトランザクション処理装置の具体的構成を示すブロック図である。
【図１１】図１１は、本発明の実施の形態２において管理されているリトライ回数と平均実行時間との情報の一例を示す図である。
【図１２】図１２は、本発明の実施の形態２におけるトランザクション処理装置の排他制御方式の設定処理時の動作を示すフロー図である。
【図１３】図１３は、は本発明の実施の形態３におけるトランザクション処理装置の具体的構成を示すブロック図である。
【図１４】図１４は、本発明の実施の形態４におけるトランザクション処理装置の具体的構成を示すブロック図である。
【図１５】図１５は、本発明の実施の形態４におけるトランザクション処理装置のトランザクション再実行処理時の動作を示すフロー図である。
【図１６】図１６は、本発明の実施の形態１〜４におけるトランザクション処理装置を実現するコンピュータの一例を示すブロック図である。
【発明を実施するための形態】
【００１７】
（実施の形態１）
以下、本発明の実施の形態１における、トランザクション処理装置、トランザクション処理方法、及びプログラムについて、図１〜図９を参照しながら説明する。
【００１８】
最初に、本実施の形態１におけるトランザクション処理装置の構成について説明する。図１は、本発明の実施の形態１におけるトランザクション処理装置の概略構成を示すブロック図である。
【００１９】
図１に示すように、本実施の形態１におけるトランザクション処理装置１００は、クライアント５００と、データベースとして機能するデータ格納装置２００とに、ネットワーク６００を介して接続されている。クライアント５００は、実行対象となるトランザクション（以下「実行対象トランザクション」と表記する。）を、トランザクション処理装置１００に入力する。トランザクション処理装置１００は、クライアント５００から入力された実行対象トランザクションを受け付け、受け付けた実行対象トランザクションの処理を実行する。
【００２０】
また、図１に示すように、トランザクション処理装置１００は、トランザクション解析部１０１と、ロック管理部１０２と、トランザクション実行部１０３とを備えている。このうち、トランザクション解析部１０１は、まず、実行対象トランザクションを解析して、この実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを判定する。次いで、トランザクション解析部１０１は、データ格納装置２００上の、実行対象トランザクションでアクセスされるデータを特定する。
【００２１】
また、ロック管理部１０２は、実行対象トランザクションがロックを取得して動作するトランザクションである場合に、実行対象トランザクションにロックを取得させる。トランザクション実行部１０３は、実行対象トランザクション以外の別のトランザクションがロックを取得していないことを条件に、実行対象トランザクションを実行する。また、トランザクション実行部１０３は、実行結果に基づいて、実行対象トランザクションでアクセスされる、特定されたデータを更新する。
【００２２】
以上のように、本実施の形態１では、原則として、楽観的排他制御方式が採用されている場合であっても、ロックが必要なトランザクションが入力された場合は、それについてロックの取得が行なわれる。そして、実行対象となるトランザクションであっても、別のトランザクションがロックを取得している場合は、ロックを取得できないので実行されることはない。このため、本実施の形態１によれば、更新処理が集中した場合のオーバーヘッドの増大化が抑制される。また、本実施の形態１では、楽観的排他制御方式の採用が可能であるため、スケーラビリティの低下も同時に抑制される。
【００２３】
続いて、図２を用いて、本実施の形態１におけるトランザクション処理装置の構成を更に具体的に説明する。図２は、本発明の実施の形態１におけるトランザクション処理装置の具体的構成を示すブロック図である。
【００２４】
図２に示すように、本実施の形態１では、トランザクション処理装置１００は、ネットワーク６００を介して、データ格納装置２００及びクライアント５００に加えて、他のトランザクション処理装置３００にも接続されている。そして、トランザクション処理装置１００は、データ格納装置２００及びトランザクション処理装置３００と共に、分散トランザクション処理システム４００を構築している。
【００２５】
また、トランザクション処理装置３００は、トランザクション処理装置１００と同様に構成されている。よって、以下においては、トランザクション処理装置１００の説明によって、トランザクション処理装置３００の説明とする。
【００２６】
更に、本実施の形態１では、トランザクション処理装置１００及トランザクション処理装置３００は、共に、後述するプログラムによって構築することができる。この場合、トランザクション処理装置１００及トランザクション処理装置３００は、同一のコンピュータ内に構築されていても良いし、それぞれ別々のコンピュータに内に構築されていても良い。
【００２７】
また、本実施の形態１では、クライアント５００は、トランザクション処理装置１００に対して、実行対象トランザクションに加えて、実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを明示する情報（以下「ロック要否情報」と表記する。）も入力する。
【００２８】
また、図２に示すように、本実施の形態１では、データ格納装置２００は、ＫＶペアのアクセス管理を行なうＫＶペアアクセス部２０１と、ＫＶペア記憶部２０２とを備えている。ＫＶペア記憶部２０２は、トランザクション処理装置１００によってアクセスされるＫＶペアを格納している。ＫＶペアは、トランザクションでアクセスされるデータ（以下「Ｖａｌｕｅ」とも表記する。）と、それに対応するキー（以下「Ｋｅｙ値」とも表記する。）とで構成されたペアデータである。
【００２９】
ＫＶペアアクセス部２０１は、トランザクション処理装置１００からの後述する種々のアクセス要求を受け付けると、受け付けたアクセス要求で指定されたＫｅｙ値を持つＫＶペアを特定し、特定したＫＶペアに対して読み込み処理又は書き込み処理を実行する。
【００３０】
また、図２に示すように、トランザクション処理装置１００は、図１に示したように、トランザクション解析部１０１と、ロック管理部１０２と、トランザクション実行部１０３とを備えている。但し、このうち、ロック管理部１０２は、更に、ロック情報取出し部１０４と、ロック情報書き込み部１０５とを備えている。
【００３１】
なお、トランザクション処理装置３００は、トランザクション処理装置１００と同様に構成されているので、トランザクション処理装置３００の各部についての図示及び説明については省略する。
【００３２】
トランザクション解析部１０１は、上述したように、まず、クライアント５００から入力された実行対象トランザクションを解析する。具体的には、本実施の形態１では、トランザクション解析部１０１は、実行対象トランザクションがアクセスする１又は２以上のＫＶペアを特定し、ロック管理部１０２に対して、特定したＫＶペアのＫｅｙ値を渡す。また、トランザクション解析部１０１は、Ｋｅｙ値に加え、クライアント５００から入力されたロック要否情報も、ロック管理部１０２に渡す。
【００３３】
ロック管理部１０２は、ロック情報取出し部１０４とロック情報書き込み部１０５とによって、実行対象トランザクションが取得するロックの管理、即ち、後述するロック情報の取得及びロック情報の書き込みを実行する。
【００３４】
ロック情報取出し部１０４は、トランザクション解析部１０１から渡されたＫｅｙ値を基に、データ格納装置２００から、このＫｅｙ値に対応するＫＶペアを取得する。また、ロック情報取出し部１０４は、ＫＶペア記憶部２０２において、取得したＫＶペアのＶａｌｕｅが格納されている領域（以下「Ｖａｌｕｅ部」と表記する。）に、このＫＶペアがロックされていることを示す情報（以下「ロック情報」と表記する。）が存在するかどうかを確認する。確認の結果、ロック情報が存在しているＫＶペアが一つでも存在している場合は、ロック情報取出し部１０４は、クライアント５００から入力された実行対象トランザクションを待ち合わせるか、アボートさせる。
【００３５】
ロック情報書き込み部１０５は、トランザクション解析部１０１から渡された、実行対象トランザクションがロックを取得して動作するトランザクションかどうかを示す情報（ロック要否情報）を取得する。そして、ロック情報書き込み部１０５は、取得したロック要否情報を基に、実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを判定する。
【００３６】
そして、ロック情報書き込み部１０５は、実行対象トランザクションがロックを取得して動作するトランザクションである場合は、実行対象トランザクションにロックを取得させる。具体的には、ロック情報書き込み部１０５は、ロック情報取出し部１０４によって取得されたＫＶペアのＶａｌｕｅ部にロック情報を埋め込み、ロック情報が埋め込まれたＫＶペアを、データ格納装置２００のＫＶペア記憶部２０２に書き込ませる。
【００３７】
本実施の形態１において、ＫＶペアのＶａｌｕｅ部に格納されるロック情報は、特に限定されず、ロックの取得が必要なトランザクションを一意に特定できる情報であれば良い。例えば、ロック情報としては、ロックの取得が必要なトランザクションについての、トランザクション毎に一意に割り当てられたトランザクション番号を含む情報が挙げられる（後述の図４参照）。また、Ｖａｌｕｅ部の先頭の決められたサイズの領域が、ロック情報を格納する領域として設定されている場合であれば、上述のロック情報取出し部１０４は、ＫＶペアを取得した際に、Ｖａｌｕｅ部の先頭の設定された領域を確認するだけで、取得したＫＶペアにロック情報が存在しているかどうかを判断ができる。
【００３８】
なお、本実施の形態１は、ロック情報がＶａｌｕｅ部に埋め込まれた態様のみに限定されることはない。本実施の形態１では、ロック情報は、Ｖａｌｕｅ部以外の領域、例えば、ＫＶペアのＫｅｙ値が格納されている領域（以下「Ｋｅｙ部」と表記する。）に埋め込まれていても良い。
【００３９】
そして、ロック情報書き込み部１０５によって、取得されたＫＶペアのＶａｌｕｅ部にロック情報が埋め込まれ、このＫＶペアがＫＶペア記憶部２０２に書き込まれると、ロック管理部１０２トランザクション実行部１０３に、実行対象トランザクションの実行を依頼する。
【００４０】
また、ロック情報書き込み部１０５は、クライアント５００から入力された実行対象トランザクションがロックを取得して動作するトランザクションでない場合は、ロック情報取出し部１０４によって取得されたＫＶペアのＶａｌｕｅ部へのロック情報の埋め込みは行なわない。この場合、ロック情報書き込み部１０５は、埋め込み処理を行わずに、トランザクション実行部１０３に実行対象トランザクションの実行を依頼する。
【００４１】
また、ロック情報書き込み部１０５は、実行対象トランザクションがロックを取得して動作していた場合は、トランザクション実行部１０３によるトランザクション処理の完了後、処理対象となったＫＶペアのＶａｌｕｅ部のロック情報を削除する。そして、ロック情報書き込み部１０５は、ロック情報が削除されたＫＶペアを用いて、データ格納装置２００のＫＶペア記憶部２０２に格納されているＫＶペアを更新する。
【００４２】
なお、本実施の形態１では、ロック情報書き込み部１０５は、排他制御方式として、楽観的排他制御方式を採用し、この制御方式にそって、データ格納装置２００ＫＶペア記憶部に対してＫＶペアの書き込み（更新）を実行する。
【００４３】
トランザクション実行部１０３は、本実施の形態１では、ロック管理部１０２からトランザクションの実行を依頼されると、楽観的排他制御方式に沿って、実行対象トランザクションの処理を実行する。また、トランザクション実行部１０３は、処理結果を反映させるため、トランザクションの実行後、ＫＶペアのＫｅｙ値を用いて、データ格納部２０１のＫＶペア記憶部２０２に格納されているＫＶペアのＶａｌｕｅを更新する。更に、トランザクション実行部１０３は、実行対象トランザクションの実行が完了すると、ロック管理部１０２に、実行対象トランザクションの完了を通知する。
【００４４】
また、ロック管理部１０２は、実行対象トランザクションがアクセスするＫＶペアを、事前にデータ格納装置２００から取得している。よって、ロック管理部１０２は、トランザクション実行部１０３に実行対象トランザクションの実行を依頼する際、実行対象トランザクションでアクセスされるＫＶペアの情報も一緒に渡す。こうすることで、トランザクション実行部１０３がトランザクションの実行に際して改めてデータ格納装置２００からＫＶペアを取得する必要がなくなる。
【００４５】
［装置動作］
次に、本実施の形態１におけるトランザクション処理装置１００の動作について図３を用いて説明する。図３は、本発明の実施の形態１におけるトランザクション処理装置の動作を示すフロー図である。以下の説明においては、適宜図１及び図２を参酌する。また、本実施の形態１では、トランザクション処理装置１００を動作させることによって、トランザクション処理方法が実施される。よって、本実施の形態１におけるトランザクション処理方法の説明は、以下のトランザクション処理装置１００の動作説明に代える。
【００４６】
まず、前提として、クライアント５００が、トランザクション処理装置１００に対して、実行対象トランザクションを入力する。また、このとき、クライアント５００は、実行対象トランザクションに加えて、ロック要否情報も入力する。
【００４７】
そして、実行対象トランザクション及びロック要否情報が入力されると、図３に示すように、トランザクション処理装置１００は、クライアント５００から入力されたトランザクション及びロック要否情報を受け付ける（ステップＳ００１）。
【００４８】
次に、トランザクション解析部１０１は、入力された実行対象トランザクションを解析し、実行対象トランザクションがアクセスする１又は２以上のＫＶペアを特定する（ステップＳ００２）。また、ステップＳ００２では、トランザクション解析部１０１は、特定したＫＶペアのＫｅｙ値と実行対象トランザクションのロック要否情報とを、ロック管理部１０２に入力する。
【００４９】
次に、ロック管理部１０２において、ロック情報取出し部１０４は、トランザクション解析部１０１から入力されたＫｅｙ値に基づいて、データ格納装置２００のＫＶペアアクセス部２０１に対して、ＫＶペアの取得を要求する（ステップＳ００３）。これにより、ＫＶペアアクセス部２０１は、ロック情報取出し部１０４から入力されたＫｅｙ値を持つＫＶペアを、ＫＶペア記憶部２０２から取得する。また、ＫＶペアアクセス部２０１は、ロック情報取出し部１０４に対して、取得したＫＶペアを返却する。
【００５０】
次に、ロック情報取出し部１０４は、ステップＳ００３で取得したＫＶペアにおいて１つでもロックがかかっているかどうかを、即ち、ステップＳ００３で取得した各ＫＶペアのＶａｌｕｅ部にロック情報が存在しているかどうかを判定する（ステップＳ００４）。
【００５１】
例えば、ＫＶペアのＶａｌｕｅ部の先頭の決められたサイズの領域が、ロック情報を格納する領域として設定されているとする。このような領域としては、Ｖａｌｕｅ部の先頭３２バイトの領域等が挙げられる。この場合、ステップＳ００４では、ロック情報取出し部１０４は、ＫＶペアを取得後、Ｖａｌｕｅ部の設定された領域を調べることで、取得したＫＶペアが他のトランザクションによってロックされているかどうかを判定することができる。
【００５２】
ここで、図４を用いて、ロック情報が埋め込まれたＫＶペアの具体例について説明する。図４は、本発明の実施の形態１で利用されるＫＶペアの一例を示す図である。図４の例では、ＫＶペアのＶａｌｕｅ部の先頭が、ロック情報を格納する領域として使われている。また、図４の例では、ロック情報として、どのトランザクションが当該ＫＶペアをロックしているかが分かるように、トランザクションを一意に示すトランザクション番号が用いられている。
【００５３】
また、トランザクション番号は、トランザクションを一意に特定可能なものであれば良く、特に限定されるものではない。トランザクション番号の例としては、トランザクションを処理するサーバのサーバ名と、各サーバで受け付けたトランザクションに一意に付加された番号との組み合わせが挙げられる。更に、ＫＶペアがロックされていない場合は、ロック情報の代わりに、ロックがされていないことを示す情報が埋め込まれる。ロックがされていないことを示す情報の例としては、「０（ゼロ）」が挙げられる。
【００５４】
次に、上述のステップＳ００４の判定の結果、いずれか又は全てのＫＶペアにロック情報が存在した場合は、ロック情報取出し部１０４は、実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを判定する。（ステップＳ１０１）。
【００５５】
ステップＳ１０１の判定の結果、実行対象トランザクションがロックを取得して動作するトランザクションである場合は、ロック情報取出し部１０４は、実行対象トランザクションの実行を待ち合わせるための処理を行う（ステップＳ１０２）。
【００５６】
具体的には、ステップＳ１０２では、ロック情報取出し部１０４は、実行対象トランザクションのトランザクション番号と、実行対象トランザクションがアクセスするＫＶペアのＫｅｙ値とを、ロック管理部１０２によって保持されているキューに格納する。キューに格納されているトランザクションは、定期的に再実行される。なお、本明細書では、今後、キューに格納する情報のことを便宜上、「トランザクション情報」と表記する。
【００５７】
一方、ステップＳ１０１の判定の結果、実行対象トランザクションがロックを取得して動作するトランザクションでない場合は、ロック情報取出し部１０４は、実行対象トランザクションをアボートして、クライアント５００に排他違反によるエラーを返却する（ステップＳ１０３）。
【００５８】
このとき、本実施の形態１では、トランザクション処理装置１００は、クライアント５００に対して、ロックを取得している別のトランザクションが実行中のため、排他違反が発生していることを通知してもよい。ロックを取得しているトランザクションが実行中の場合は、すぐに再実行しても失敗してしまう可能性が高いため、このように排他違反のエラー原因を通知することで、クライアント５００がトランザクションの再実行を遅らせるなどの判断をすることができる。また、本実施の形態１は、アボートした場合に、すぐにクライアント５００にエラーを返却せずに、一定回数処理をリトライする態様であってもよい。
【００５９】
次に、上述のステップＳ００４の判定の結果、いずれのＫＶペアにもロック情報が存在していない場合も、上述のステップＳ１０１と同様に、ロック情報取出し部１０４は、実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを判定する。（ステップＳ２０１）。
【００６０】
ステップＳ２０１の判定の結果、実行対象トランザクションがロックを取得して動作するトランザクションである場合は、ロック情報書き込み部１０５は、ステップＳ００３で取得したＫＶペアのＶａｌｕｅ部にロック情報を埋め込む（ステップＳ２０２）。そして、ロック情報書き込み部１０５は、ＫＶペアアクセス部２０１に対して、ロック情報が埋め込まれたＫＶペアの書き込みを要求する。
【００６１】
そして、ステップＳ２０２が実行され、ロック情報書き込み部１０５がＫＶペアの書き込みを要求すると、データ格納装置２００では、ＫＶペアアクセス部２０１は、ＫＶペアの書き込みに際して排他違反が発生するかどうかを判定する。判定の結果、排他違反がない場合は、ＫＶペアアクセス部２０１は、ロック情報が埋め込まれたＫＶペアをＫＶペア記憶部２０２に書き込み、その後、ロック情報書き込み部１０５に対して、書き込み処理のコミット完了を通知する。一方、判定の結果、排他違反がある場合は、ＫＶペアアクセス部２０１は、そのことを、ロック情報書き込み部１０５に通知する。
【００６２】
従って、ステップＳ２０２の実行後、ロック情報書き込み部１０５は、ＫＶペアアクセス部２０１から、書き込み処理についてコミット完了が通知されているかどうかを判定する（ステップＳ２０３）。
【００６３】
ステップＳ２０３の判定の結果、ＫＶペアアクセス部２０１からコミット完了が通知されていない場合は、ロック管理部１０２は、当該トランザクションの実行を待ち合わせるための処理を行う（ステップＳ２０４）。なお、ステップＳ２０４で行なわれる処理は、ステップＳ１０２で行なわれる処理と同様の処理であるため、詳細な説明について省略する。
【００６４】
一方、ステップＳ２０３の判定の結果、ＫＶペアアクセス部２０１からコミット完了が通知されている場合は、ロック情報書き込み部１０５はトランザクション実行部１０３に対して、実行対象トランザクションの処理を要求する（ステップＳ２０５）。これにより、トランザクション実行部１０３は、実行対象トランザクションの処理を実行し、処理結果を反映させるため、ＫＶペアアクセス部２０１に対してＫＶペアの書き込みを要求する。
【００６５】
また、このときも、ステップＳ２０２の実行後と同様に、データ格納装置２００では、ＫＶペアアクセス部２０１は、ＫＶペアの書き込みに際して排他違反が発生するかどうかを判定する。判定の結果、排他違反がない場合は、ＫＶペアアクセス部２０１は、ロック情報が埋め込まれたＫＶペアをＫＶペア記憶部２０２に書き込み、その後、トランザクション実行部１０３に対して、書き込み処理のコミット完了を通知する。一方、判定の結果、排他違反がある場合は、ＫＶペアアクセス部２０１は、そのことを、トランザクション実行部１０３に通知する。
【００６６】
従って、ステップＳ２０５の実行後、トランザクション実行部１０３は、ＫＶペアアクセス部２０１から、書き込み処理についてコミット完了が通知されているかどうかを判定する（ステップＳ２０６）。
【００６７】
ステップＳ２０６の判定の結果、ＫＶペアアクセス部２０１からコミット完了が通知されていない場合は、トランザクション実行部１０３は、実行対象トランザクションをアボートして、クライアント５００に排他違反によるエラーを返却する（ステップＳ２０８）。また、ステップＳ２０８では、トランザクション実行部１０３は、すぐにクライアント５００にエラーを返却せずに、一定回数の処理をリトライしてもよい。
【００６８】
なお、トランザクション処理装置１００において、実行対象トランザクションがロックを取得した後は、他のトランザクション処理装置３００で実行される別のトランザクションは、ステップＳ１０２で待ち合わせとされるか、ステップＳ１０３でアボートされるかのどちらである。従って、ロックを取得した後に、実行対象トランザクションが排他違反によってエラーになることはない。
【００６９】
一方、ステップＳ２０６の判定の結果、ＫＶペアアクセス部２０１からコミット完了が通知されている場合は、トランザクション実行部１０３は、ＫＶペアの書き込みが完了しているので、ロック情報書き込み部１０５に対して、トランザクションのコミット完了を通知する（ステップＳ２０７）。
【００７０】
次に、ステップＳ２０７が実行されると、ロック情報書き込み部１０５は、実行対象トランザクションの実行に際して、ロック情報を書き込んだＫＶペアから、このロック情報を削除する（ステップＳ２０９）。また、ロック情報書き込み部１０９は、ＫＶペアアクセス部２０１に対して、ロック情報が削除されたＫＶペアの書き込みを要求する。
【００７１】
更に、データ格納装置２００では、ＫＶペアアクセス部２０１は、要求を受けると、ＫＶペア記憶部２０２に対して、ロック情報が削除されたＫＶペアの書き込みを行なう。また、この書き込み処理は、ロックが取得されている状況で実行されるため、他のトランザクションとの間で排他違反を起こすことはない。
【００７２】
また、ここでいう「ロック情報の削除」の例としては、ロック情報が格納されているｖａｌｕｅ部に、ロックがされていないことを示す情報、例えば「０（ゼロ）」を埋めることが挙げられる。また、ロック情報の削除は、トランザクション実行のステップＳ２０５において、トランザクション実行部１０３によるＫＶペアの書き込みの際に行なわれていてもよい。
【００７３】
また、上述のステップＳ２０１の判定の結果、実行対象トランザクションがロックを取得して動作するトランザクションでない場合は、上述のステップＳ２０５が実行される。具体的には、この場合、ロック情報取出し部１０４は、トランザクション実行部１０３に実行対象トランザクションの処理を要求する。これにより、トランザクション実行部１０３は、実行対象トランザクションの処理を実行し、処理結果を反映させるため、ＫＶペアアクセス部２０１に対して、ＫＶペアの書き込みを要求する。
【００７４】
また、ロックを取得しないで動作するトランザクションの場合は、ＫＶペアアクセス部２０１によってＫＶペア記憶部２０２に書き込みが行なわれる際において、排他違反が起こる可能性がある。従って、この場合も、データ格納装置２００では、ＫＶペアアクセス部２０１は、ＫＶペアの書き込みに際して排他違反が発生するかどうかを判定する。
【００７５】
その後、上述したステップＳ２０６が実行され、その後、上述したステップＳ２０７又はステップＳ２０８が実行される。但し、この場合においては、実行対象トランザクションは、ロックを取得して動作するトランザクションではないため、ロック情報の削除を行なうステップＳ２０９は実行されない。
【００７６】
［排他違反の具体例］
続いて、図３に示した各ステップの実行時にデータ格納装置２００で判定される排他違反の具体例について図５〜図８を用いて説明する。
【００７７】
具体例１：
最初に、図３に示すステップＳ２０２の実行後に、ＫＶペアアクセス部２０１によって判定される排他違反について説明する。また、この場合の排他違反としては２つのケースが考えられる。各ケースについて、図５及び図６を用いて説明する。図５は、図３に示すステップＳ２０２の実行後に判定される排他違反の一例を説明するための説明図である。図６は、図３に示すステップＳ２０２の実行後に判定される排他違反の他の例を説明するための説明図である。
【００７８】
まず、図５は、ロックを取得して動作するトランザクション同士がロックの取得のために、ロック情報をＫＶペアに埋め込み、これをＫＶペア記憶部２０２に書き込むときに、排他違反が起こるケースを示している。
【００７９】
図５の例では、トランザクション処理装置１００が実行するトランザクションと、トランザクション処理装置３００が実行するトランザクションとは、共にロックを取得して動作するトランザクションである。
【００８０】
従って、図５に示すように、トランザクション処理装置１００及びトランザクション処理装置３００は、共に、最初に、ＫＶペアの取得を実行する。この処理は、図３に示したステップＳ００３に相当する。なお、各トランザクション処理装置において、この後に実行されたステップＳ００４では、取得したＫＶペアにはロック情報が存在していない旨の判定（Ｎｏ判定）がなされているものとする。
【００８１】
次に、トランザクション処理装置１００及びトランザクション処理装置３００それぞれでは、各ロック情報書き込み部１０５が、ＫＶペアのＶａｌｕｅ部にロック情報の埋め込みを行なう。また、各ロック情報書き込み部１０５は、データ格納装置２００のＫＶペアアクセス部２０１に対して、ロック情報が埋め込まれたＫＶペアの書き込みを要求する。この処理は、図３に示したステップＳ２０２に相当する。
【００８２】
そして、データ格納装置２００では、ＫＶペアの書き込みは、楽観的排他制御方式に沿って行なわれている。従って、図５に示すように、トランザクション処理装置１００の方が先にＫＶペアの書き込みを実行すると、トランザクション処理装置１００によるロック取得は成功するが、トランザクション処理装置３００によるロック取得は排他違反により失敗となる。
【００８３】
次に、２つ目のケースについて説明する。図６は、ロックを取得しないで動作するトランザクションとロックを取得して動作するトランザクションとが排他違反を起こすケースを示している。
【００８４】
図６の例では、トランザクション処理装置１００が実行するトランザクションはロックを取得しないで動作するトランザクションであるが、トランザクション処理装置３００が実行するトランザクションはロックを取得して動作するトランザクションである。
【００８５】
従って、図６に示すように、トランザクション処理装置１００及びトランザクション処理装置３００は、共に、最初に、ＫＶペアの取得を実行する。この処理は、図４に示したステップＳ００３に相当する。なお、図６の例でも、各トランザクション処理装置において、取得したＫＶペアにはロック情報が存在していない旨の判定（Ｎｏ判定）がなされているものとする。
【００８６】
次に、トランザクション処理装置１００では、ＫＶペアが取得された後、トランザクション実行部１０３が、トランザクションの実行を行い、データ格納装置２００のＫＶペアアクセス部２０１に対して、トランザクション処理が実行されたＫＶペアの書き込みを要求する。この処理は、図３に示したステップＳ２０５に相当する。
【００８７】
一方、トランザクション処理装置３００では、ＫＶペアが取得された後、ロック情報書き込み部１０５が、ＫＶペアのＶａｌｕｅ部にロック情報の埋め込みを行い、データ格納装置２００のＫＶペアアクセス部２０１に対して、ロック情報が埋め込まれたＫＶペアの書き込みを要求する。この処理は、図３に示したステップＳ２０２に相当する。
【００８８】
そして、データ格納装置２００では、ＫＶペアの書き込みは、楽観的排他制御方式に沿って行なわれている。このため、図６に示すように、図５の例と同様に、トランザクション処理装置１００の方が先にＫＶペアの書き込みを実行すると、トランザクション処理装置１００によるトランザクションの実行は成功するが、トランザクション処理装置３００によるロック取得は排他違反により失敗となる。
【００８９】
具体例２：
続いて、図３に示すステップＳ２０５の実行後に、ＫＶペアアクセス部２０１によって判定される排他違反について説明する。また、この場合の排他違反としても、２つのケースが考えられる。各ケースについて図７及び図８を用いて説明する。図７は、図３に示すステップＳ２０５の実行後に判定される排他違反の一例を説明するための説明図である。図８は、図３に示すステップＳ２０５の実行後に判定される排他違反の他の例を説明するための説明図である。
【００９０】
まず、図７は、ロックを取得して動作するトランザクションとロックを取得しないで動作するトランザクションとが排他違反を起こすケースを示している。
【００９１】
図７の例では、トランザクション処理装置１００が実行するトランザクションは、ロックを取得して動作するトランザクションであるが、トランザクション処理装置３００が実行するトランザクションはロックを取得しないで動作するトランザクションである。
【００９２】
図７に示すように、最初に、トランザクション処理装置１００及びトランザクション処理装置３００は、共に、ＫＶペアの取得を実行する。この処理は、図３に示したステップＳ００３に相当する。なお、図７の例では、ステップＳ２０５が実行されるので、各トランザクション処理装置において、この後に実行されたステップＳ００４では、取得したＫＶペアにはロック情報が存在していない旨の判定（Ｎｏ判定）がなされているものとする。
【００９３】
次に、トランザクション処理装置１００では、ＫＶペアが取得された後、ロック情報書き込み部１０５が、ＫＶペアのＶａｌｕｅ部にロック情報の埋め込みを行なう。また、ロック情報書き込み部１０５は、データ格納装置２００のＫＶペアアクセス部２０１に対して、ロック情報が埋め込まれたＫＶペアの書き込みを要求する。この処理は、図３に示したステップＳ２０２に相当する。
【００９４】
一方、トランザクション処理装置３００では、ＫＶペアが取得された後、トランザクション実行部１０３が、トランザクションの実行を行い、データ格納装置２００のＫＶペアアクセス部２０１に対して、トランザクション処理が実行されたＫＶペアの書き込みを要求する。この処理は、図３に示したステップＳ２０５に相当する。
【００９５】
そして、データ格納装置２００では、ＫＶペアの書き込みは、楽観的排他制御方式に沿って行なわれている。このため、図７に示すように、トランザクション処理装置１００の方が先にＫＶペアの書き込みを実行すると、トランザクション処理装置１００によるトランザクションの実行は成功するが、トランザクション処理装置３００によるロック取得は排他違反により失敗となる。
【００９６】
次に、２つ目のケースについて説明する。図８は、ロックを取得しないで動作するトランザクション同士が排他違反を起こすケースを示している。
【００９７】
図８の例では、トランザクション処理装置１００が実行するトランザクションと、トランザクション処理装置３００が実行するトランザクションとは、共にロックを取得しないで動作するトランザクションである。
【００９８】
従って、図８に示すように、トランザクション処理装置１００及びトランザクション処理装置３００は、共に、最初に、ＫＶペアの取得を実行する。この処理は、図３に示したステップＳ００３に相当する。なお、図８の例では、ステップＳ２０５が実行されるので、各トランザクション処理装置において、この後に実行されたステップＳ００４では、取得したＫＶペアにはロック情報が存在していない旨の判定（Ｎｏ判定）がなされているものとする。
【００９９】
次に、トランザクション処理装置１００及びトランザクション処理装置３００では、ＫＶペアが取得された後、共に、トランザクション実行部１０３が、トランザクションの実行を行い、データ格納装置２００のＫＶペアアクセス部２０１に対して、トランザクション処理が実行されたＫＶペアの書き込みを要求する。この処理は、図３に示したステップＳ２０５に相当する。
【０１００】
そして、データ格納装置２００では、ＫＶペアの書き込みは、楽観的排他制御方式に沿って行なわれている。このため、図８に示すように、図７の例と同様に、トランザクション処理装置１００の方が先にＫＶペアの書き込みを実行すると、トランザクション処理装置１００によるトランザクションの実行は成功するが、トランザクション処理装置３００によるロック取得は排他違反により失敗となる。
【０１０１】
［トランザクションの再実行処理］
続いて、図３に示したステップＳ１０２で、ロック管理部１０２によってキューに格納されたトランザクションの再実行処理について図９を用いて説明する。図９は、本発明の実施の形態１におけるトランザクション処理装置のトランザクション再実行処理時の動作を示すフロー図である。
【０１０２】
図９に示すように、最初に、ロック情報取出し部１０４は、自身が保持するキューの中にトランザクション情報が格納されているかどうかを判定する（ステップＳ３０１）。ステップＳ３０１の判定の結果、キューの中にトランザクション情報が格納されていない場合は、ロック情報取出し部１０４は処理を終了する。
【０１０３】
一方、ステップＳ３０１の判定の結果、キューの中にトランザクション情報が格納されている場合は、ロック情報取出し部１０４は、キューの要素である、キューの先頭に格納されているトランザクション情報の取り出しを実行する（ステップＳ３０２）。
【０１０４】
次に、ロック情報取出し部１０４は、ステップＳ３０２で取り出したトランザクション情報に対して、ロックを取得する処理を行う（ステップＳ３０３）。この処理は、図３に示したロックを取得する処理に相当する。なお、ここでいう「ロックを取得する処理」とは、図３に示す、ＫＶペア取得のステップＳ００３からトランザクション待ち合わせ処理のステップＳ１０２までの処理、ステップＳ００３からコミット完了判定のステップＳ２０４までの処理、又はステップＳ００３からトランザクション待ち合わせ処理のステップＳ２０５までの処理を意味している。
【０１０５】
次に、ロック情報取出し部１０４は、ステップＳ３０３によって、トランザクション情報に対するロックを取得できたかどうかを判定する（ステップＳ３０４）。ステップＳ３０４の判定の結果、ロックを取得できた場合は、ロック情報取出し部１０４は、キューから、取り出した要素を削除する（ステップＳ３０５）。その後、再度ステップＳ３０１が実行される。
【０１０６】
一方、ステップＳ３０４の判定の結果、ロックを取得できなかった場合は、ロック情報取出し部１０４は、再度、ステップＳ３０２に戻り、次にキューに格納されているトランザクションに対して同様の処理を実行する。
【０１０７】
また、図９には示されていないが、キューの要素を削除するステップＳ３０５の実行後、ロック情報取出し部１０４は、トランザクション実行部１０３に、ステップＳ１０２で取り出した要素に対応するトランザクションの実行を依頼する。この処理は、図３に示したステップＳ２０５の処理に相当する。
【０１０８】
また、ステップＳ３０１でキューの中にトランザクション情報が格納されていないと判定されると、処理は終了するが、ロック情報取出し部１０４は、設定時間の経過後に、再度、ステップＳ３０１を実行する。つまり、ロック情報取出し部１０４は、キューに格納されているトランザクションを定期的に再実行する。
【０１０９】
但し、実行対象トランザクションがアクセスするＫＶペアのロックが解放されてから、実行対象トランザクションが再実行されるまでの間に、実行対象トランザクションがアクセスするＫＶペアにアクセスする新規のトランザクションがクライアント５００から入力されたとする。この場合、新規のトランザクションが先に処理されてしまう。
【０１１０】
このため、キューに格納されているトランザクションがアクセスするＫＶペアにアクセスする、新規のトランザクションが入力された場合は、先に、キューに格納されているトランザクションが実行されるのが良い。また、このとき、新規のトランザクションがロックを取得して動作するトランザクションであるとする。この場合は、新規のトランザクションのトランザクション番号と、新規のトランザクションでアクセスするＫｅｙの値とが、キューの末尾に格納される。一方、新規のトランザクションがロックを取得して動作するトランザクションでない場合は、処理がアボートされ、クライアント５００に排他違反によるエラーが返却される。
【０１１１】
［プログラム］
本実施の形態１におけるプログラムは、コンピュータに、図３に示すステップＳ００１〜Ｓ２０９、更には、図９に示すステップＳ３０１〜Ｓ３０５を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態１におけるトランザクション処理装置とトランザクション処理方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、トランザクション解析部１０１、ロック管理部１０２、及びトランザクション実行部１０３として機能し、処理を行なう。
【０１１２】
［実施の形態１による効果］
以上のように、本実施の形態１では、楽観的排他制御方式に沿って排他制御が行なわれる分散ＫＶＳにおいて、実行の対象となるトランザクションがアクセスするKVペアにロック情報を書き込むことで、当該トランザクションにロックを取得させることができる。この場合、同じＫＶペアにアクセスする他のトランザクションが存在していても、これに対して、トランザクションの待ち合わせを行なわせたり、アボートさせたりすることで、これを排除できる。
【０１１３】
この結果、楽観的排他制御方式を採用した場合の問題点、即ち、特定のＫＶペアに対する更新頻度が高くなると、トランザクション同士が競合し、コミットに失敗したトランザクションのやり直しが増えて、オーバーヘッドが大きくなるという問題が解決される。
【０１１４】
また、楽観的排他制御方式を採用した場合は、ロングトランザクションを実行したときに、トランザクションの競合のためにいつまでたってもトランザクションのコミットが成功しないという問題が発生するが、本実施の形態１によればこれも解消できる。そして、これにより、アプリケーションの設計も容易になる。
【０１１５】
更に、ロックは、ＫＶペアのＶａｌｕｅ部に埋め込んだデータに基づいて行なわれるので、悲観的排他制御方式を採用した場合と異なり、ロックの管理がボトルネックとなってスケーラビリティが低下するという問題も解消される。
【０１１６】
（実施の形態２）
次に、本発明の実施の形態２における、トランザクション処理装置、トランザクション処理方法、及びプログラムについて、図１０〜図１２を参照しながら説明する。
【０１１７】
最初に、本実施の形態２におけるトランザクション処理装置の構成について、図１０及び図１１を用いて説明する。図１０は、本発明の実施の形態２におけるトランザクション処理装置の具体的構成を示すブロック図である。
【０１１８】
図１０に示すように、本実施の形態２におけるトランザクション処理装置１１０は、トランザクション解析部１０１と、ロック管理部１０２と、トランザクション実行部１０３と、排他制御方式設定部１１１とを備えている。
【０１１９】
つまり、トランザクション処理装置１１０は、実施の形態１において図２に示したトランザクション処理装置１００の構成に加えて、排他制御方式設定部１１１を備える点で、トランザクション処理装置１００と異なっている。以下、実施の形態１との相違点を中心に説明する。
【０１２０】
排他制御方式設定部１１１は、実行対象トランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第１の排他制御方式（楽観的排他制御方式）、及びロックの取得を必要とする第２の排他制御方式（悲観的排他制御方式）のうちいずれかに設定する。例えば、排他制御方式設定部１１１は、楽観的排他制御方式を設定している場合において、実行対象トランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、楽観的排他制御方式に代えて、悲観的排他制御方式を設定する。この場合、トランザクション実行部１０３は、設定された排他制御方式に従って、実行対象トランザクションを実行する。
【０１２１】
具体的には、まず、本実施の形態２では、トランザクション実行部１０３は、クライアント５００から入力された、ロックを取得せずに動作する実行対象トランザクションが排他違反によりエラーとなった場合は、一定回数処理をリトライするものとする。そして、排他制御方式設定部１１１は、ロックを取得せずに動作する実行対象トランザクションが排他違反によってエラーとなった場合に、実行対象トランザクションがこれまでにリトライされた回数と、実行対象トランザクションの平均実行時間とを記録する。
【０１２２】
続いて、排他制御方式設定部１１１は、リトライ回数と平均実行時間との情報を基に、実行対象トランザクションの排他制御方式を、ロックの取得を必要とする悲観的排他制御方式に変更して、トランザクション実行部１０３に再実行を依頼する。ここで、図１０を用いて、リトライ回数と平均実行時間との情報を基にした排他制御方式の変更について説明する。
【０１２３】
図１１は、本発明の実施の形態２において管理されているリトライ回数と平均実行時間との情報の一例を示す図である。図１１に示すように、排他制御方式設定部１１１は、トランザクションのリトライ回数と平均実行時間とを管理している。また、図１１の例では、各トランザクションのトランザクション番号毎に、リトライ回数と、平均実行時間とが記録されている。
【０１２４】
また、本実施の形態２では、排他制御方式設定部１１１によるトランザクションの平均実行時間の記録のために、トランザクション実行部１０３は、実行するトランザクションの実行時間を記録している。そして、トランザクション実行部１０３は、トランザクションの実行が排他違反によって失敗したときに、排他制御方式設定部１１１にトランザクション番号と、実行時間とを通知する。
【０１２５】
排他制御方式設定部１１１は、トランザクション実行部１０３からトランザクション番号と、実行時間とが通知されると、自身が管理している情報を更新する。具体的には、トランザクション実行部１０３から通知されたトランザクション番号と同じ番号が、自身が管理している情報の中に含まれている場合は、排他制御方式設定部１１１は、該当するトランザクション番号に対応するリトライ回数を１つ増加させ、平均実行時間を再計算する。
【０１２６】
一方、トランザクション実行部１０３から通知されたトランザクション番号と同じ番号が、自身が管理している情報の中に含まれていない場合は、排他制御方式設定部１１１は、リトライ回数を１、平均実行時間をトランザクション実行部１０３から通知された実行時間として、これらの情報を新たに記録する。
【０１２７】
排他制御方式設定部１１１は、このようにして、トランザクション実行部１０３から通知されたトランザクション番号に対応する情報を更新する。そして、排他制御方式設定部１１１は、更新した情報、即ち、更新後のリトライ回数及び平均実行時間に基づいて、ロックを取得しないで動作するトランザクションのままリトライするのか、ロックを取得して動作するトランザクションに変更してリトライするのかを判定する。
【０１２８】
例えば、排他制御方式設定部１１１は、リトライ回数と平均実行時間とが共に一定以上の場合に、排他制御方式を変更することができる。具体的には、排他制御方式設定部１１１は、リトライ回数が１０回を超え、且つ、平均実行時間が１０００ミリ秒を超える場合に、排他制御方式を変更してもよい。
【０１２９】
その他、排他制御方式設定部１１１は、リトライ回数が一定回数以上になるか、又は平均実行時間が一定以上の場合に、排他制御方式を変更してもよいし、リトライ回数と平均実行時間とから計算される評価値が一定以上になった場合に、排他制御方式を変更してもよい。
【０１３０】
また、上述したように、本実施の形態２では、排他制御方式を変更するのに利用するパラメータは、リトライ回数と平均実行時間とであるが、その理由は以下の通りである。まず、リトライ回数が増えるということは、当該トランザクションが排他違反により頻繁に失敗していることを意味する。従って、リトライ回数が多いほどロックを取得して動作するトランザクションとして実行したほうがよいと判断できる。また、リトライ回数が多くない場合でも、トランザクションの実行時間が長い場合は、排他違反により今後も失敗する可能性が高いため、ロックを取得して動作するトランザクションとして実行したほうがよいと判断できる。これらの点より、リトライ回数と平均実行時間とが、パラメータとして利用される。
【０１３１】
［装置動作］
次に、本実施の形態２におけるトランザクション処理装置１１０の動作について図１２を用いて説明する。但し、本実施の形態２においては、排他制御方式設定部１１１による処理を除いて、実施の形態１と同様の処理が行なわれる。つまり、本実施の形態２においても、実施の形態１と同様に、図３に示すステップＳ００１〜Ｓ２０９と、図９に示すステップＳ３０１〜Ｓ３０５とが実行される。従って、以下においては、排他制御方式設定部１１１の動作を中心に説明する。
【０１３２】
更に、以下の説明においては、適宜図１０及び図１１を参酌する。また、本実施の形態２では、トランザクション処理装置１１０を動作させることによって、トランザクション処理方法が実施される。よって、本実施の形態２におけるトランザクション処理方法の説明は、以下のトランザクション処理装置１１０の動作説明に代える。
【０１３３】
図１２は、本発明の実施の形態２におけるトランザクション処理装置の排他制御方式の設定処理時の動作を示すフロー図である。図１２に示すように、最初に、排他制御方式設定部１１１は、トランザクション実行部１０３から、トランザクション番号と実行時間とが通知されているかどうかを判定する（ステップＳ４０１）。
【０１３４】
ステップＳ４０１の判定の結果、トランザクション番号と実行時間とが通知されていない場合は、排他制御方式設定部１１１は、待機状態となる。一方、ステップＳ４０１の判定の結果、トランザクション番号と実行時間とが通知されている場合は、排他制御方式設定部１１１は、管理対象となる情報の追加、又は管理している情報の更新を実行する（ステップＳ４０２）。
【０１３５】
具体的には、ステップＳ４０２では、通知されたトランザクション番号と同じ番号が、管理している情報に含まれている場合は、排他制御方式設定部１１１は、該当するトランザクション番号に対応するリトライ回数を１つ増加させ、平均実行時間を再計算する。一方、トランザクション番号と同じ番号が、管理している情報の中に含まれていない場合は、排他制御方式設定部１１１は、リトライ回数を１、平均実行時間を通知された実行時間として、これらの情報を新たに記録する。
【０１３６】
次に、排他制御方式設定部１１１は、更新した情報に基づいて、実行対象トランザクションの排他制御方式の変更条件が満たされているかどうかを判定する（ステップＳ４０３）。具体的には、排他制御方式設定部１１１は、リトライ回数と平均実行時間とが共に一定以上であるかどうかを判定する。
【０１３７】
ステップＳ４０３の判定の結果、変更条件が満たされていない場合は、排他制御方式設定部１１１は、処理を終了する。一方、ステップＳ４０３の判定の結果、変更条件が満たされている場合は、排他制御方式設定部１１１は、排他制御方式を変更して、トランザクション実行部１０３に再実行を依頼し（ステップＳ４０４）、その後、処理を終了する。また、排他制御方式設定部１１１は、処理の終了後、設定時間が経過すると、再度、ステップＳ４０１〜Ｓ４０４を実行する。
【０１３８】
［プログラム］
本実施の形態２におけるプログラムは、コンピュータに、図３に示すステップＳ００１〜Ｓ２０９、図９に示すステップＳ３０１〜Ｓ３０５、更には、図１２に示すステップＳ４０１〜Ｓ４０４を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態２におけるトランザクション処理装置とトランザクション処理方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、トランザクション解析部１０１、ロック管理部１０２、トランザクション実行部１０３、及び排他制御方式設定部１１１として機能し、処理を行なう。
【０１３９】
［実施の形態２による効果］
このように、本実施形態２では、ロックを取得しないで動作していたトランザクションを、設定条件に基づいて、ロックを取得して動作するトランザクションに変更することができる。このため、本実施の形態２によれば、トランザクションのリトライによるオーバーヘッドをより効率的に削減することができる。
【０１４０】
（実施の形態３）
次に、本発明の実施の形態３における、トランザクション処理装置、トランザクション処理方法、及びプログラムについて、図１３を参照しながら説明する。図１３は、は本発明の実施の形態３におけるトランザクション処理装置の具体的構成を示すブロック図である。
【０１４１】
図１３に示すように、本実施の形態３におけるトランザクション処理装置１２０は、実施の形態１において図２に示したトランザクション処理装置１００と同様に、トランザクション解析部１０１と、ロック管理部１０２と、トランザクション実行部１０３とを備えている。
【０１４２】
但し、本実施の形態３においては、トランザクション処理装置１２０は、トランザクション解析部１０１において、更に、ＫＶペアアクセス解析部１２１を備えており、この点で、実施の形態１におけるトランザクション処理装置１００と異なっている。以下、実施の形態１との相違点を中心に説明する。
【０１４３】
本実施の形態１においては、トランザクション解析部１０１は、実施の形態１で述べた機能を有しているが、更に、ＫＶペアアクセス解析部１２１を備えている。ＫＶペアアクセス解析部１２１は、まず、実行対象トランザクションでアクセスされるデータ（ＫＶペア）の数を特定する。そして、ＫＶペアアクセス解析部１２１は、特定したＫＶペアの数に応じて、実行対象トランザクションについての実行時の排他制御方式として、ロックの取得を必要としない楽観的排他制御方式、及びロックの取得を必要とする悲観的排他制御方式のうちいずれかを設定する。
【０１４４】
具体的には、ＫＶペアアクセス解析部１２１は、実行対象トランザクションが１つのＫＶペアのみを更新するトランザクションであった場合は、トランザクションの排他制御方式として、楽観的排他制御方式を選択する。一方、ＫＶペアアクセス解析部１２１は、実行対象トランザクションが２つ以上のＫＶペアを更新するトランザクションであった場合は、悲観的排他制御方式を選択する。
【０１４５】
このように、更新対象となるＫＶペアが１つの場合に、楽観的排他制御が選択され、更新対象となるＫＶペアが２つ以上の場合に悲観的排他制御が選択される理由は、以下の通りである。つまり、更新対象となるＫＶペアが１つの場合は、トランザクションの競合によってやり直しになる可能性が低くなる。一方、更新対象となるＫＶペアが２つ以上の場合は、トランザクションの競合によってやり直しになる可能性が高くなる。よって、やり直しの発生を少なくするため、ＫＶペアが１つの場合に、楽観的排他制御が選択され、ＫＶペアが２つ以上の場合に悲観的排他制御が選択される。
【０１４６】
また、ＫＶペアアクセス解析部１２１は、実行対象トランザクションがアクセスするＫＶペアのＫｅｙ値とロック要否情報とに加えて、実行対象トランザクションについて選択された排他制御方式の情報をロック管理部１０２に渡す。その後、ロック管理部１０２及びトランザクション実行部１０３は、実施の形態１と同様に動作する。
【０１４７】
このように、本実施の形態３では、図３に示したステップＳ００２において、排他制御方式の設定と、排他制御方式の情報の受け渡しとが、追加で行なわれるが、それ以外のステップは実施の形態１と同様である。つまり、本実施の形態３では、図３に示した、ステップＳ００１、処理が追加されたステップＳ００２、ステップＳ００３〜Ｓ２０９と、図９に示したステップＳ３０１〜Ｓ３０５とが実行される。そして、これらのステップの実行により、本実施の形態３におけるトランザクション処理方法が実行される。
【０１４８】
［プログラム］
本実施の形態３におけるプログラムは、コンピュータに、図３に示すステップＳ００１処理が追加されたステップＳ００２、ステップＳ００３〜Ｓ２０９、更には、図９に示すステップＳ３０１〜Ｓ３０５を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態３におけるトランザクション処理装置とトランザクション処理方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、トランザクション解析部１０１、ロック管理部１０２、及びトランザクション実行部１０３として機能し、処理を行なう。
【０１４９】
［実施の形態３による効果］
このように、本実施形態３では、クライアント５００から入力される実行対象トランザクションが更新するＫＶペアの数が特定され、特定された数に応じて、実行対象トランザクションの排他制御方式が設定される。このため、本実施の形態３によれば、トランザクションのリトライによるオーバーヘッドをより効率的に削減することができる。
【０１５０】
（実施の形態４）
次に、本発明の実施の形態４における、トランザクション処理装置、トランザクション処理方法、及びプログラムについて、図１４及び図１５を参照しながら説明する。
【０１５１】
最初に、本実施の形態４におけるトランザクション処理装置の構成について、図１４を用いて説明する。図１４は、本発明の実施の形態４におけるトランザクション処理装置の具体的構成を示すブロック図である。
【０１５２】
図１４に示すように、本実施の形態４におけるトランザクション処理装置１３０は、実施の形態１において図２に示したトランザクション処理装置１００と同様に、トランザクション解析部１０１と、ロック管理部１０２と、トランザクション実行部１０３とを備えている。
【０１５３】
但し、本実施の形態４においては、トランザクション処理装置１３０は、ロック管理部１０２において、更に、タイムアウト処理部１３１を備えており、この点で、実施の形態１におけるトランザクション処理装置１００と異なっている。以下、実施の形態１との相違点を中心に説明する。
【０１５４】
本実施の形態４において、タイムアウト処理部１３１は、実行が完了していない実行対象トランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定する。また、タイムアウト処理部１３１は、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、実行対象トランザクションを、実行対象から排除する。
【０１５５】
具体的には、タイムアウト処理部１３１は、ロック管理部１０２が管理しているトランザクション情報を格納しているキューから、一定時間が経過したトランザクション情報を特定し、特定したトランザクション情報を削除する。また、ここでいう「一定時間」は閾値であり、トランザクション処理装置１３０の管理者等によって予め設定される。なお、「一定時間」は、システム運用中に変更することも可能である。
【０１５６】
ところで、実施の形態１で述べたように、ロックを取得して動作するトランザクションがロックを取得できなかった場合は、ロック管理部１０２が管理しているキューに、当該トランザクションに関する情報が格納され、定期的に再実行される。しかし、状況によっては長時間トランザクションが開始されないという可能性がある。この場合、クライアント５００からは処理がストールしているように見えてしまう。
【０１５７】
このため、本実施の形態３では、ロック管理部１０２が管理しているキューに格納されているトランザクションのうち、長時間ロックの取得に成功していないトランザクションはキューから削除され、クライアント５００にエラーが返却される。
【０１５８】
また、上述した実施の形態１では、ロック管理部１０２が管理しているキューに格納されるトランザクション情報は、トランザクション番号と、当該トランザクションがアクセスするＫｅｙ値とだけである。しかし、本実施の形態３では、経過時間を計測するため、トランザクション情報には、当該トランザクションが最初に実行されたときの時刻も含まれる。
【０１５９】
［装置動作］
次に、本実施の形態４におけるトランザクション処理装置１３０の動作について図１５を用いて説明する。但し、本実施の形態４においては、トランザクションの再実行処理を除いて、実施の形態１と同様の処理が行なわれる。つまり、本実施の形態４においても、実施の形態１と同様に、図３に示すステップＳ００１〜Ｓ２０９が実行される。従って、以下においては、トランザクションの再実行処理を中心に説明する。
【０１６０】
更に、以下の説明においては、適宜図１４を参酌する。また、本実施の形態４では、トランザクション処理装置１３０を動作させることによって、トランザクション処理方法が実施される。よって、本実施の形態４におけるトランザクション処理方法の説明は、以下のトランザクション処理装置１３０の動作説明に代える。
【０１６１】
図１５は、本発明の実施の形態４におけるトランザクション処理装置のトランザクション再実行処理時の動作を示すフロー図である。図１５に示すように、最初に、ロック情報取出し部１０４は、自身が保持するキューの中にトランザクション情報が格納されているかどうかを判定する（ステップＳ５０１）。ステップＳ５０１は、実施の形態１において図９に示したステップＳ３０１と同様のステップである。
【０１６２】
ステップＳ５０１の判定の結果、キューの中にトランザクション情報が格納されていない場合は、ロック情報取出し部１０４は処理を終了する。
【０１６３】
一方、ステップＳ３０１の判定の結果、キューの中にトランザクション情報が格納されている場合は、ロック情報取出し部１０４は、キューの要素である、キューの先頭に格納されているトランザクション情報の取り出しを実行する（ステップＳ５０２）。
【０１６４】
次に、タイムアウト処理部１３１は、ステップＳ５０２で取り出されたトランザクション情報に対応するトランザクションが最初に実行された時刻と、現在の時刻とを対比して、最初に実行された時刻からの経過時間が一定時間以上であるかどうかを判定する（ステップＳ５０３）。
【０１６５】
ステップＳ５０３の判定の結果、経過時間が一定時間以上である場合は、タイムアウト処理部１３１は、タイムアウト処理を実行する（ステップＳ５０７）。具体的には、タイムアウト処理部１３１は、キューから、当該トランザクション情報を削除して、クライアントにエラーを返却する。
【０１６６】
一方、上述したステップＳ５０３の判定の結果、経過時間が一定時間以上でない場合は、ロック情報取出し部１０４は、ステップＳ５０４〜Ｓ５０６を実行する。なお、ステップＳ５０４〜Ｓ５０６は、それぞれ、図９に示したステップＳ３０３〜Ｓ３０５と同様のステップである。
【０１６７】
［プログラム］
本実施の形態４におけるプログラムは、コンピュータに、図３に示すステップＳ００１〜Ｓ２０９、更には、図１５に示すステップＳ５０１〜Ｓ５０７を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態４におけるトランザクション処理装置とトランザクション処理方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、トランザクション解析部１０１、ロック管理部１０２、及びトランザクション実行部１０３として機能し、処理を行なう。
【０１６８】
［実施の形態４による効果］
このように、本実施の形態４では、ロック取得を待っているトランザクションが長時間ロック取得に成功できない場合に、タイムアウトエラーとすることができるので、いつまでたってもクライアント５００に結果が返らないという状況を回避できる。また、クライアント５００は、タイムアウトエラーを受けて、トランザクションの再実行を遅らせるなどの対処を実行することが可能となる。
【０１６９】
（物理的構成）
ここで、実施の形態１〜４におけるプログラムを実行することによって、トランザクション処理装置を実現するコンピュータについて図１６を用いて説明する。図１６は、本発明の実施の形態１〜４におけるトランザクション処理装置を実現するコンピュータの一例を示すブロック図である。
【０１７０】
図１６に示すように、コンピュータ１０は、ＣＰＵ１１と、メインメモリ１２と、記憶装置１３と、入力インターフェイス１４と、表示コントローラ１５と、データリーダ／ライタ１６と、通信インターフェイス１７とを備える。これらの各部は、バス２１を介して、互いにデータ通信可能に接続される。
【０１７１】
ＣＰＵ１１は、記憶装置１３に格納された、本実施の形態におけるプログラム（コード）をメインメモリ１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体２０に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス１７を介して接続されたインターネット上で流通するものであっても良い。
【０１７２】
また、記憶装置１３の具体例としては、ハードディスクドライブの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス１４は、ＣＰＵ１１と、キーボード及びマウスといった入力機器１８との間のデータ伝送を仲介する。表示コントローラ１５は、ディスプレイ装置１９と接続され、ディスプレイ装置１９での表示を制御する。
【０１７３】
データリーダ／ライタ１６は、ＣＰＵ１１と記録媒体２０との間のデータ伝送を仲介し、記録媒体２０からのプログラムの読み出し、及びコンピュータ１０における処理結果の記録媒体２０への書き込みを実行する。通信インターフェイス１７は、ＣＰＵ１１と、他のコンピュータとの間のデータ伝送を仲介する。
【０１７４】
また、記録媒体２０の具体例としては、ＣＦ（Compact Flash（登録商標））及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記憶媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記憶媒体が挙げられる。
【０１７５】
上述した実施の形態の一部又は全部は、以下に記載する（付記１）〜（付記２４）によって表現することができるが、以下の記載に限定されるものではない。
【０１７６】
（付記１）
実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータを特定する、トランザクション解析部と、
前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ロック管理部と、
前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、トランザクション実行部と、を備えている、
ことを特徴とするトランザクション処理装置。
【０１７７】
（付記２）
前記ロック管理部が、特定された前記データに、ロック情報を付加することによって、前記トランザクションにロックを取得させる、
付記１に記載のトランザクション処理装置。
【０１７８】
（付記３）
前記データベースが、トランザクションでアクセスされるデータと、それに対応するキーとを、ペアデータとして格納している場合に、
前記トランザクション解析部は、前記実行対象となるトランザクションでアクセスされるデータとそれに対応するキーとの前記ペアデータを特定し、
前記ロック管理部は、特定された前記ペアデータのキーを用いて、前記データベースに対して、特定された前記ペアデータの特定の領域に前記ロック情報を書き込むように指示を行ない、それによって前記トランザクションにロックを取得させ、
前記トランザクション実行部は、前記トランザクションの実行後に、特定された前記ペアデータのキーを用いて、前記データベースに格納されている前記ペアデータを更新する、
付記２に記載のトランザクション処理装置。
【０１７９】
（付記４）
前記実行対象となるトランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかに設定する、排他制御方式設定部を更に備え、
前記トランザクション実行部は、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記１〜３のいずれかに記載のトランザクション処理装置。
【０１８０】
（付記５）
前記排他制御方式設定部が、前記第１の排他制御方式を設定している場合において、前記実行対象となるトランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、前記第１の排他制御方式に代えて、前記第２の排他制御方式を設定する、付記４に記載のトランザクション処理装置。
【０１８１】
（付記６）
前記トランザクション解析部が、更に、前記実行対象となるトランザクションでアクセスされる前記データの数を特定し、
特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかを設定し、
前記トランザクション実行部は、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記１〜３のいずれかに記載のトランザクション処理装置。
【０１８２】
（付記７）
前記トランザクション解析部が、特定された前記データの数が１つの場合に、前記第１の排他制御方式を設定し、特定された前記データの数が２つ以上の場合に、前記第２の排他制御方式を設定する、
付記６に記載のトランザクション処理装置。
【０１８３】
（付記８）
前記実行対象となっているが、実行が完了していないトランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定し、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、前記実行対象となるトランザクションを、実行対象から排除する、タイムアウト処理部を更に備えている、
付記１〜７のいずれかに記載のトランザクション処理装置。
【０１８４】
（付記９）
（ａ）実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータを特定する、ステップと、
（ｂ）前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ステップと、
（ｃ）前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、ステップと、を有する、
ことを特徴とするトランザクション処理方法。
【０１８５】
（付記１０）
前記（ｂ）のステップにおいて、特定された前記データに、ロック情報を付加することによって、前記トランザクションにロックを取得させる、
付記９に記載のトランザクション処理方法。
【０１８６】
（付記１１）
前記データベースが、トランザクションでアクセスされるデータと、それに対応するキーとを、ペアデータとして格納している場合に、
前記（ａ）のステップにおいて、前記実行対象となるトランザクションでアクセスされるデータとそれに対応するキーとの前記ペアデータを特定し、
前記（ｂ）のステップにおいて、特定された前記ペアデータのキーを用いて、前記データベースに対して、特定された前記ペアデータの特定の領域に前記ロック情報を書き込むように指示を行ない、それによって前記トランザクションにロックを取得させ、
前記（ｃ）のステップにおいて、前記トランザクションの実行後に、特定された前記ペアデータのキーを用いて、前記データベースに格納されている前記ペアデータを更新する、
付記１０に記載のトランザクション処理方法。
【０１８７】
（付記１２）
（ｄ）前記実行対象となるトランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかに設定する、ステップを更に有し、
前記（ｃ）のステップにおいて、前記（ｄ）のステップで設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記９〜１１のいずれかに記載のトランザクション処理方法。
【０１８８】
（付記１３）
前記（ｄ）のステップにおいて、前記第１の排他制御方式を設定している場合において、前記実行対象となるトランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、前記第１の排他制御方式に代えて、前記第２の排他制御方式を設定する、付記１２に記載のトランザクション処理方法。
【０１８９】
（付記１４）
前記（ａ）のステップにおいて、前記実行対象となるトランザクションでアクセスされる前記データの数を特定し、
特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかを設定し、
前記（ｃ）のステップにおいて、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記９〜１１のいずれかに記載のトランザクション処理方法。
【０１９０】
（付記１５）
前記（ａ）のステップにおいて、特定された前記データの数が１つの場合に、前記第１の排他制御方式を設定し、特定された前記データの数が２つ以上の場合に、前記第２の排他制御方式を設定する、
付記１４に記載のトランザクション処理方法。
【０１９１】
（付記１６）
（ｅ）前記実行対象となっているが、実行が完了していないトランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定し、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、前記実行対象となるトランザクションを、実行対象から排除する、ステップを更に有している、
付記９〜１５のいずれかに記載のトランザクション処理方法。
【０１９２】
（付記１７）
コンピュータに、
（ａ）実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータを特定する、ステップと、
（ｂ）前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ステップと、
（ｃ）前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、ステップと、
を実行させるプログラム。
【０１９３】
（付記１８）
前記（ｂ）のステップにおいて、特定された前記データに、ロック情報を付加することによって、前記トランザクションにロックを取得させる、
付記１７に記載のプログラム。
【０１９４】
（付記１９）
前記データベースが、トランザクションでアクセスされるデータと、それに対応するキーとを、ペアデータとして格納している場合に、
前記（ａ）のステップにおいて、前記実行対象となるトランザクションでアクセスされるデータとそれに対応するキーとの前記ペアデータを特定し、
前記（ｂ）のステップにおいて、特定された前記ペアデータのキーを用いて、前記データベースに対して、特定された前記ペアデータの特定の領域に前記ロック情報を書き込むように指示を行ない、それによって前記トランザクションにロックを取得させ、
前記（ｃ）のステップにおいて、前記トランザクションの実行後に、特定された前記ペアデータのキーを用いて、前記データベースに格納されている前記ペアデータを更新する、
付記１８に記載のプログラム。
【０１９５】
（付記２０）
（ｄ）前記実行対象となるトランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかに設定する、ステップを、更に前記コンピュータに実行させ、
前記（ｃ）のステップにおいて、前記（ｄ）のステップで設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記１７〜１９のいずれかに記載のプログラム。
【０１９６】
（付記２１）
前記（ｄ）のステップにおいて、前記第１の排他制御方式を設定している場合において、前記実行対象となるトランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、前記第１の排他制御方式に代えて、前記第２の排他制御方式を設定する、付記２０に記載のプログラム。
【０１９７】
（付記２２）
前記（ａ）のステップにおいて、前記実行対象となるトランザクションでアクセスされる前記データの数を特定し、
特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第１の排他制御方式、及びロックの取得を必要とする第２の排他制御方式のうちいずれかを設定し、
前記（ｃ）のステップにおいて、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記１７〜１９のいずれかに記載のプログラム。
【０１９８】
（付記２３）
前記（ａ）のステップにおいて、特定された前記データの数が１つの場合に、前記第１の排他制御方式を設定し、特定された前記データの数が２つ以上の場合に、前記第２の排他制御方式を設定する、
付記２２に記載のプログラム。
【０１９９】
（付記２４）
（ｅ）前記実行対象となっているが、実行が完了していないトランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定し、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、前記実行対象となるトランザクションを、実行対象から排除する、ステップを、更に前記コンピュータに実行させる、
付記１７〜２３のいずれかに記載のプログラム。
【産業上の利用可能性】
【０２００】
本発明は、楽観的排他制御を用いる分散KVSシステムにおいて利用可能である。特に書き込みが多いワークロードに対して有効である。
【符号の説明】
【０２０１】
１０  コンピュータ
１１  ＣＰＵ
１２  メインメモリ
１３  記憶装置
１４  入力インターフェイス
１５  表示コントローラ
１６  データリーダ／ライタ
１７  通信インターフェイス
１８  入力機器
１９  ディスプレイ装置
２０  記録媒体
２１  バス
１００  トランザクション処理装置（実施の形態１）
１０１  トランザクション解析部
１０２  ロック管理部
１０３  トランザクション実行部
１０４  ロック情報取出し部
１０５  ロック情報書き込み部
１１０  トランザクション処理装置（実施の形態２）
１１１  排他制御方式設定部
１２０  トランザクション処理装置（実施の形態３）
１２１  ＫＶペアアクセス解析部
１３０  トランザクション処理装置（実施の形態４）
１３１  タイムアウト処理部
２００  データ格納装置
２０１  ＫＶペアアクセス部
２０２  ＫＶペア記憶部
３００  トランザクション処理装置
４００  分散トランザクション処理システム
５００  クライアント
６００  ネットワーク
【図１】
0006442996.tif 000002
【図２】
0006442996.tif 000003
【図３】
0006442996.tif 000004
【図４】
0006442996.tif 000005
【図５】
0006442996.tif 000006
【図６】
0006442996.tif 000007
【図７】
0006442996.tif 000008
【図８】
0006442996.tif 000009
【図９】
0006442996.tif 000010
【図１０】
0006442996.tif 000011
【図１１】
0006442996.tif 000012
【図１２】
0006442996.tif 000013
【図１３】
0006442996.tif 000014
【図１４】
0006442996.tif 000015
【図１５】
0006442996.tif 000016
【図１６】
0006442996.tif 000017