【文献】
山本 真,Web−DBシステム安定運用のための負荷テスト&性能検証の実践,DB Magazine,株式会社翔泳社,2006年 8月 1日,第16巻,第4号,p87-99
(58)【調査した分野】(Int.Cl.,DB名)
実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータ、及びその数を特定する、トランザクション解析部と、
前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ロック管理部と、
前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、トランザクション実行部と、を備え、
前記トランザクション解析部は、特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第1の排他制御方式、及びロックの取得を必要とする第2の排他制御方式のうちいずれかを設定し、
前記トランザクション実行部は、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
ことを特徴とするトランザクション処理装置。
前記実行対象となるトランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第1の排他制御方式、及びロックの取得を必要とする第2の排他制御方式のうちいずれかに設定する、排他制御方式設定部を更に備え、
前記トランザクション実行部は、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
請求項1〜3のいずれかに記載のトランザクション処理装置。
前記排他制御方式設定部が、前記第1の排他制御方式を設定している場合において、前記実行対象となるトランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、前記第1の排他制御方式に代えて、前記第2の排他制御方式を設定する、請求項4に記載のトランザクション処理装置。
前記トランザクション解析部が、特定された前記データの数が1つの場合に、前記第1の排他制御方式を設定し、特定された前記データの数が2つ以上の場合に、前記第2の排他制御方式を設定する、
請求項1に記載のトランザクション処理装置。
前記実行対象となっているが、実行が完了していないトランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定し、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、前記実行対象となるトランザクションを、実行対象から排除する、タイムアウト処理部を更に備えている、
請求項1〜6のいずれかに記載のトランザクション処理装置。
【発明を実施するための形態】
【0017】
(実施の形態1)
以下、本発明の実施の形態1における、トランザクション処理装置、トランザクション処理方法、及びプログラムについて、
図1〜
図9を参照しながら説明する。
【0018】
最初に、本実施の形態1におけるトランザクション処理装置の構成について説明する。
図1は、本発明の実施の形態1におけるトランザクション処理装置の概略構成を示すブロック図である。
【0019】
図1に示すように、本実施の形態1におけるトランザクション処理装置100は、クライアント500と、データベースとして機能するデータ格納装置200とに、ネットワーク600を介して接続されている。クライアント500は、実行対象となるトランザクション(以下「実行対象トランザクション」と表記する。)を、トランザクション処理装置100に入力する。トランザクション処理装置100は、クライアント500から入力された実行対象トランザクションを受け付け、受け付けた実行対象トランザクションの処理を実行する。
【0020】
また、
図1に示すように、トランザクション処理装置100は、トランザクション解析部101と、ロック管理部102と、トランザクション実行部103とを備えている。このうち、トランザクション解析部101は、まず、実行対象トランザクションを解析して、この実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを判定する。次いで、トランザクション解析部101は、データ格納装置200上の、実行対象トランザクションでアクセスされるデータを特定する。
【0021】
また、ロック管理部102は、実行対象トランザクションがロックを取得して動作するトランザクションである場合に、実行対象トランザクションにロックを取得させる。トランザクション実行部103は、実行対象トランザクション以外の別のトランザクションがロックを取得していないことを条件に、実行対象トランザクションを実行する。また、トランザクション実行部103は、実行結果に基づいて、実行対象トランザクションでアクセスされる、特定されたデータを更新する。
【0022】
以上のように、本実施の形態1では、原則として、楽観的排他制御方式が採用されている場合であっても、ロックが必要なトランザクションが入力された場合は、それについてロックの取得が行なわれる。そして、実行対象となるトランザクションであっても、別のトランザクションがロックを取得している場合は、ロックを取得できないので実行されることはない。このため、本実施の形態1によれば、更新処理が集中した場合のオーバーヘッドの増大化が抑制される。また、本実施の形態1では、楽観的排他制御方式の採用が可能であるため、スケーラビリティの低下も同時に抑制される。
【0023】
続いて、
図2を用いて、本実施の形態1におけるトランザクション処理装置の構成を更に具体的に説明する。
図2は、本発明の実施の形態1におけるトランザクション処理装置の具体的構成を示すブロック図である。
【0024】
図2に示すように、本実施の形態1では、トランザクション処理装置100は、ネットワーク600を介して、データ格納装置200及びクライアント500に加えて、他のトランザクション処理装置300にも接続されている。そして、トランザクション処理装置100は、データ格納装置200及びトランザクション処理装置300と共に、分散トランザクション処理システム400を構築している。
【0025】
また、トランザクション処理装置300は、トランザクション処理装置100と同様に構成されている。よって、以下においては、トランザクション処理装置100の説明によって、トランザクション処理装置300の説明とする。
【0026】
更に、本実施の形態1では、トランザクション処理装置100及トランザクション処理装置300は、共に、後述するプログラムによって構築することができる。この場合、トランザクション処理装置100及トランザクション処理装置300は、同一のコンピュータ内に構築されていても良いし、それぞれ別々のコンピュータに内に構築されていても良い。
【0027】
また、本実施の形態1では、クライアント500は、トランザクション処理装置100に対して、実行対象トランザクションに加えて、実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを明示する情報(以下「ロック要否情報」と表記する。)も入力する。
【0028】
また、
図2に示すように、本実施の形態1では、データ格納装置200は、KVペアのアクセス管理を行なうKVペアアクセス部201と、KVペア記憶部202とを備えている。KVペア記憶部202は、トランザクション処理装置100によってアクセスされるKVペアを格納している。KVペアは、トランザクションでアクセスされるデータ(以下「Value」とも表記する。)と、それに対応するキー(以下「Key値」とも表記する。)とで構成されたペアデータである。
【0029】
KVペアアクセス部201は、トランザクション処理装置100からの後述する種々のアクセス要求を受け付けると、受け付けたアクセス要求で指定されたKey値を持つKVペアを特定し、特定したKVペアに対して読み込み処理又は書き込み処理を実行する。
【0030】
また、
図2に示すように、トランザクション処理装置100は、
図1に示したように、トランザクション解析部101と、ロック管理部102と、トランザクション実行部103とを備えている。但し、このうち、ロック管理部102は、更に、ロック情報取出し部104と、ロック情報書き込み部105とを備えている。
【0031】
なお、トランザクション処理装置300は、トランザクション処理装置100と同様に構成されているので、トランザクション処理装置300の各部についての図示及び説明については省略する。
【0032】
トランザクション解析部101は、上述したように、まず、クライアント500から入力された実行対象トランザクションを解析する。具体的には、本実施の形態1では、トランザクション解析部101は、実行対象トランザクションがアクセスする1又は2以上のKVペアを特定し、ロック管理部102に対して、特定したKVペアのKey値を渡す。また、トランザクション解析部101は、Key値に加え、クライアント500から入力されたロック要否情報も、ロック管理部102に渡す。
【0033】
ロック管理部102は、ロック情報取出し部104とロック情報書き込み部105とによって、実行対象トランザクションが取得するロックの管理、即ち、後述するロック情報の取得及びロック情報の書き込みを実行する。
【0034】
ロック情報取出し部104は、トランザクション解析部101から渡されたKey値を基に、データ格納装置200から、このKey値に対応するKVペアを取得する。また、ロック情報取出し部104は、KVペア記憶部202において、取得したKVペアのValueが格納されている領域(以下「Value部」と表記する。)に、このKVペアがロックされていることを示す情報(以下「ロック情報」と表記する。)が存在するかどうかを確認する。確認の結果、ロック情報が存在しているKVペアが一つでも存在している場合は、ロック情報取出し部104は、クライアント500から入力された実行対象トランザクションを待ち合わせるか、アボートさせる。
【0035】
ロック情報書き込み部105は、トランザクション解析部101から渡された、実行対象トランザクションがロックを取得して動作するトランザクションかどうかを示す情報(ロック要否情報)を取得する。そして、ロック情報書き込み部105は、取得したロック要否情報を基に、実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを判定する。
【0036】
そして、ロック情報書き込み部105は、実行対象トランザクションがロックを取得して動作するトランザクションである場合は、実行対象トランザクションにロックを取得させる。具体的には、ロック情報書き込み部105は、ロック情報取出し部104によって取得されたKVペアのValue部にロック情報を埋め込み、ロック情報が埋め込まれたKVペアを、データ格納装置200のKVペア記憶部202に書き込ませる。
【0037】
本実施の形態1において、KVペアのValue部に格納されるロック情報は、特に限定されず、ロックの取得が必要なトランザクションを一意に特定できる情報であれば良い。例えば、ロック情報としては、ロックの取得が必要なトランザクションについての、トランザクション毎に一意に割り当てられたトランザクション番号を含む情報が挙げられる(後述の
図4参照)。また、Value部の先頭の決められたサイズの領域が、ロック情報を格納する領域として設定されている場合であれば、上述のロック情報取出し部104は、KVペアを取得した際に、Value部の先頭の設定された領域を確認するだけで、取得したKVペアにロック情報が存在しているかどうかを判断ができる。
【0038】
なお、本実施の形態1は、ロック情報がValue部に埋め込まれた態様のみに限定されることはない。本実施の形態1では、ロック情報は、Value部以外の領域、例えば、KVペアのKey値が格納されている領域(以下「Key部」と表記する。)に埋め込まれていても良い。
【0039】
そして、ロック情報書き込み部105によって、取得されたKVペアのValue部にロック情報が埋め込まれ、このKVペアがKVペア記憶部202に書き込まれると、ロック管理部102トランザクション実行部103に、実行対象トランザクションの実行を依頼する。
【0040】
また、ロック情報書き込み部105は、クライアント500から入力された実行対象トランザクションがロックを取得して動作するトランザクションでない場合は、ロック情報取出し部104によって取得されたKVペアのValue部へのロック情報の埋め込みは行なわない。この場合、ロック情報書き込み部105は、埋め込み処理を行わずに、トランザクション実行部103に実行対象トランザクションの実行を依頼する。
【0041】
また、ロック情報書き込み部105は、実行対象トランザクションがロックを取得して動作していた場合は、トランザクション実行部103によるトランザクション処理の完了後、処理対象となったKVペアのValue部のロック情報を削除する。そして、ロック情報書き込み部105は、ロック情報が削除されたKVペアを用いて、データ格納装置200のKVペア記憶部202に格納されているKVペアを更新する。
【0042】
なお、本実施の形態1では、ロック情報書き込み部105は、排他制御方式として、楽観的排他制御方式を採用し、この制御方式にそって、データ格納装置200KVペア記憶部に対してKVペアの書き込み(更新)を実行する。
【0043】
トランザクション実行部103は、本実施の形態1では、ロック管理部102からトランザクションの実行を依頼されると、楽観的排他制御方式に沿って、実行対象トランザクションの処理を実行する。また、トランザクション実行部103は、処理結果を反映させるため、トランザクションの実行後、KVペアのKey値を用いて、データ格納部201のKVペア記憶部202に格納されているKVペアのValueを更新する。更に、トランザクション実行部103は、実行対象トランザクションの実行が完了すると、ロック管理部102に、実行対象トランザクションの完了を通知する。
【0044】
また、ロック管理部102は、実行対象トランザクションがアクセスするKVペアを、事前にデータ格納装置200から取得している。よって、ロック管理部102は、トランザクション実行部103に実行対象トランザクションの実行を依頼する際、実行対象トランザクションでアクセスされるKVペアの情報も一緒に渡す。こうすることで、トランザクション実行部103がトランザクションの実行に際して改めてデータ格納装置200からKVペアを取得する必要がなくなる。
【0045】
[装置動作]
次に、本実施の形態1におけるトランザクション処理装置100の動作について
図3を用いて説明する。
図3は、本発明の実施の形態1におけるトランザクション処理装置の動作を示すフロー図である。以下の説明においては、適宜
図1及び
図2を参酌する。また、本実施の形態1では、トランザクション処理装置100を動作させることによって、トランザクション処理方法が実施される。よって、本実施の形態1におけるトランザクション処理方法の説明は、以下のトランザクション処理装置100の動作説明に代える。
【0046】
まず、前提として、クライアント500が、トランザクション処理装置100に対して、実行対象トランザクションを入力する。また、このとき、クライアント500は、実行対象トランザクションに加えて、ロック要否情報も入力する。
【0047】
そして、実行対象トランザクション及びロック要否情報が入力されると、
図3に示すように、トランザクション処理装置100は、クライアント500から入力されたトランザクション及びロック要否情報を受け付ける(ステップS001)。
【0048】
次に、トランザクション解析部101は、入力された実行対象トランザクションを解析し、実行対象トランザクションがアクセスする1又は2以上のKVペアを特定する(ステップS002)。また、ステップS002では、トランザクション解析部101は、特定したKVペアのKey値と実行対象トランザクションのロック要否情報とを、ロック管理部102に入力する。
【0049】
次に、ロック管理部102において、ロック情報取出し部104は、トランザクション解析部101から入力されたKey値に基づいて、データ格納装置200のKVペアアクセス部201に対して、KVペアの取得を要求する(ステップS003)。これにより、KVペアアクセス部201は、ロック情報取出し部104から入力されたKey値を持つKVペアを、KVペア記憶部202から取得する。また、KVペアアクセス部201は、ロック情報取出し部104に対して、取得したKVペアを返却する。
【0050】
次に、ロック情報取出し部104は、ステップS003で取得したKVペアにおいて1つでもロックがかかっているかどうかを、即ち、ステップS003で取得した各KVペアのValue部にロック情報が存在しているかどうかを判定する(ステップS004)。
【0051】
例えば、KVペアのValue部の先頭の決められたサイズの領域が、ロック情報を格納する領域として設定されているとする。このような領域としては、Value部の先頭32バイトの領域等が挙げられる。この場合、ステップS004では、ロック情報取出し部104は、KVペアを取得後、Value部の設定された領域を調べることで、取得したKVペアが他のトランザクションによってロックされているかどうかを判定することができる。
【0052】
ここで、
図4を用いて、ロック情報が埋め込まれたKVペアの具体例について説明する。
図4は、本発明の実施の形態1で利用されるKVペアの一例を示す図である。
図4の例では、KVペアのValue部の先頭が、ロック情報を格納する領域として使われている。また、
図4の例では、ロック情報として、どのトランザクションが当該KVペアをロックしているかが分かるように、トランザクションを一意に示すトランザクション番号が用いられている。
【0053】
また、トランザクション番号は、トランザクションを一意に特定可能なものであれば良く、特に限定されるものではない。トランザクション番号の例としては、トランザクションを処理するサーバのサーバ名と、各サーバで受け付けたトランザクションに一意に付加された番号との組み合わせが挙げられる。更に、KVペアがロックされていない場合は、ロック情報の代わりに、ロックがされていないことを示す情報が埋め込まれる。ロックがされていないことを示す情報の例としては、「0(ゼロ)」が挙げられる。
【0054】
次に、上述のステップS004の判定の結果、いずれか又は全てのKVペアにロック情報が存在した場合は、ロック情報取出し部104は、実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを判定する。(ステップS101)。
【0055】
ステップS101の判定の結果、実行対象トランザクションがロックを取得して動作するトランザクションである場合は、ロック情報取出し部104は、実行対象トランザクションの実行を待ち合わせるための処理を行う(ステップS102)。
【0056】
具体的には、ステップS102では、ロック情報取出し部104は、実行対象トランザクションのトランザクション番号と、実行対象トランザクションがアクセスするKVペアのKey値とを、ロック管理部102によって保持されているキューに格納する。キューに格納されているトランザクションは、定期的に再実行される。なお、本明細書では、今後、キューに格納する情報のことを便宜上、「トランザクション情報」と表記する。
【0057】
一方、ステップS101の判定の結果、実行対象トランザクションがロックを取得して動作するトランザクションでない場合は、ロック情報取出し部104は、実行対象トランザクションをアボートして、クライアント500に排他違反によるエラーを返却する(ステップS103)。
【0058】
このとき、本実施の形態1では、トランザクション処理装置100は、クライアント500に対して、ロックを取得している別のトランザクションが実行中のため、排他違反が発生していることを通知してもよい。ロックを取得しているトランザクションが実行中の場合は、すぐに再実行しても失敗してしまう可能性が高いため、このように排他違反のエラー原因を通知することで、クライアント500がトランザクションの再実行を遅らせるなどの判断をすることができる。また、本実施の形態1は、アボートした場合に、すぐにクライアント500にエラーを返却せずに、一定回数処理をリトライする態様であってもよい。
【0059】
次に、上述のステップS004の判定の結果、いずれのKVペアにもロック情報が存在していない場合も、上述のステップS101と同様に、ロック情報取出し部104は、実行対象トランザクションがロックを取得して動作するトランザクションであるかどうかを判定する。(ステップS201)。
【0060】
ステップS201の判定の結果、実行対象トランザクションがロックを取得して動作するトランザクションである場合は、ロック情報書き込み部105は、ステップS003で取得したKVペアのValue部にロック情報を埋め込む(ステップS202)。そして、ロック情報書き込み部105は、KVペアアクセス部201に対して、ロック情報が埋め込まれたKVペアの書き込みを要求する。
【0061】
そして、ステップS202が実行され、ロック情報書き込み部105がKVペアの書き込みを要求すると、データ格納装置200では、KVペアアクセス部201は、KVペアの書き込みに際して排他違反が発生するかどうかを判定する。判定の結果、排他違反がない場合は、KVペアアクセス部201は、ロック情報が埋め込まれたKVペアをKVペア記憶部202に書き込み、その後、ロック情報書き込み部105に対して、書き込み処理のコミット完了を通知する。一方、判定の結果、排他違反がある場合は、KVペアアクセス部201は、そのことを、ロック情報書き込み部105に通知する。
【0062】
従って、ステップS202の実行後、ロック情報書き込み部105は、KVペアアクセス部201から、書き込み処理についてコミット完了が通知されているかどうかを判定する(ステップS203)。
【0063】
ステップS203の判定の結果、KVペアアクセス部201からコミット完了が通知されていない場合は、ロック管理部102は、当該トランザクションの実行を待ち合わせるための処理を行う(ステップS204)。なお、ステップS204で行なわれる処理は、ステップS102で行なわれる処理と同様の処理であるため、詳細な説明について省略する。
【0064】
一方、ステップS203の判定の結果、KVペアアクセス部201からコミット完了が通知されている場合は、ロック情報書き込み部105はトランザクション実行部103に対して、実行対象トランザクションの処理を要求する(ステップS205)。これにより、トランザクション実行部103は、実行対象トランザクションの処理を実行し、処理結果を反映させるため、KVペアアクセス部201に対してKVペアの書き込みを要求する。
【0065】
また、このときも、ステップS202の実行後と同様に、データ格納装置200では、KVペアアクセス部201は、KVペアの書き込みに際して排他違反が発生するかどうかを判定する。判定の結果、排他違反がない場合は、KVペアアクセス部201は、ロック情報が埋め込まれたKVペアをKVペア記憶部202に書き込み、その後、トランザクション実行部103に対して、書き込み処理のコミット完了を通知する。一方、判定の結果、排他違反がある場合は、KVペアアクセス部201は、そのことを、トランザクション実行部103に通知する。
【0066】
従って、ステップS205の実行後、トランザクション実行部103は、KVペアアクセス部201から、書き込み処理についてコミット完了が通知されているかどうかを判定する(ステップS206)。
【0067】
ステップS206の判定の結果、KVペアアクセス部201からコミット完了が通知されていない場合は、トランザクション実行部103は、実行対象トランザクションをアボートして、クライアント500に排他違反によるエラーを返却する(ステップS208)。また、ステップS208では、トランザクション実行部103は、すぐにクライアント500にエラーを返却せずに、一定回数の処理をリトライしてもよい。
【0068】
なお、トランザクション処理装置100において、実行対象トランザクションがロックを取得した後は、他のトランザクション処理装置300で実行される別のトランザクションは、ステップS102で待ち合わせとされるか、ステップS103でアボートされるかのどちらである。従って、ロックを取得した後に、実行対象トランザクションが排他違反によってエラーになることはない。
【0069】
一方、ステップS206の判定の結果、KVペアアクセス部201からコミット完了が通知されている場合は、トランザクション実行部103は、KVペアの書き込みが完了しているので、ロック情報書き込み部105に対して、トランザクションのコミット完了を通知する(ステップS207)。
【0070】
次に、ステップS207が実行されると、ロック情報書き込み部105は、実行対象トランザクションの実行に際して、ロック情報を書き込んだKVペアから、このロック情報を削除する(ステップS209)。また、ロック情報書き込み部109は、KVペアアクセス部201に対して、ロック情報が削除されたKVペアの書き込みを要求する。
【0071】
更に、データ格納装置200では、KVペアアクセス部201は、要求を受けると、KVペア記憶部202に対して、ロック情報が削除されたKVペアの書き込みを行なう。また、この書き込み処理は、ロックが取得されている状況で実行されるため、他のトランザクションとの間で排他違反を起こすことはない。
【0072】
また、ここでいう「ロック情報の削除」の例としては、ロック情報が格納されているvalue部に、ロックがされていないことを示す情報、例えば「0(ゼロ)」を埋めることが挙げられる。また、ロック情報の削除は、トランザクション実行のステップS205において、トランザクション実行部103によるKVペアの書き込みの際に行なわれていてもよい。
【0073】
また、上述のステップS201の判定の結果、実行対象トランザクションがロックを取得して動作するトランザクションでない場合は、上述のステップS205が実行される。具体的には、この場合、ロック情報取出し部104は、トランザクション実行部103に実行対象トランザクションの処理を要求する。これにより、トランザクション実行部103は、実行対象トランザクションの処理を実行し、処理結果を反映させるため、KVペアアクセス部201に対して、KVペアの書き込みを要求する。
【0074】
また、ロックを取得しないで動作するトランザクションの場合は、KVペアアクセス部201によってKVペア記憶部202に書き込みが行なわれる際において、排他違反が起こる可能性がある。従って、この場合も、データ格納装置200では、KVペアアクセス部201は、KVペアの書き込みに際して排他違反が発生するかどうかを判定する。
【0075】
その後、上述したステップS206が実行され、その後、上述したステップS207又はステップS208が実行される。但し、この場合においては、実行対象トランザクションは、ロックを取得して動作するトランザクションではないため、ロック情報の削除を行なうステップS209は実行されない。
【0076】
[排他違反の具体例]
続いて、
図3に示した各ステップの実行時にデータ格納装置200で判定される排他違反の具体例について
図5〜
図8を用いて説明する。
【0077】
具体例1:
最初に、
図3に示すステップS202の実行後に、KVペアアクセス部201によって判定される排他違反について説明する。また、この場合の排他違反としては2つのケースが考えられる。各ケースについて、
図5及び
図6を用いて説明する。
図5は、
図3に示すステップS202の実行後に判定される排他違反の一例を説明するための説明図である。
図6は、
図3に示すステップS202の実行後に判定される排他違反の他の例を説明するための説明図である。
【0078】
まず、
図5は、ロックを取得して動作するトランザクション同士がロックの取得のために、ロック情報をKVペアに埋め込み、これをKVペア記憶部202に書き込むときに、排他違反が起こるケースを示している。
【0079】
図5の例では、トランザクション処理装置100が実行するトランザクションと、トランザクション処理装置300が実行するトランザクションとは、共にロックを取得して動作するトランザクションである。
【0080】
従って、
図5に示すように、トランザクション処理装置100及びトランザクション処理装置300は、共に、最初に、KVペアの取得を実行する。この処理は、
図3に示したステップS003に相当する。なお、各トランザクション処理装置において、この後に実行されたステップS004では、取得したKVペアにはロック情報が存在していない旨の判定(No判定)がなされているものとする。
【0081】
次に、トランザクション処理装置100及びトランザクション処理装置300それぞれでは、各ロック情報書き込み部105が、KVペアのValue部にロック情報の埋め込みを行なう。また、各ロック情報書き込み部105は、データ格納装置200のKVペアアクセス部201に対して、ロック情報が埋め込まれたKVペアの書き込みを要求する。この処理は、
図3に示したステップS202に相当する。
【0082】
そして、データ格納装置200では、KVペアの書き込みは、楽観的排他制御方式に沿って行なわれている。従って、
図5に示すように、トランザクション処理装置100の方が先にKVペアの書き込みを実行すると、トランザクション処理装置100によるロック取得は成功するが、トランザクション処理装置300によるロック取得は排他違反により失敗となる。
【0083】
次に、2つ目のケースについて説明する。
図6は、ロックを取得しないで動作するトランザクションとロックを取得して動作するトランザクションとが排他違反を起こすケースを示している。
【0084】
図6の例では、トランザクション処理装置100が実行するトランザクションはロックを取得しないで動作するトランザクションであるが、トランザクション処理装置300が実行するトランザクションはロックを取得して動作するトランザクションである。
【0085】
従って、
図6に示すように、トランザクション処理装置100及びトランザクション処理装置300は、共に、最初に、KVペアの取得を実行する。この処理は、
図4に示したステップS003に相当する。なお、
図6の例でも、各トランザクション処理装置において、取得したKVペアにはロック情報が存在していない旨の判定(No判定)がなされているものとする。
【0086】
次に、トランザクション処理装置100では、KVペアが取得された後、トランザクション実行部103が、トランザクションの実行を行い、データ格納装置200のKVペアアクセス部201に対して、トランザクション処理が実行されたKVペアの書き込みを要求する。この処理は、
図3に示したステップS205に相当する。
【0087】
一方、トランザクション処理装置300では、KVペアが取得された後、ロック情報書き込み部105が、KVペアのValue部にロック情報の埋め込みを行い、データ格納装置200のKVペアアクセス部201に対して、ロック情報が埋め込まれたKVペアの書き込みを要求する。この処理は、
図3に示したステップS202に相当する。
【0088】
そして、データ格納装置200では、KVペアの書き込みは、楽観的排他制御方式に沿って行なわれている。このため、
図6に示すように、
図5の例と同様に、トランザクション処理装置100の方が先にKVペアの書き込みを実行すると、トランザクション処理装置100によるトランザクションの実行は成功するが、トランザクション処理装置300によるロック取得は排他違反により失敗となる。
【0089】
具体例2:
続いて、
図3に示すステップS205の実行後に、KVペアアクセス部201によって判定される排他違反について説明する。また、この場合の排他違反としても、2つのケースが考えられる。各ケースについて
図7及び
図8を用いて説明する。
図7は、
図3に示すステップS205の実行後に判定される排他違反の一例を説明するための説明図である。
図8は、
図3に示すステップS205の実行後に判定される排他違反の他の例を説明するための説明図である。
【0090】
まず、
図7は、ロックを取得して動作するトランザクションとロックを取得しないで動作するトランザクションとが排他違反を起こすケースを示している。
【0091】
図7の例では、トランザクション処理装置100が実行するトランザクションは、ロックを取得して動作するトランザクションであるが、トランザクション処理装置300が実行するトランザクションはロックを取得しないで動作するトランザクションである。
【0092】
図7に示すように、最初に、トランザクション処理装置100及びトランザクション処理装置300は、共に、KVペアの取得を実行する。この処理は、
図3に示したステップS003に相当する。なお、
図7の例では、ステップS205が実行されるので、各トランザクション処理装置において、この後に実行されたステップS004では、取得したKVペアにはロック情報が存在していない旨の判定(No判定)がなされているものとする。
【0093】
次に、トランザクション処理装置100では、KVペアが取得された後、ロック情報書き込み部105が、KVペアのValue部にロック情報の埋め込みを行なう。また、ロック情報書き込み部105は、データ格納装置200のKVペアアクセス部201に対して、ロック情報が埋め込まれたKVペアの書き込みを要求する。この処理は、
図3に示したステップS202に相当する。
【0094】
一方、トランザクション処理装置300では、KVペアが取得された後、トランザクション実行部103が、トランザクションの実行を行い、データ格納装置200のKVペアアクセス部201に対して、トランザクション処理が実行されたKVペアの書き込みを要求する。この処理は、
図3に示したステップS205に相当する。
【0095】
そして、データ格納装置200では、KVペアの書き込みは、楽観的排他制御方式に沿って行なわれている。このため、
図7に示すように、トランザクション処理装置100の方が先にKVペアの書き込みを実行すると、トランザクション処理装置100によるトランザクションの実行は成功するが、トランザクション処理装置300によるロック取得は排他違反により失敗となる。
【0096】
次に、2つ目のケースについて説明する。
図8は、ロックを取得しないで動作するトランザクション同士が排他違反を起こすケースを示している。
【0097】
図8の例では、トランザクション処理装置100が実行するトランザクションと、トランザクション処理装置300が実行するトランザクションとは、共にロックを取得しないで動作するトランザクションである。
【0098】
従って、
図8に示すように、トランザクション処理装置100及びトランザクション処理装置300は、共に、最初に、KVペアの取得を実行する。この処理は、
図3に示したステップS003に相当する。なお、
図8の例では、ステップS205が実行されるので、各トランザクション処理装置において、この後に実行されたステップS004では、取得したKVペアにはロック情報が存在していない旨の判定(No判定)がなされているものとする。
【0099】
次に、トランザクション処理装置100及びトランザクション処理装置300では、KVペアが取得された後、共に、トランザクション実行部103が、トランザクションの実行を行い、データ格納装置200のKVペアアクセス部201に対して、トランザクション処理が実行されたKVペアの書き込みを要求する。この処理は、
図3に示したステップS205に相当する。
【0100】
そして、データ格納装置200では、KVペアの書き込みは、楽観的排他制御方式に沿って行なわれている。このため、
図8に示すように、
図7の例と同様に、トランザクション処理装置100の方が先にKVペアの書き込みを実行すると、トランザクション処理装置100によるトランザクションの実行は成功するが、トランザクション処理装置300によるロック取得は排他違反により失敗となる。
【0101】
[トランザクションの再実行処理]
続いて、
図3に示したステップS102で、ロック管理部102によってキューに格納されたトランザクションの再実行処理について
図9を用いて説明する。
図9は、本発明の実施の形態1におけるトランザクション処理装置のトランザクション再実行処理時の動作を示すフロー図である。
【0102】
図9に示すように、最初に、ロック情報取出し部104は、自身が保持するキューの中にトランザクション情報が格納されているかどうかを判定する(ステップS301)。ステップS301の判定の結果、キューの中にトランザクション情報が格納されていない場合は、ロック情報取出し部104は処理を終了する。
【0103】
一方、ステップS301の判定の結果、キューの中にトランザクション情報が格納されている場合は、ロック情報取出し部104は、キューの要素である、キューの先頭に格納されているトランザクション情報の取り出しを実行する(ステップS302)。
【0104】
次に、ロック情報取出し部104は、ステップS302で取り出したトランザクション情報に対して、ロックを取得する処理を行う(ステップS303)。この処理は、
図3に示したロックを取得する処理に相当する。なお、ここでいう「ロックを取得する処理」とは、
図3に示す、KVペア取得のステップS003からトランザクション待ち合わせ処理のステップS102までの処理、ステップS003からコミット完了判定のステップS204までの処理、又はステップS003からトランザクション待ち合わせ処理のステップS205までの処理を意味している。
【0105】
次に、ロック情報取出し部104は、ステップS303によって、トランザクション情報に対するロックを取得できたかどうかを判定する(ステップS304)。ステップS304の判定の結果、ロックを取得できた場合は、ロック情報取出し部104は、キューから、取り出した要素を削除する(ステップS305)。その後、再度ステップS301が実行される。
【0106】
一方、ステップS304の判定の結果、ロックを取得できなかった場合は、ロック情報取出し部104は、再度、ステップS302に戻り、次にキューに格納されているトランザクションに対して同様の処理を実行する。
【0107】
また、
図9には示されていないが、キューの要素を削除するステップS305の実行後、ロック情報取出し部104は、トランザクション実行部103に、ステップS102で取り出した要素に対応するトランザクションの実行を依頼する。この処理は、
図3に示したステップS205の処理に相当する。
【0108】
また、ステップS301でキューの中にトランザクション情報が格納されていないと判定されると、処理は終了するが、ロック情報取出し部104は、設定時間の経過後に、再度、ステップS301を実行する。つまり、ロック情報取出し部104は、キューに格納されているトランザクションを定期的に再実行する。
【0109】
但し、実行対象トランザクションがアクセスするKVペアのロックが解放されてから、実行対象トランザクションが再実行されるまでの間に、実行対象トランザクションがアクセスするKVペアにアクセスする新規のトランザクションがクライアント500から入力されたとする。この場合、新規のトランザクションが先に処理されてしまう。
【0110】
このため、キューに格納されているトランザクションがアクセスするKVペアにアクセスする、新規のトランザクションが入力された場合は、先に、キューに格納されているトランザクションが実行されるのが良い。また、このとき、新規のトランザクションがロックを取得して動作するトランザクションであるとする。この場合は、新規のトランザクションのトランザクション番号と、新規のトランザクションでアクセスするKeyの値とが、キューの末尾に格納される。一方、新規のトランザクションがロックを取得して動作するトランザクションでない場合は、処理がアボートされ、クライアント500に排他違反によるエラーが返却される。
【0111】
[プログラム]
本実施の形態1におけるプログラムは、コンピュータに、
図3に示すステップS001〜S209、更には、
図9に示すステップS301〜S305を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態1におけるトランザクション処理装置とトランザクション処理方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、トランザクション解析部101、ロック管理部102、及びトランザクション実行部103として機能し、処理を行なう。
【0112】
[実施の形態1による効果]
以上のように、本実施の形態1では、楽観的排他制御方式に沿って排他制御が行なわれる分散KVSにおいて、実行の対象となるトランザクションがアクセスするKVペアにロック情報を書き込むことで、当該トランザクションにロックを取得させることができる。この場合、同じKVペアにアクセスする他のトランザクションが存在していても、これに対して、トランザクションの待ち合わせを行なわせたり、アボートさせたりすることで、これを排除できる。
【0113】
この結果、楽観的排他制御方式を採用した場合の問題点、即ち、特定のKVペアに対する更新頻度が高くなると、トランザクション同士が競合し、コミットに失敗したトランザクションのやり直しが増えて、オーバーヘッドが大きくなるという問題が解決される。
【0114】
また、楽観的排他制御方式を採用した場合は、ロングトランザクションを実行したときに、トランザクションの競合のためにいつまでたってもトランザクションのコミットが成功しないという問題が発生するが、本実施の形態1によればこれも解消できる。そして、これにより、アプリケーションの設計も容易になる。
【0115】
更に、ロックは、KVペアのValue部に埋め込んだデータに基づいて行なわれるので、悲観的排他制御方式を採用した場合と異なり、ロックの管理がボトルネックとなってスケーラビリティが低下するという問題も解消される。
【0116】
(実施の形態2)
次に、本発明の実施の形態2における、トランザクション処理装置、トランザクション処理方法、及びプログラムについて、
図10〜
図12を参照しながら説明する。
【0117】
最初に、本実施の形態2におけるトランザクション処理装置の構成について、
図10及び
図11を用いて説明する。
図10は、本発明の実施の形態2におけるトランザクション処理装置の具体的構成を示すブロック図である。
【0118】
図10に示すように、本実施の形態2におけるトランザクション処理装置110は、トランザクション解析部101と、ロック管理部102と、トランザクション実行部103と、排他制御方式設定部111とを備えている。
【0119】
つまり、トランザクション処理装置110は、実施の形態1において
図2に示したトランザクション処理装置100の構成に加えて、排他制御方式設定部111を備える点で、トランザクション処理装置100と異なっている。以下、実施の形態1との相違点を中心に説明する。
【0120】
排他制御方式設定部111は、実行対象トランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第1の排他制御方式(楽観的排他制御方式)、及びロックの取得を必要とする第2の排他制御方式(悲観的排他制御方式)のうちいずれかに設定する。例えば、排他制御方式設定部111は、楽観的排他制御方式を設定している場合において、実行対象トランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、楽観的排他制御方式に代えて、悲観的排他制御方式を設定する。この場合、トランザクション実行部103は、設定された排他制御方式に従って、実行対象トランザクションを実行する。
【0121】
具体的には、まず、本実施の形態2では、トランザクション実行部103は、クライアント500から入力された、ロックを取得せずに動作する実行対象トランザクションが排他違反によりエラーとなった場合は、一定回数処理をリトライするものとする。そして、排他制御方式設定部111は、ロックを取得せずに動作する実行対象トランザクションが排他違反によってエラーとなった場合に、実行対象トランザクションがこれまでにリトライされた回数と、実行対象トランザクションの平均実行時間とを記録する。
【0122】
続いて、排他制御方式設定部111は、リトライ回数と平均実行時間との情報を基に、実行対象トランザクションの排他制御方式を、ロックの取得を必要とする悲観的排他制御方式に変更して、トランザクション実行部103に再実行を依頼する。ここで、
図10を用いて、リトライ回数と平均実行時間との情報を基にした排他制御方式の変更について説明する。
【0123】
図11は、本発明の実施の形態2において管理されているリトライ回数と平均実行時間との情報の一例を示す図である。
図11に示すように、排他制御方式設定部111は、トランザクションのリトライ回数と平均実行時間とを管理している。また、
図11の例では、各トランザクションのトランザクション番号毎に、リトライ回数と、平均実行時間とが記録されている。
【0124】
また、本実施の形態2では、排他制御方式設定部111によるトランザクションの平均実行時間の記録のために、トランザクション実行部103は、実行するトランザクションの実行時間を記録している。そして、トランザクション実行部103は、トランザクションの実行が排他違反によって失敗したときに、排他制御方式設定部111にトランザクション番号と、実行時間とを通知する。
【0125】
排他制御方式設定部111は、トランザクション実行部103からトランザクション番号と、実行時間とが通知されると、自身が管理している情報を更新する。具体的には、トランザクション実行部103から通知されたトランザクション番号と同じ番号が、自身が管理している情報の中に含まれている場合は、排他制御方式設定部111は、該当するトランザクション番号に対応するリトライ回数を1つ増加させ、平均実行時間を再計算する。
【0126】
一方、トランザクション実行部103から通知されたトランザクション番号と同じ番号が、自身が管理している情報の中に含まれていない場合は、排他制御方式設定部111は、リトライ回数を1、平均実行時間をトランザクション実行部103から通知された実行時間として、これらの情報を新たに記録する。
【0127】
排他制御方式設定部111は、このようにして、トランザクション実行部103から通知されたトランザクション番号に対応する情報を更新する。そして、排他制御方式設定部111は、更新した情報、即ち、更新後のリトライ回数及び平均実行時間に基づいて、ロックを取得しないで動作するトランザクションのままリトライするのか、ロックを取得して動作するトランザクションに変更してリトライするのかを判定する。
【0128】
例えば、排他制御方式設定部111は、リトライ回数と平均実行時間とが共に一定以上の場合に、排他制御方式を変更することができる。具体的には、排他制御方式設定部111は、リトライ回数が10回を超え、且つ、平均実行時間が1000ミリ秒を超える場合に、排他制御方式を変更してもよい。
【0129】
その他、排他制御方式設定部111は、リトライ回数が一定回数以上になるか、又は平均実行時間が一定以上の場合に、排他制御方式を変更してもよいし、リトライ回数と平均実行時間とから計算される評価値が一定以上になった場合に、排他制御方式を変更してもよい。
【0130】
また、上述したように、本実施の形態2では、排他制御方式を変更するのに利用するパラメータは、リトライ回数と平均実行時間とであるが、その理由は以下の通りである。まず、リトライ回数が増えるということは、当該トランザクションが排他違反により頻繁に失敗していることを意味する。従って、リトライ回数が多いほどロックを取得して動作するトランザクションとして実行したほうがよいと判断できる。また、リトライ回数が多くない場合でも、トランザクションの実行時間が長い場合は、排他違反により今後も失敗する可能性が高いため、ロックを取得して動作するトランザクションとして実行したほうがよいと判断できる。これらの点より、リトライ回数と平均実行時間とが、パラメータとして利用される。
【0131】
[装置動作]
次に、本実施の形態2におけるトランザクション処理装置110の動作について
図12を用いて説明する。但し、本実施の形態2においては、排他制御方式設定部111による処理を除いて、実施の形態1と同様の処理が行なわれる。つまり、本実施の形態2においても、実施の形態1と同様に、
図3に示すステップS001〜S209と、
図9に示すステップS301〜S305とが実行される。従って、以下においては、排他制御方式設定部111の動作を中心に説明する。
【0132】
更に、以下の説明においては、適宜
図10及び
図11を参酌する。また、本実施の形態2では、トランザクション処理装置110を動作させることによって、トランザクション処理方法が実施される。よって、本実施の形態2におけるトランザクション処理方法の説明は、以下のトランザクション処理装置110の動作説明に代える。
【0133】
図12は、本発明の実施の形態2におけるトランザクション処理装置の排他制御方式の設定処理時の動作を示すフロー図である。
図12に示すように、最初に、排他制御方式設定部111は、トランザクション実行部103から、トランザクション番号と実行時間とが通知されているかどうかを判定する(ステップS401)。
【0134】
ステップS401の判定の結果、トランザクション番号と実行時間とが通知されていない場合は、排他制御方式設定部111は、待機状態となる。一方、ステップS401の判定の結果、トランザクション番号と実行時間とが通知されている場合は、排他制御方式設定部111は、管理対象となる情報の追加、又は管理している情報の更新を実行する(ステップS402)。
【0135】
具体的には、ステップS402では、通知されたトランザクション番号と同じ番号が、管理している情報に含まれている場合は、排他制御方式設定部111は、該当するトランザクション番号に対応するリトライ回数を1つ増加させ、平均実行時間を再計算する。一方、トランザクション番号と同じ番号が、管理している情報の中に含まれていない場合は、排他制御方式設定部111は、リトライ回数を1、平均実行時間を通知された実行時間として、これらの情報を新たに記録する。
【0136】
次に、排他制御方式設定部111は、更新した情報に基づいて、実行対象トランザクションの排他制御方式の変更条件が満たされているかどうかを判定する(ステップS403)。具体的には、排他制御方式設定部111は、リトライ回数と平均実行時間とが共に一定以上であるかどうかを判定する。
【0137】
ステップS403の判定の結果、変更条件が満たされていない場合は、排他制御方式設定部111は、処理を終了する。一方、ステップS403の判定の結果、変更条件が満たされている場合は、排他制御方式設定部111は、排他制御方式を変更して、トランザクション実行部103に再実行を依頼し(ステップS404)、その後、処理を終了する。また、排他制御方式設定部111は、処理の終了後、設定時間が経過すると、再度、ステップS401〜S404を実行する。
【0138】
[プログラム]
本実施の形態2におけるプログラムは、コンピュータに、
図3に示すステップS001〜S209、
図9に示すステップS301〜S305、更には、
図12に示すステップS401〜S404を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態2におけるトランザクション処理装置とトランザクション処理方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、トランザクション解析部101、ロック管理部102、トランザクション実行部103、及び排他制御方式設定部111として機能し、処理を行なう。
【0139】
[実施の形態2による効果]
このように、本実施形態2では、ロックを取得しないで動作していたトランザクションを、設定条件に基づいて、ロックを取得して動作するトランザクションに変更することができる。このため、本実施の形態2によれば、トランザクションのリトライによるオーバーヘッドをより効率的に削減することができる。
【0140】
(実施の形態3)
次に、本発明の実施の形態3における、トランザクション処理装置、トランザクション処理方法、及びプログラムについて、
図13を参照しながら説明する。
図13は、は本発明の実施の形態3におけるトランザクション処理装置の具体的構成を示すブロック図である。
【0141】
図13に示すように、本実施の形態3におけるトランザクション処理装置120は、実施の形態1において
図2に示したトランザクション処理装置100と同様に、トランザクション解析部101と、ロック管理部102と、トランザクション実行部103とを備えている。
【0142】
但し、本実施の形態3においては、トランザクション処理装置120は、トランザクション解析部101において、更に、KVペアアクセス解析部121を備えており、この点で、実施の形態1におけるトランザクション処理装置100と異なっている。以下、実施の形態1との相違点を中心に説明する。
【0143】
本実施の形態1においては、トランザクション解析部101は、実施の形態1で述べた機能を有しているが、更に、KVペアアクセス解析部121を備えている。KVペアアクセス解析部121は、まず、実行対象トランザクションでアクセスされるデータ(KVペア)の数を特定する。そして、KVペアアクセス解析部121は、特定したKVペアの数に応じて、実行対象トランザクションについての実行時の排他制御方式として、ロックの取得を必要としない楽観的排他制御方式、及びロックの取得を必要とする悲観的排他制御方式のうちいずれかを設定する。
【0144】
具体的には、KVペアアクセス解析部121は、実行対象トランザクションが1つのKVペアのみを更新するトランザクションであった場合は、トランザクションの排他制御方式として、楽観的排他制御方式を選択する。一方、KVペアアクセス解析部121は、実行対象トランザクションが2つ以上のKVペアを更新するトランザクションであった場合は、悲観的排他制御方式を選択する。
【0145】
このように、更新対象となるKVペアが1つの場合に、楽観的排他制御が選択され、更新対象となるKVペアが2つ以上の場合に悲観的排他制御が選択される理由は、以下の通りである。つまり、更新対象となるKVペアが1つの場合は、トランザクションの競合によってやり直しになる可能性が低くなる。一方、更新対象となるKVペアが2つ以上の場合は、トランザクションの競合によってやり直しになる可能性が高くなる。よって、やり直しの発生を少なくするため、KVペアが1つの場合に、楽観的排他制御が選択され、KVペアが2つ以上の場合に悲観的排他制御が選択される。
【0146】
また、KVペアアクセス解析部121は、実行対象トランザクションがアクセスするKVペアのKey値とロック要否情報とに加えて、実行対象トランザクションについて選択された排他制御方式の情報をロック管理部102に渡す。その後、ロック管理部102及びトランザクション実行部103は、実施の形態1と同様に動作する。
【0147】
このように、本実施の形態3では、
図3に示したステップS002において、排他制御方式の設定と、排他制御方式の情報の受け渡しとが、追加で行なわれるが、それ以外のステップは実施の形態1と同様である。つまり、本実施の形態3では、
図3に示した、ステップS001、処理が追加されたステップS002、ステップS003〜S209と、
図9に示したステップS301〜S305とが実行される。そして、これらのステップの実行により、本実施の形態3におけるトランザクション処理方法が実行される。
【0148】
[プログラム]
本実施の形態3におけるプログラムは、コンピュータに、
図3に示すステップS001処理が追加されたステップS002、ステップS003〜S209、更には、
図9に示すステップS301〜S305を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態3におけるトランザクション処理装置とトランザクション処理方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、トランザクション解析部101、ロック管理部102、及びトランザクション実行部103として機能し、処理を行なう。
【0149】
[実施の形態3による効果]
このように、本実施形態3では、クライアント500から入力される実行対象トランザクションが更新するKVペアの数が特定され、特定された数に応じて、実行対象トランザクションの排他制御方式が設定される。このため、本実施の形態3によれば、トランザクションのリトライによるオーバーヘッドをより効率的に削減することができる。
【0150】
(実施の形態4)
次に、本発明の実施の形態4における、トランザクション処理装置、トランザクション処理方法、及びプログラムについて、
図14及び
図15を参照しながら説明する。
【0151】
最初に、本実施の形態4におけるトランザクション処理装置の構成について、
図14を用いて説明する。
図14は、本発明の実施の形態4におけるトランザクション処理装置の具体的構成を示すブロック図である。
【0152】
図14に示すように、本実施の形態4におけるトランザクション処理装置130は、実施の形態1において
図2に示したトランザクション処理装置100と同様に、トランザクション解析部101と、ロック管理部102と、トランザクション実行部103とを備えている。
【0153】
但し、本実施の形態4においては、トランザクション処理装置130は、ロック管理部102において、更に、タイムアウト処理部131を備えており、この点で、実施の形態1におけるトランザクション処理装置100と異なっている。以下、実施の形態1との相違点を中心に説明する。
【0154】
本実施の形態4において、タイムアウト処理部131は、実行が完了していない実行対象トランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定する。また、タイムアウト処理部131は、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、実行対象トランザクションを、実行対象から排除する。
【0155】
具体的には、タイムアウト処理部131は、ロック管理部102が管理しているトランザクション情報を格納しているキューから、一定時間が経過したトランザクション情報を特定し、特定したトランザクション情報を削除する。また、ここでいう「一定時間」は閾値であり、トランザクション処理装置130の管理者等によって予め設定される。なお、「一定時間」は、システム運用中に変更することも可能である。
【0156】
ところで、実施の形態1で述べたように、ロックを取得して動作するトランザクションがロックを取得できなかった場合は、ロック管理部102が管理しているキューに、当該トランザクションに関する情報が格納され、定期的に再実行される。しかし、状況によっては長時間トランザクションが開始されないという可能性がある。この場合、クライアント500からは処理がストールしているように見えてしまう。
【0157】
このため、本実施の形態3では、ロック管理部102が管理しているキューに格納されているトランザクションのうち、長時間ロックの取得に成功していないトランザクションはキューから削除され、クライアント500にエラーが返却される。
【0158】
また、上述した実施の形態1では、ロック管理部102が管理しているキューに格納されるトランザクション情報は、トランザクション番号と、当該トランザクションがアクセスするKey値とだけである。しかし、本実施の形態3では、経過時間を計測するため、トランザクション情報には、当該トランザクションが最初に実行されたときの時刻も含まれる。
【0159】
[装置動作]
次に、本実施の形態4におけるトランザクション処理装置130の動作について
図15を用いて説明する。但し、本実施の形態4においては、トランザクションの再実行処理を除いて、実施の形態1と同様の処理が行なわれる。つまり、本実施の形態4においても、実施の形態1と同様に、
図3に示すステップS001〜S209が実行される。従って、以下においては、トランザクションの再実行処理を中心に説明する。
【0160】
更に、以下の説明においては、適宜
図14を参酌する。また、本実施の形態4では、トランザクション処理装置130を動作させることによって、トランザクション処理方法が実施される。よって、本実施の形態4におけるトランザクション処理方法の説明は、以下のトランザクション処理装置130の動作説明に代える。
【0161】
図15は、本発明の実施の形態4におけるトランザクション処理装置のトランザクション再実行処理時の動作を示すフロー図である。
図15に示すように、最初に、ロック情報取出し部104は、自身が保持するキューの中にトランザクション情報が格納されているかどうかを判定する(ステップS501)。ステップS501は、実施の形態1において
図9に示したステップS301と同様のステップである。
【0162】
ステップS501の判定の結果、キューの中にトランザクション情報が格納されていない場合は、ロック情報取出し部104は処理を終了する。
【0163】
一方、ステップS301の判定の結果、キューの中にトランザクション情報が格納されている場合は、ロック情報取出し部104は、キューの要素である、キューの先頭に格納されているトランザクション情報の取り出しを実行する(ステップS502)。
【0164】
次に、タイムアウト処理部131は、ステップS502で取り出されたトランザクション情報に対応するトランザクションが最初に実行された時刻と、現在の時刻とを対比して、最初に実行された時刻からの経過時間が一定時間以上であるかどうかを判定する(ステップS503)。
【0165】
ステップS503の判定の結果、経過時間が一定時間以上である場合は、タイムアウト処理部131は、タイムアウト処理を実行する(ステップS507)。具体的には、タイムアウト処理部131は、キューから、当該トランザクション情報を削除して、クライアントにエラーを返却する。
【0166】
一方、上述したステップS503の判定の結果、経過時間が一定時間以上でない場合は、ロック情報取出し部104は、ステップS504〜S506を実行する。なお、ステップS504〜S506は、それぞれ、
図9に示したステップS303〜S305と同様のステップである。
【0167】
[プログラム]
本実施の形態4におけるプログラムは、コンピュータに、
図3に示すステップS001〜S209、更には、
図15に示すステップS501〜S507を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態4におけるトランザクション処理装置とトランザクション処理方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、トランザクション解析部101、ロック管理部102、及びトランザクション実行部103として機能し、処理を行なう。
【0168】
[実施の形態4による効果]
このように、本実施の形態4では、ロック取得を待っているトランザクションが長時間ロック取得に成功できない場合に、タイムアウトエラーとすることができるので、いつまでたってもクライアント500に結果が返らないという状況を回避できる。また、クライアント500は、タイムアウトエラーを受けて、トランザクションの再実行を遅らせるなどの対処を実行することが可能となる。
【0169】
(物理的構成)
ここで、実施の形態1〜4におけるプログラムを実行することによって、トランザクション処理装置を実現するコンピュータについて
図16を用いて説明する。
図16は、本発明の実施の形態1〜4におけるトランザクション処理装置を実現するコンピュータの一例を示すブロック図である。
【0170】
図16に示すように、コンピュータ10は、CPU11と、メインメモリ12と、記憶装置13と、入力インターフェイス14と、表示コントローラ15と、データリーダ/ライタ16と、通信インターフェイス17とを備える。これらの各部は、バス21を介して、互いにデータ通信可能に接続される。
【0171】
CPU11は、記憶装置13に格納された、本実施の形態におけるプログラム(コード)をメインメモリ12に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ12は、典型的には、DRAM(Dynamic Random Access Memory)等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体20に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス17を介して接続されたインターネット上で流通するものであっても良い。
【0172】
また、記憶装置13の具体例としては、ハードディスクドライブの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス14は、CPU11と、キーボード及びマウスといった入力機器18との間のデータ伝送を仲介する。表示コントローラ15は、ディスプレイ装置19と接続され、ディスプレイ装置19での表示を制御する。
【0173】
データリーダ/ライタ16は、CPU11と記録媒体20との間のデータ伝送を仲介し、記録媒体20からのプログラムの読み出し、及びコンピュータ10における処理結果の記録媒体20への書き込みを実行する。通信インターフェイス17は、CPU11と、他のコンピュータとの間のデータ伝送を仲介する。
【0174】
また、記録媒体20の具体例としては、CF(Compact Flash(登録商標))及びSD(Secure Digital)等の汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)等の磁気記憶媒体、又はCD−ROM(Compact Disk Read Only Memory)などの光学記憶媒体が挙げられる。
【0175】
上述した実施の形態の一部又は全部は、以下に記載する(付記1)〜(付記24)によって表現することができるが、以下の記載に限定されるものではない。
【0176】
(付記1)
実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータを特定する、トランザクション解析部と、
前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ロック管理部と、
前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、トランザクション実行部と、を備えている、
ことを特徴とするトランザクション処理装置。
【0177】
(付記2)
前記ロック管理部が、特定された前記データに、ロック情報を付加することによって、前記トランザクションにロックを取得させる、
付記1に記載のトランザクション処理装置。
【0178】
(付記3)
前記データベースが、トランザクションでアクセスされるデータと、それに対応するキーとを、ペアデータとして格納している場合に、
前記トランザクション解析部は、前記実行対象となるトランザクションでアクセスされるデータとそれに対応するキーとの前記ペアデータを特定し、
前記ロック管理部は、特定された前記ペアデータのキーを用いて、前記データベースに対して、特定された前記ペアデータの特定の領域に前記ロック情報を書き込むように指示を行ない、それによって前記トランザクションにロックを取得させ、
前記トランザクション実行部は、前記トランザクションの実行後に、特定された前記ペアデータのキーを用いて、前記データベースに格納されている前記ペアデータを更新する、
付記2に記載のトランザクション処理装置。
【0179】
(付記4)
前記実行対象となるトランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第1の排他制御方式、及びロックの取得を必要とする第2の排他制御方式のうちいずれかに設定する、排他制御方式設定部を更に備え、
前記トランザクション実行部は、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記1〜3のいずれかに記載のトランザクション処理装置。
【0180】
(付記5)
前記排他制御方式設定部が、前記第1の排他制御方式を設定している場合において、前記実行対象となるトランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、前記第1の排他制御方式に代えて、前記第2の排他制御方式を設定する、付記4に記載のトランザクション処理装置。
【0181】
(付記6)
前記トランザクション解析部が、更に、前記実行対象となるトランザクションでアクセスされる前記データの数を特定し、
特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第1の排他制御方式、及びロックの取得を必要とする第2の排他制御方式のうちいずれかを設定し、
前記トランザクション実行部は、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記1〜3のいずれかに記載のトランザクション処理装置。
【0182】
(付記7)
前記トランザクション解析部が、特定された前記データの数が1つの場合に、前記第1の排他制御方式を設定し、特定された前記データの数が2つ以上の場合に、前記第2の排他制御方式を設定する、
付記6に記載のトランザクション処理装置。
【0183】
(付記8)
前記実行対象となっているが、実行が完了していないトランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定し、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、前記実行対象となるトランザクションを、実行対象から排除する、タイムアウト処理部を更に備えている、
付記1〜7のいずれかに記載のトランザクション処理装置。
【0184】
(付記9)
(a)実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータを特定する、ステップと、
(b)前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ステップと、
(c)前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、ステップと、を有する、
ことを特徴とするトランザクション処理方法。
【0185】
(付記10)
前記(b)のステップにおいて、特定された前記データに、ロック情報を付加することによって、前記トランザクションにロックを取得させる、
付記9に記載のトランザクション処理方法。
【0186】
(付記11)
前記データベースが、トランザクションでアクセスされるデータと、それに対応するキーとを、ペアデータとして格納している場合に、
前記(a)のステップにおいて、前記実行対象となるトランザクションでアクセスされるデータとそれに対応するキーとの前記ペアデータを特定し、
前記(b)のステップにおいて、特定された前記ペアデータのキーを用いて、前記データベースに対して、特定された前記ペアデータの特定の領域に前記ロック情報を書き込むように指示を行ない、それによって前記トランザクションにロックを取得させ、
前記(c)のステップにおいて、前記トランザクションの実行後に、特定された前記ペアデータのキーを用いて、前記データベースに格納されている前記ペアデータを更新する、
付記10に記載のトランザクション処理方法。
【0187】
(付記12)
(d)前記実行対象となるトランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第1の排他制御方式、及びロックの取得を必要とする第2の排他制御方式のうちいずれかに設定する、ステップを更に有し、
前記(c)のステップにおいて、前記(d)のステップで設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記9〜11のいずれかに記載のトランザクション処理方法。
【0188】
(付記13)
前記(d)のステップにおいて、前記第1の排他制御方式を設定している場合において、前記実行対象となるトランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、前記第1の排他制御方式に代えて、前記第2の排他制御方式を設定する、付記12に記載のトランザクション処理方法。
【0189】
(付記14)
前記(a)のステップにおいて、前記実行対象となるトランザクションでアクセスされる前記データの数を特定し、
特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第1の排他制御方式、及びロックの取得を必要とする第2の排他制御方式のうちいずれかを設定し、
前記(c)のステップにおいて、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記9〜11のいずれかに記載のトランザクション処理方法。
【0190】
(付記15)
前記(a)のステップにおいて、特定された前記データの数が1つの場合に、前記第1の排他制御方式を設定し、特定された前記データの数が2つ以上の場合に、前記第2の排他制御方式を設定する、
付記14に記載のトランザクション処理方法。
【0191】
(付記16)
(e)前記実行対象となっているが、実行が完了していないトランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定し、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、前記実行対象となるトランザクションを、実行対象から排除する、ステップを更に有している、
付記9〜15のいずれかに記載のトランザクション処理方法。
【0192】
(付記17)
コンピュータに、
(a)実行対象となるトランザクションを解析して、前記実行対象となるトランザクションがロックを取得して動作するトランザクションであるかどうかを判定し、更に、データベース上の前記実行対象となるトランザクションでアクセスされるデータを特定する、ステップと、
(b)前記実行対象となるトランザクションが、ロックを取得して動作するトランザクションである場合に、前記実行対象となるトランザクションにロックを取得させる、ステップと、
(c)前記実行対象となるトランザクション以外の別のトランザクションがロックを取得していないことを条件に、前記実行対象となるトランザクションを実行し、実行結果に基づいて、前記実行対象となるトランザクションでアクセスされる、特定された前記データを更新する、ステップと、
を実行させるプログラム。
【0193】
(付記18)
前記(b)のステップにおいて、特定された前記データに、ロック情報を付加することによって、前記トランザクションにロックを取得させる、
付記17に記載のプログラム。
【0194】
(付記19)
前記データベースが、トランザクションでアクセスされるデータと、それに対応するキーとを、ペアデータとして格納している場合に、
前記(a)のステップにおいて、前記実行対象となるトランザクションでアクセスされるデータとそれに対応するキーとの前記ペアデータを特定し、
前記(b)のステップにおいて、特定された前記ペアデータのキーを用いて、前記データベースに対して、特定された前記ペアデータの特定の領域に前記ロック情報を書き込むように指示を行ない、それによって前記トランザクションにロックを取得させ、
前記(c)のステップにおいて、前記トランザクションの実行後に、特定された前記ペアデータのキーを用いて、前記データベースに格納されている前記ペアデータを更新する、
付記18に記載のプログラム。
【0195】
(付記20)
(d)前記実行対象となるトランザクションについての実行時の排他制御方式を、ロックの取得を必要としない第1の排他制御方式、及びロックの取得を必要とする第2の排他制御方式のうちいずれかに設定する、ステップを、更に前記コンピュータに実行させ、
前記(c)のステップにおいて、前記(d)のステップで設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記17〜19のいずれかに記載のプログラム。
【0196】
(付記21)
前記(d)のステップにおいて、前記第1の排他制御方式を設定している場合において、前記実行対象となるトランザクションの実行が完了せず、且つ、設定された条件が満たされていることを条件に、前記第1の排他制御方式に代えて、前記第2の排他制御方式を設定する、付記20に記載のプログラム。
【0197】
(付記22)
前記(a)のステップにおいて、前記実行対象となるトランザクションでアクセスされる前記データの数を特定し、
特定した前記データの数に応じて、前記実行対象となるトランザクションについての実行時の排他制御方式として、ロックの取得を必要としない第1の排他制御方式、及びロックの取得を必要とする第2の排他制御方式のうちいずれかを設定し、
前記(c)のステップにおいて、設定された排他制御方式に従って、前記実行対象となるトランザクションを実行する、
付記17〜19のいずれかに記載のプログラム。
【0198】
(付記23)
前記(a)のステップにおいて、特定された前記データの数が1つの場合に、前記第1の排他制御方式を設定し、特定された前記データの数が2つ以上の場合に、前記第2の排他制御方式を設定する、
付記22に記載のプログラム。
【0199】
(付記24)
(e)前記実行対象となっているが、実行が完了していないトランザクションについて、基準時からの経過時間が閾値を超えているどうかを判定し、判定の結果に基づいて、基準時からの経過時間が閾値を超えている、前記実行対象となるトランザクションを、実行対象から排除する、ステップを、更に前記コンピュータに実行させる、
付記17〜23のいずれかに記載のプログラム。