特表2018-527653IP Force 特許公報全文掲載

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】特表2018-527653(P2018-527653A)
(43)【公表日】2018年9月20日
(54)【発明の名称】分散型データベースシステムを用いるネットワーク内でデータベースアクセス制御を提供する方法及びアーキテクチャ
(51)【国際特許分類】
   G06F 12/00 20060101AFI20180824BHJP
【FI】
   G06F12/00 518A
   G06F12/00 535F
   G06F12/00 545A
【審査請求】有
【予備審査請求】未請求
【全頁数】50
(21)【出願番号】特願2018-500733(P2018-500733)
(86)(22)【出願日】2016年7月5日
(85)【翻訳文提出日】2018年2月27日
(86)【国際出願番号】US2016040953
(87)【国際公開番号】WO2017011220
(87)【国際公開日】20170119
(31)【優先権主張番号】62/190,843
(32)【優先日】2015年7月10日
(33)【優先権主張国】US
(81)【指定国】 AP(BW,GH,GM,KE,LR,LS,MW,MZ,NA,RW,SD,SL,ST,SZ,TZ,UG,ZM,ZW),EA(AM,AZ,BY,KG,KZ,RU,TJ,TM),EP(AL,AT,BE,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LT,LU,LV,MC,MK,MT,NL,NO,PL,PT,RO,RS,SE,SI,SK,SM,TR),OA(BF,BJ,CF,CG,CI,CM,GA,GN,GQ,GW,KM,ML,MR,NE,SN,TD,TG),AE,AG,AL,AM,AO,AT,AU,AZ,BA,BB,BG,BH,BN,BR,BW,BY,BZ,CA,CH,CL,CN,CO,CR,CU,CZ,DE,DK,DM,DO,DZ,EC,EE,EG,ES,FI,GB,GD,GE,GH,GM,GT,HN,HR,HU,ID,IL,IN,IR,IS,JP,KE,KG,KN,KP,KR,KZ,LA,LC,LK,LR,LS,LU,LY,MA,MD,ME,MG,MK,MN,MW,MX,MY,MZ,NA,NG,NI,NO,NZ,OM,PA,PE,PG,PH,PL,PT,QA,RO,RS,RU,RW,SA,SC,SD,SE,SG,SK,SL,SM,ST,SV,SY,TH,TJ,TM,TN,TR,TT,TZ,UA,UG,US
(71)【出願人】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100107984
【弁理士】
【氏名又は名称】廣田 雅紀
(74)【代理人】
【識別番号】100102255
【弁理士】
【氏名又は名称】小澤 誠次
(74)【代理人】
【識別番号】100096482
【弁理士】
【氏名又は名称】東海 裕作
(74)【代理人】
【識別番号】100188352
【弁理士】
【氏名又は名称】松田 一弘
(74)【代理人】
【識別番号】100131093
【弁理士】
【氏名又は名称】堀内 真
(74)【代理人】
【識別番号】100150902
【弁理士】
【氏名又は名称】山内 正子
(74)【代理人】
【識別番号】100141391
【弁理士】
【氏名又は名称】園元 修一
(74)【代理人】
【識別番号】100198074
【弁理士】
【氏名又は名称】山村 昭裕
(74)【代理人】
【識別番号】100145920
【弁理士】
【氏名又は名称】森川 聡
(74)【代理人】
【識別番号】100096013
【弁理士】
【氏名又は名称】富田 博行
(72)【発明者】
【氏名】ダウロス ブライアン フィル
(72)【発明者】
【氏名】レヴィラク ステファン エー.
(57)【要約】
分散型データベースシステム(102、202)においてデータベーストランザクションを管理することが、第1のノードに、各々がトランザクションに関連付けられ、トランザクションの開始時間、及びトランザクションの開始時間にアクティブであった最も古いトランザクションの開始時間を含む、トランザクションの第1の複数のレコードを維持することと;第2のノードに、各々がトランザクション開始時間及びトランザクション終了時間を含む、第2のノードに関連する完了したトランザクションのレコードを含む、トランザクションの第2の複数のレコードを維持することと;システム内の最も古い現在アクティブなトランザクションのトランザクション開始時間にアクティブであった最も古いトランザクションの開始時間を含む、第1のノードからのメッセージを、第2のノードにおいて受信することと;最も古いトランザクションの開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを第2の複数のレコードから削除することとを含む。
【特許請求の範囲】
【請求項1】
複数のノードを含む分散型データベースシステムにおいてデータベーストランザクションを管理するための方法であって、
前記複数のノードのうちの第1のノードに、前記システム内のトランザクションの第1の複数のレコードを維持するステップであって、前記第1の複数のレコードの中の各レコードが、トランザクションに関連付けられ、前記トランザクションの開始時間、及び前記トランザクションの前記開始時間にアクティブであった最も古いトランザクションの開始時間を含み、前記第1の複数のレコードの中のレコードのうちの1つが、前記システム内の最も古い現在アクティブなトランザクションのレコードである、前記第1の複数のレコードを維持するステップと、
前記複数のノードのうちの第2のノードに、トランザクションの第2の複数のレコードを維持するステップであって、前記第2の複数のレコードが、前記第2のノードに関連する完了したトランザクションのレコードを含み、前記第2の複数のレコードの中の各レコードが、トランザクション開始時間及びトランザクション終了時間を含む、前記第2の複数のレコードを維持するステップと、
前記システム内の前記最も古い現在アクティブなトランザクションのトランザクション開始時間にアクティブであった最も古いトランザクションの開始時間を含む、前記第1のノードからのメッセージを、前記第2のノードにおいて受信するステップと、
前記最も古いトランザクションの前記開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを前記第2の複数のレコードから削除するステップとを含む、前記方法。
【請求項2】
第1のノードからのメッセージの要求を第2のノードから送信するステップをさらに含む、請求項1に記載の方法。
【請求項3】
システム内のアクティブなトランザクションのレコードを含む第3の複数のレコードを含む第1のノードからのメッセージを第2のノードにおいて受信するステップであって、前記第3の複数のレコードの中の各レコードが、トランザクション開始時間を含む、前記受信するステップと、
第2の複数のレコードの中の完了したトランザクションの各レコードに関して、前記第3の複数のレコードに基づいて前記レコードを削除すべきかどうかを決定するステップとをさらに含む、請求項1又は2に記載の方法。
【請求項4】
第3の複数のレコードに基づいてレコードを削除すべきかどうかを決定するステップが、前記第3の複数のレコードの中のアクティブなトランザクションのレコードのトランザクション開始時間を、完了したトランザクションのレコードのトランザクション開始時間に始まり、前記完了したトランザクションの前記レコードのトランザクション終了時間に終わる時間間隔と比較することを含む、請求項3に記載の方法。
【請求項5】
第3の複数のレコードに基づいてレコードを削除すべきかどうかを決定するステップが、前記第3の複数のレコードの中のアクティブなトランザクションのレコードのトランザクション開始時間のいずれも、完了したトランザクションのレコードのトランザクション開始時間に始まり、前記完了したトランザクションの前記レコードのトランザクション終了時間に終わる時間間隔内にない場合に第2の複数のレコードから前記完了したトランザクションの前記レコードを削除することを含む、請求項4に記載の方法。
【請求項6】
第3の複数のレコードに基づいてレコードを削除すべきかどうかを決定するステップが、前記第3の複数のレコードの中のアクティブなトランザクションのレコードが、完了したトランザクションのレコードのトランザクション開始時間に始まり、前記完了したトランザクションの前記レコードのトランザクション終了時間に終わる時間間隔内のトランザクション開始時間に関連付けられる場合に第2の複数のレコードに前記完了したトランザクションの前記レコードを残すことを含む、請求項4に記載の方法。
【請求項7】
第3の複数のレコードに基づいてレコードを削除するかどうかを決定するステップが、最も古いトランザクションの開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを第2の複数のレコードから削除した後に行われる、請求項3に記載の方法。
【請求項8】
第2のノードに関連するデータ要素にアクセスするための第1のトランザクションを前記第2のノードにおいて受信するステップと、
前記第2のノードに、前記第2のノードでアクティブなトランザクションのレコードを含む第3の複数のレコードを維持するステップと、
前記第1のトランザクションが、第2の複数のレコード及び前記第3の複数のレコードのうちの一方又は両方に基づいて前記データ要素の複数のバージョンのうちの前記データ要素のバージョンにアクセスすることを許容されるかどうかを決定するステップとをさらに含む、請求項1〜7のいずれかに記載の方法。
【請求項9】
第1のトランザクションが、第2の複数のレコード及び第3の複数のレコードのうちの一方又は両方に基づいてデータ要素のバージョンにアクセスすることを許容されるかどうかを決定するステップが、
前記データ要素の前記バージョンに関連する第2のトランザクションのレコードが前記第3の複数のレコードに含まれるかどうかを決定し、含まれる場合、前記第1のトランザクションが前記データ要素にアクセスすることを許容されると決定することと、
前記第2のトランザクションの前記レコードが前記第3の複数のレコードに含まれない場合、前記第2のトランザクションの前記レコードが前記第2の複数のレコードに含まれるかどうかを決定し、含まれる場合、前記第1のトランザクションの開始時間を前記第2のトランザクションの終了時間と比較して、前記第1のトランザクションが前記データ要素にアクセスすることを許容されるかどうかを決定することと、
前記第2のトランザクションの前記レコードが前記第2の複数のレコード又は前記第3の複数のレコードに含まれない場合、前記第1のトランザクションが前記データ要素にアクセスすることを許容されると決定することとを含む、請求項8に記載の方法。
【請求項10】
第2のトランザクションのトランザクション終了時間が第1のトランザクションのトランザクション開始時間よりも前に発生した場合、及び第2の複数のレコードの中に第3のトランザクションのレコードが存在しない場合、前記第1のトランザクションがデータ要素のバージョンを読み取ることを許容され、前記第3のトランザクションが、前記データ要素の第2のバージョンを書き込み済みであり、前記第2のトランザクションの前記トランザクション終了時間の後、及び前記第1のトランザクションの前記トランザクション開始時間の前に発生するトランザクション終了時間を有する、請求項9に記載の方法。
【請求項11】
第1のトランザクションが、データ要素のバージョンが前記第1のトランザクションによって書き込まれた場合に前記データ要素の前記バージョンを読み取ることを許容される、請求項9に記載の方法。
【請求項12】
第2のトランザクションのトランザクション開始時間が第1のトランザクションのトランザクション開始時間の後に発生した場合、前記第1のトランザクションが、データ要素のバージョンを読み取ることを許容されない、請求項9に記載の方法。
【請求項13】
第2の複数のレコードの完了したトランザクションのレコードが、前記レコードのトランザクション終了時間に基づいて順序付けられる、請求項1〜12のいずれかに記載の方法。
【請求項14】
最も古いアクティブなトランザクションのレコードのトランザクション開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを第2の複数のレコードから削除するステップが、
前記最も古いトランザクションの前記レコードの前記トランザクション開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのレコードが特定されるまで、前記第2の複数のレコードの中の最も新しく完了したトランザクションのレコードから始まる順序で、前記第2の複数のレコードを通じて繰り返すステップと、
前記第2の複数のレコードから特定されたレコードを削除するステップを含む請求項13に記載の方法。
【請求項15】
第2の複数のレコードから特定されたレコードのトランザクション終了時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを削除するステップをさらに含む請求項13に記載の方法。
【請求項16】
複数のノードを含む分散型データベースシステムにおいてデータベーストランザクションを管理するための、ソフトウェアを非一時的形態で記憶するコンピュータ可読媒体であって、前記ソフトウェアが、コンピューティングシステムに、
前記複数のノードのうちの第1のノードに、前記システム内のトランザクションの第1の複数のレコードを維持することであって、前記第1の複数のレコードの中の各レコードが、トランザクションに関連付けられ、前記トランザクションの開始時間、及び前記トランザクションの前記開始時間にアクティブであった最も古いトランザクションの開始時間を含み、前記第1の複数のレコードの中のレコードのうちの1つが、前記システム内の最も古い現在アクティブなトランザクションのレコードである、前記第1の複数のレコードを維持することと、
前記複数のノードのうちの第2のノードに、トランザクションの第2の複数のレコードを維持することであって、前記第2の複数のレコードが、前記第2のノードに関連する完了したトランザクションのレコードを含み、前記第2の複数のレコードの中の各レコードが、トランザクション開始時間及びトランザクション終了時間を含む、前記第2の複数のレコードを維持することと、
前記システム内の前記最も古い現在アクティブなトランザクションのトランザクション開始時間にアクティブであった最も古いトランザクションの開始時間を含む、前記第1のノードからのメッセージを、前記第2のノードにおいて受信することと、
前記最も古いトランザクションの前記開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを前記第2の複数のレコードから削除することとを行わせるための命令を含む、前記コンピュータ可読媒体。
【請求項17】
データベーストランザクションを管理するための装置であって、
分散型データベースシステム内に配置された複数のノードであって、各ノードが、少なくとも1つのプロセッサを含む、前記複数のノードと、
前記複数のノードの間で情報を送信及び受信するために前記複数のノードのポートを接続する通信媒体とを含み、
前記複数のノードのうちの第1のノードが、前記システム内のトランザクションの第1の複数のレコードを維持するように構成され、前記第1の複数のレコードの中の各レコードが、トランザクションに関連付けられ、前記トランザクションの開始時間、及び前記トランザクションの前記開始時間にアクティブであった最も古いトランザクションの開始時間を含み、前記第1の複数のレコードの中のレコードのうちの1つが、前記システム内の最も古い現在アクティブなトランザクションのレコードであり、
前記複数のノードのうちの第2のノードが、トランザクションの第2の複数のレコードを維持するように構成され、前記第2の複数のレコードが、前記第2のノードに関連する完了したトランザクションのレコードを含み、前記第2の複数のレコードの中の各レコードが、トランザクション開始時間及びトランザクション終了時間を含み、
前記第2のノードが、前記システム内の前記最も古い現在アクティブなトランザクションのトランザクション開始時間にアクティブであった最も古いトランザクションの開始時間を含む、前記第1のノードからのメッセージを受信するように構成され、
前記第2のノードが、前記最も古いトランザクションの前記開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを前記第2の複数のレコードから削除するように構成される、前記装置。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2015年7月10日に出願した米国特許出願第62/190,843号明細書の優先権を主張するものである。
【0002】
この説明は、分散型データベースシステムのネットワークを用いるデータベースアクセス制御を提供する方法及びアーキテクチャ
【背景技術】
【0003】
データベースは、ソフトウェアプログラムを使用して管理し問い合わせることができる永続的なデータの構造化された組である。トランザクション型(transactional)データベース管理システムは、データベース「トランザクション」を使用してデータベース内のデータに働きかける(例えば、記憶する及び操作する)リレーショナルデータベースシステムである。概して、データベーストランザクションは、データベースに対してデータベース管理システムによって実施される(1又は2以上の操作を含む)単一の作業単位を象徴する。データベーストランザクションが確実に処理されることを保証するために、データベーストランザクションは、原子性がなければならず(つまり、その1若しくは2以上の操作のすべてを含むトランザクションがすべて完了するか若しくは何らの影響も与えないかのどちらかでなければならず)、一貫性がなければならず(つまり、トランザクションがデータベースをある有効な状態から別の有効な状態へと移さなければならず)、独立性がなければならず(つまり、同時に実行されるトランザクションがデータベース内で、それらのトランザクションが逐次的に実行されたとした場合に至るのと同じ状態に至り)、永続性がなければならない(つまり、コミットされたトランザクションがシステムのクラッシュ、エラー、及びその他の問題に関係なくコミットされたままである)。データベーストランザクションのこの1組の特性は、「ACID」と呼ばれることがある。
【発明の概要】
【課題を解決するための手段】
【0004】
態様においては、概して、複数のノードを含む分散型データベースシステムにおいてデータベーストランザクションを管理するための方法が、複数のノードのうちの第1のノードに、システム内のトランザクションの第1の複数のレコードを維持するステップであって、第1の複数のレコードの中の各レコードが、トランザクションに関連付けられ、トランザクションの開始時間、及びトランザクションの開始時間にアクティブであった最も古いトランザクションの開始時間を含み、第1の複数のレコードの中のレコードのうちの1つが、システム内の最も古い現在アクティブなトランザクションのレコードである、ステップと、複数のノードのうちの第2のノードに、トランザクションの第2の複数のレコードを維持するステップであって、第2の複数のレコードが、第2のノードに関連する完了したトランザクションのレコードを含み、第2の複数のレコードの中の各レコードが、トランザクション開始時間及びトランザクション終了時間を含む、ステップと、システム内の最も古い現在アクティブなトランザクションのトランザクション開始時間にアクティブであった最も古いトランザクションの開始時間を含む、第1のノードからのメッセージを、第2のノードにおいて受信するステップと、最も古いトランザクションの開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを第2の複数のレコードから削除するステップとを含む。
【0005】
態様は、以下の特徴のうちの1又は2以上を含み得る。
【0006】
方法は、第1のノードからのメッセージの要求を第2のノードから送信するステップをさらに含む。
【0007】
方法は、システム内のアクティブなトランザクションのレコードを含む第3の複数のレコードを含む第1のノードからのメッセージを第2のノードにおいて受信するステップであって、第3の複数のレコードの中の各レコードが、トランザクション開始時間を含む、ステップと、第2の複数のレコードの中の完了したトランザクションの各レコードに関して、第3の複数のレコードに基づいてレコードを削除すべきかどうかを決定するステップとをさらに含む。
【0008】
第3の複数のレコードに基づいてレコードを削除すべきかどうかを決定するステップは、第3の複数のレコードの中のアクティブなトランザクションのレコードのトランザクション開始時間を、完了したトランザクションのレコードのトランザクション開始時間に始まり、完了したトランザクションのレコードのトランザクション終了時間に終わる時間間隔と比較することを含む。
【0009】
第3の複数のレコードに基づいてレコードを削除すべきかどうかを決定するステップは、第3の複数のレコードの中のアクティブなトランザクションのレコードのトランザクション開始時間のいずれも、完了したトランザクションのレコードのトランザクション開始時間に始まり、完了したトランザクションのレコードのトランザクション終了時間に終わる時間間隔内にない場合に第2の複数のレコードから完了したトランザクションのレコードを削除することを含む。
【0010】
第3の複数のレコードに基づいてレコードを削除すべきかどうかを決定するステップは、第3の複数のレコードの中のアクティブなトランザクションのレコードが、完了したトランザクションのレコードのトランザクション開始時間に始まり、完了したトランザクションのレコードのトランザクション終了時間に終わる時間間隔内のトランザクション開始時間に関連付けられる場合に第2の複数のレコードに完了したトランザクションのレコードを残すことを含む。
【0011】
第3の複数のレコードに基づいてレコードを削除するかどうかを決定するステップは、最も古いトランザクションの開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを第2の複数のレコードから削除した後に行われる。
【0012】
方法は、第2のノードに関連するデータ要素にアクセスするための第1のトランザクションを第2のノードにおいて受信するステップと、第2のノードに、第2のノードのアクティブなトランザクションのレコードを含む第3の複数のレコードを維持するステップと、第1のトランザクションが、第2の複数のレコード及び第3の複数のレコードのうちの一方又は両方に基づいてデータ要素の複数のバージョンのうちのデータ要素のバージョンにアクセスすることを許容されるかどうかを決定するステップとをさらに含む。
【0013】
第1のトランザクションが、第2の複数のレコード及び第3の複数のレコードのうちの一方又は両方に基づいてデータ要素のバージョンにアクセスすることを許容されるかどうかを決定するステップは、データ要素のバージョンに関連する第2のトランザクションのレコードが第3の複数のレコードに含まれるかどうかを決定し、含まれる場合、第1のトランザクションがデータ要素にアクセスすることを許容されると決定することと、第2のトランザクションのレコードが第3の複数のレコードに含まれない場合、第2のトランザクションのレコードが第2の複数のレコードに含まれるかどうかを決定し、含まれる場合、第1のトランザクションの開始時間を第2のトランザクションの終了時間と比較して、第1のトランザクションがデータ要素にアクセスすることを許容されるかどうかを決定することと、第2のトランザクションのレコードが第2の複数のレコード又は第3の複数のレコードに含まれない場合、第1のトランザクションがデータ要素にアクセスすることを許容されると決定することとを含む。
【0014】
第2のトランザクションのトランザクション終了時間が第1のトランザクションのトランザクション開始時間よりも前に発生した場合、及び第2の複数のレコードの中に第3のトランザクションのレコードが存在しない場合、第1のトランザクションがデータ要素のバージョンを読み取ることを許容され、第3のトランザクションは、データ要素の第2のバージョンを書き込み済みであり、第2のトランザクションのトランザクション終了時間の後、及び第1のトランザクションのトランザクション開始時間の前に発生するトランザクション終了時間を有する。
【0015】
第1のトランザクションは、データ要素のバージョンが第1のトランザクションによって書き込まれた場合にデータ要素のバージョンを読み取ることを許容される。
【0016】
第2のトランザクションのトランザクション開始時間が第1のトランザクションのトランザクション開始時間の後に発生した場合、第1のトランザクションは、データ要素のバージョンを読み取ることを許容されない。
【0017】
第2の複数のレコードの完了したトランザクションのレコードは、レコードのトランザクション終了時間に基づいて順序付けられる。
【0018】
最も古いアクティブなトランザクションのレコードのトランザクション開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを第2の複数のレコードから削除するステップは、最も古いトランザクションのレコードのトランザクション開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのレコードが特定されるまで、第2の複数のレコードの中の最も新しく完了したトランザクションのレコードから始まる順序で、第2の複数のレコードに繰り返し適用されることと、第2の複数のレコードから特定されたレコードを削除することとを含む。
【0019】
方法は、第2の複数のレコードから特定されたレコードのトランザクション終了時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを削除するステップをさらに含む。
【0020】
別の態様においては、概して、複数のノードを含む分散型データベースシステムにおいてデータベーストランザクションを管理するためのコンピュータ可読媒体が、ソフトウェアを非一時的形態で記憶し、ソフトウェアは、コンピューティングシステムに、複数のノードのうちの第1のノードに、システム内のトランザクションの第1の複数のレコードを維持することであって、第1の複数のレコードの中の各レコードが、トランザクションに関連付けられ、トランザクションの開始時間、及びトランザクションの開始時間にアクティブであった最も古いトランザクションの開始時間を含み、第1の複数のレコードの中のレコードのうちの1つが、システム内の最も古い現在アクティブなトランザクションのレコードである、維持することと、複数のノードのうちの第2のノードに、トランザクションの第2の複数のレコードを維持することであって、第2の複数のレコードが、第2のノードに関連する完了したトランザクションのレコードを含み、第2の複数のレコードの中の各レコードが、トランザクション開始時間及びトランザクション終了時間を含む、維持することと、システム内の最も古い現在アクティブなトランザクションのトランザクション開始時間にアクティブであった最も古いトランザクションの開始時間を含む、第1のノードからのメッセージを、第2のノードにおいて受信することと、最も古いトランザクションの開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを第2の複数のレコードから削除することとを行わせるための命令を含む。
【0021】
別の態様においては、概して、データベーストランザクションを管理するための装置が、分散型データベースシステム内に配置された複数のノードであって、各ノードが、少なくとも1つのプロセッサを含む、複数のノードと、複数のノードの間で情報を送信及び受信するために複数のノードのポートを接続する通信媒体とを含み、複数のノードのうちの第1のノードが、システム内のトランザクションの第1の複数のレコードを維持するように構成され、第1の複数のレコードの中の各レコードが、トランザクションに関連付けられ、トランザクションの開始時間、及びトランザクションの開始時間にアクティブであった最も古いトランザクションの開始時間を含み、第1の複数のレコードの中のレコードのうちの1つが、システム内の最も古い現在アクティブなトランザクションのレコードであり、複数のノードのうちの第2のノードが、トランザクションの第2の複数のレコードを維持するように構成され、第2の複数のレコードが、第2のノードに関連する完了したトランザクションのレコードを含み、第2の複数のレコードの中の各レコードが、トランザクション開始時間及びトランザクション終了時間を含み、第2のノードが、システム内の最も古い現在アクティブなトランザクションのトランザクション開始時間にアクティブであった最も古いトランザクションの開始時間を含む、第1のノードからのメッセージを受信するように構成され、第2のノードが、最も古いトランザクションの開始時間の前に発生するトランザクション終了時間を有する完了したトランザクションのすべてのレコードを第2の複数のレコードから削除するように構成される。
【0022】
別の態様においては、概して、複数のノードを含む分散型データベースシステムにおいて潜在的に同時にあるトランザクションを管理するための方法が、複数のノードのうちの第1のノードに、複数のトランザクションのレコードを維持するステップであって、各トランザクションが、複数のノードのうちの1又は2以上上で実行され、各レコードが、複数のトランザクションの状態のうちのトランザクションの状態を有し、レコードが、第1のトランザクションに関するレコード及び第2のトランザクションに関するレコードを含み、複数のノードのうちの第2のノードにおける第1のトランザクションの実行が、第2のノードに記憶された第1のデータ要素にアクセスするための操作を含み、第2のノードにおける第2のトランザクションの実行が、第2のノードに記憶された第1のデータ要素にアクセスするための操作を含む、ステップと、第2のノード上で実行され、第2のトランザクションの開始時に第1のトランザクションの状態を有する複数のトランザクションのいずれかを含むトランザクションのリストを第1のノードから第2のノードにおいて受信するステップであって、トランザクションのリストが、第1のトランザクションを含む、ステップと、トランザクションのリストに少なくとも部分的に基づいて、第2のトランザクションの結果が第1のトランザクションの結果に依存すると決定するステップと、決定に基づいて第1のトランザクションが完了するまで第2のトランザクションの実行を中断するステップとを含む。
【0023】
態様は、以下の特徴のうちの1又は2以上を含み得る。
【0024】
トランザクションのリストに少なくとも部分的に基づいて、第2のトランザクションの結果が第1のトランザクションの結果に依存すると決定するステップは、第1のトランザクションの開始の時間が第2のトランザクションの開始の時間よりも前に発生し、第1のトランザクションのコミット時間が第2のトランザクションの開始の時間よりも前に発生すると決定することを含む。
【0025】
トランザクションのリストは、第2のトランザクションの開始時に第2のノードにおいて受信される。
【0026】
トランザクションのリストに含まれるトランザクションは、第2のノード上で実行され、第2のトランザクションの開始時に第1のトランザクションの状態を有するトランザクションからなる。
【0027】
トランザクションのリストは、トランザクションのリストの中の各トランザクションに関して、トランザクションの開始の時間を含む。
【0028】
第1のトランザクションの状態は、トランザクションが完了する準備をしていることを示す。
【0029】
第1のトランザクションは、第1のデータ要素を書き込み、第2のトランザクションは、第1のデータ要素を読み取り、第2のトランザクションによって読み取られる第1のデータ要素のバージョンは、第1のトランザクションの結果に依存する。
【0030】
第1のトランザクションのあり得る結果は、トランザクションがアボートされる結果及びトランザクションがコミットされる結果を含む。
【0031】
方法は、第1のトランザクションの結果がトランザクションがアボートされる結果である場合、第1のデータ要素の第1のバージョンを読み取ることを含め、第1のトランザクションの完了後に第2のトランザクションの実行を再開するステップをさらに含む。
【0032】
方法は、第1のトランザクションの結果がトランザクションがコミットされる結果である場合、第1のトランザクションによって書き込まれた第1のデータ要素の第2の異なるバージョンを読み取ることを含め、第1のトランザクションの完了後に第2のトランザクションの実行を再開するステップをさらに含む。
【0033】
第1のトランザクション及び第2のトランザクションのうちの一方又は両方は、複数のノードのうちの第3のノードに記憶されたデータ要素にアクセスする。
【0034】
第1のトランザクションと第2のトランザクションとの両方は、第1のデータ要素に書き込もうと試み、第2のトランザクションは、第1のトランザクションの状態にある。
【0035】
トランザクションのリストに少なくとも部分的に基づいて、第2のトランザクションの結果が第1のトランザクションの結果に依存すると決定するステップは、第2のトランザクションの開始の時間が第1のトランザクションの開始の時間の後、及び第1のトランザクションのコミット時間の前に発生すると決定することを含む。
【0036】
第1のトランザクションは、第2のトランザクションの前にその第1のトランザクションの書き込みをコミットするようにスケジューリングされ、第2のトランザクションがアボートされるか否かは、第1のトランザクションが、トランザクションがアボートされる結果となるのか又はトランザクションがコミットされる結果となるのかに依存する。
【0037】
方法は、第1のトランザクションの結果がトランザクションがアボートされる結果である場合、第1のデータ要素の第1の値を書き込むことを含め、第1のトランザクションの完了後に第2のトランザクションの実行を再開するステップをさらに含む。
【0038】
方法は、第1のトランザクションの結果がトランザクションがコミットされる結果である場合、第2のトランザクションをアボートすることを含め、第1のトランザクションの完了後に第2のトランザクションの実行を再開するステップをさらに含む。
【0039】
別の態様においては、概して、コンピュータ可読媒体が、複数のノードを含む分散型データベースシステムにおいて潜在的に同時にあるトランザクションを管理するためのソフトウェアを非一時的形態で記憶し、ソフトウェアは、コンピューティングシステムに、複数のノードのうちの第1のノードに、複数のトランザクションのレコードを維持することであって、各トランザクションが、複数のノードのうちの1又は2以上上で実行され、各レコードが、複数のトランザクションの状態のうちのトランザクションの状態を有し、レコードが、第1のトランザクションに関するレコード及び第2のトランザクションに関するレコードを含み、複数のノードのうちの第2のノードにおける第1のトランザクションの実行が、第2のノードに記憶された第1のデータ要素にアクセスするための操作を含み、第2のノードにおける第2のトランザクションの実行が、第2のノードに記憶された第1のデータ要素にアクセスするための操作を含む、維持することと、第2のノード上で実行され、第2のトランザクションの開始時に第1のトランザクションの状態を有する複数のトランザクションのいずれかを含むトランザクションのリストを第1のノードから第2のノードにおいて受信することであって、トランザクションのリストが、第1のトランザクションを含む、受信することと、トランザクションのリストに少なくとも部分的に基づいて、第2のトランザクションの結果が第1のトランザクションの結果に依存すると決定することと、決定に基づいて第1のトランザクションが完了するまで第2のトランザクションの実行を中断することとを行わせるための命令を含む。
【0040】
別の態様においては、概して、潜在的に同時にあるトランザクションを管理するための装置が、分散型データベースシステム内に配置された複数のノードであって、各ノードが、少なくとも1つのプロセッサを含む、複数のノードと、複数のノードの間で情報を送信及び受信するために複数のノードのポートを接続する通信媒体とを含み、複数のノードのうちの第1のノードが、複数のトランザクションのレコードを維持するように構成され、各トランザクションが、複数のノードのうちの1又は2以上上で実行され、各レコードが、複数のトランザクションの状態のうちのトランザクションの状態を有し、レコードが、第1のトランザクションに関するレコード及び第2のトランザクションに関するレコードを含み、複数のノードのうちの第2のノードにおける第1のトランザクションの実行が、第2のノードに記憶された第1のデータ要素にアクセスするための操作を含み、第2のノードにおける第2のトランザクションの実行が、第2のノードに記憶された第1のデータ要素にアクセスするための操作を含み、第2のノードが、第2のノード上で実行され、第2のトランザクションの開始時に第1のトランザクションの状態を有する複数のトランザクションのいずれかを含むトランザクションのリストを第1のノードから受信するように構成され、トランザクションのリストが、第1のトランザクションを含み、第2のノードが、トランザクションのリストに少なくとも部分的に基づいて、第2のトランザクションの結果が第1のトランザクションの結果に依存すると決定するように構成され、第2のノードが、決定に基づいて第1のトランザクションが完了するまで第2のトランザクションの実行を中断するように構成される。
【0041】
態様は、以下の利点のうちの1又は2以上を有する可能性がある。
【0042】
ノードのネットワーク内に配置された分散型データベースシステムが、広い地域にわたって発生する時間当たりの大量のトランザクションを処理することを可能にし得る。例えば、グローバルな物流プロセス又はクレジットカードプロセスは、世界中でわずかな量の時間に多数のトランザクションを伴う可能性がある。しかし、そのような膨大な量のトランザクション、及びデータに適用されている関連する操作は、特にトランザクションがほぼ同時に発生し、同じデータを使用する場合、トランザクションの意味のある結果を得るために調整される(又は管理される)必要がある。
【0043】
本明細書において説明される態様は、多版型同時実行制御(multi-version concurrency control)を使用して実装された分散型データベースシステムを含む。概して、多版型同時実行制御は、特定のデータ要素のいくつかの異なるバージョン(すなわち、一意に特定され得る及び独立して修正され得るコピー)が分散型データベースシステム内で保持されることを可能にする。データ要素の新しいバージョンが生成されることを許容することは、そうではなく、各データ要素の単一のバージョンのみが維持されるときに同じデータ要素への同時(及び潜在的に競合する)アクセスを防止するために使用される必要がある可能性がある特定のロックプロトコルの必要を回避する。そのようなロックによって引き起こされるより長い待ち時間も回避される可能性があり、潜在的にシステム全体の性能を高める。
【0044】
分散型データベースシステムにおいて多版型同時実行制御を使用するとき、いくつかの実用上の問題が生じる。例えば、複数の同時トランザクションが同じデータ要素にアクセスするとき、トランザクションのうちのどれがそれらの作業をコミットすることを許容されるのかに関する曖昧性が生じ得る。一部の通常の分散型データベースシステムは、トランザクションの潜在的に無駄であり、早計であり、誤っている可能性があるアボートを結果として生じるような方法でこれらの曖昧性を解決する。本明細書において説明される態様は、トランザクションの潜在的に無駄であり、早計であり、誤っている可能性があるアボートが避けられるような方法でこれらの曖昧性をすっきりと解決するように構成される。
【0045】
限られたメモリ及びストレージ容量を有する実際の分散型データベースシステムにおいては、データ要素の余りに多くの以前のバージョンを保持しておくことが、望ましくない量のメモリ及び/又はストレージ容量の消費をもたらす可能性がある。本明細書において説明される態様は、データ要素のどの以前のバージョンがもはや必要とされないのかをより正確に決定し、データ要素のそれらの必要とされない以前のバージョンのみを削除することによってデータ要素の不必要な使われていない以前のバージョンをうまく処分する。その他の目的のためのメモリ及び/又はストレージ容量の可用性の高まりは、システム全体の性能の助けとなる。
【0046】
態様の中でもとりわけ、本明細書に記載の分散型データベースシステムは、そのような分散型マルチノードデータベースシステム上で多版型同時実行制御及び競合解決を実施する。有利なことに、態様は、トランザクションの状態を含むトランザクションのレコードを、トランザクションが実行されているデータベースのノードのローカルと、マルチノードデータベースのリーダーノードとの両方に維持する。有利なことに、トランザクションのレコードは、分散型データベースシステムのネットワーク中の同時トランザクションに対するきめ細かい制御を可能にする。
【0047】
有利なことに、特定の態様は、競合の防止を同時に可能にしながらデータ要素の複数のバージョンがデータベースシステム内に存在することを可能にする多版型同時実行制御のスナップショット分離(snapshot isolation)の形態を使用する。有利なことにトランザクションとデータベース内のデータのバージョンとの両方が、トランザクションの間の時間的関係を符号化し、同時トランザクションの間の競合解決のためのメカニズムを提供するタイムスタンプ又は同様のトランザクション識別子に関連付けられる。
【0048】
データ要素の複数のバージョンを維持する1つの利点は、データ要素にアクセスするトランザクションが容易にアボートされる可能性があり、データ要素の前のバージョンに戻ることによってトランザクションに関連する変更が容易にアンドゥされる(undone)可能性があることである。
【0049】
有利なことに、特定の態様は、2段階コミット手順を利用してトランザクションの原子性(atomicity)を保証する。
【0050】
態様は、分散型データベースシステム内の競合状態及び/又は曖昧性の影響を軽減し、それによって、トランザクションの早計なアボートを避けることができる。
【0051】
分散型データベースシステムのノードは、前に完了したか又はノード上でアクティブであるトランザクションのレコードを維持する。トランザクションのレコードは、分散型データベースシステム内の競合状態及び/又は曖昧性を特定するために使用される。ノードは、トランザクションの関連性のあるレコードのみがノードに維持され、関連性のないレコードがノードに維持されないことを保証するためのパージ手順を実施する。パージは、下でより詳細に説明されるように、パージがシステム内のその他の有用な処理を過度に妨げないような効率的な方法で実施され得る。パージは、データ要素の複数のバージョンを有する可能性がある、同じデータにアクセスする複数のトランザクションの間の競合を防止するための後続の処理も容易にする可能性がある。
【0052】
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。
【図面の簡単な説明】
【0053】
【図1】分散型データベースシステムを含むデータ処理システムのブロック図である。
【図2】分散型データベースシステムに参加(join)する書き込み操作を含むトランザクションを示すブロック図である。
【図3】分散型データベースに対してトランザクションの操作を実行する図2のトランザクションを示すブロック図である。
【図4】リーダーノードから準備メッセージ(prepare message)を受信する図2のトランザクションを示すブロック図である。
【図5】リーダーノードにOKメッセージを送信する図2のトランザクションを示すブロック図である。
【図6】リーダーノードからコミットメッセージを受信する図2のトランザクションを示すブロック図である。
【図7】分散型データベースシステムに参加する読み取り操作を含むトランザクションを示すブロック図である。
【図8】分散型データベースに対してトランザクションの操作を実行する図7のトランザクションを示すブロック図である。
【図9】リーダーノードから準備メッセージを受信する図7のトランザクションを示すブロック図である。
【図10】リーダーノードにOKメッセージを送信する図7のトランザクションを示すブロック図である。
【図11】リーダーノードからコミットメッセージを受信する図7のトランザクションを示すブロック図である。
【図12】最適化された分散型データベース書き込みアルゴリズムのステップを示す流れ図である。
【図13】分散型データベースシステム内のアクティブな第1のトランザクション及び第2のトランザクションを示すブロック図である。
【図14】図12の分散型データベースシステム内でリーダーノードから準備メッセージを受信する第1のトランザクションを示すブロック図である。
【図15】リーダーノードから完了するトランザクション識別子のリストを含む準備メッセージを受信し、第1のトランザクションが完了するまでスリープする図14の第2のトランザクションを示すブロック図である。
【図16】リーダーノードにNot OKメッセージを送信する図12の第1のトランザクションを示すブロック図である。
【図17】リーダーノードからアボートメッセージを受信する図12の第1のトランザクション及び中断から覚める図12の第2のトランザクションを示すブロック図である。
【図18】リーダーノードにOKメッセージを送信する図12の第2のトランザクションを示すブロック図である。
【図19】リーダーノードからコミットメッセージを受信する図12の第2のトランザクションを示すブロック図である。
【図20】最適化された分散型データベース読み取りアルゴリズムのステップを示す流れ図である。
【図21】分散型データベースシステム内でリーダーノードから準備メッセージを受信する第1のトランザクションを示すブロック図である。
【図22】図19の分散型データベースシステムに参加する読み取り操作を含む第2のトランザクションを示すブロック図である。
【図23】完了するトランザクションのリストを受信し、図22の第2のトランザクションが分散型データベースシステム上でその第2のトランザクションの操作を安全に実施できるまでスリープする図22の第2のトランザクションを示すブロック図である。
【図24】リーダーノードにOKメッセージを送信する図19の第1のトランザクションを示すブロック図である。
【図25】リーダーノードからコミットメッセージを受信する図19の第1のトランザクション及び中断から覚める図22の第2のトランザクションを示すブロック図である。
【図26】リーダーノードから準備メッセージを受信する図22の第2のトランザクションを示すブロック図である。
【図27】リーダーノードにOKメッセージを送信する図22の第2のトランザクションを示すブロック図である。
【図28】リーダーノードからコミットメッセージを受信する図22の第2のトランザクションを示すブロック図である。
【図29】順序が狂ったメッセージの処理アルゴリズムのステップを示す流れ図である。
【図30】分散型データベースシステム内のアクティブな第1のトランザクション及び第2のトランザクションを示すブロック図である。
【図31】第1のトランザクションに関するEND_TRANSメッセージを受信する図27の分散型データベースシステム内のリーダーノードを示すブロック図である。
【図32】第2のトランザクションに関するEND_TRANSメッセージを受信する図27の分散型データベースシステム内のリーダーノードを示すブロック図である。
【図33】第1のトランザクションが準備メッセージを受信する前にリーダーノードから完了するトランザクション識別子のリストを含む準備メッセージを受信し、第1のトランザクションが完了するまでスリープする図27の第2のトランザクションを示すブロック図である。
【図34】準備メッセージを受信する図27の第1のトランザクションを示すブロック図である。
【図35】リーダーノードにOKメッセージを送信する図27の第1のトランザクションを示すブロック図である。
【図36】リーダーノードからコミットメッセージを受信する図27の第1のトランザクションを示すブロック図である。
【図37】目を覚まし、リーダーノードにNot OKメッセージを送信する図27の第2のトランザクションを示すブロック図である。
【図38】リーダーノードからアボートメッセージを受信する図27の第2のトランザクションを示すブロック図である。
【図39】分散型データベースシステム内でリーダーノードにPurge Request Messageを送信する第1のノードを示すブロック図である。
【図40】最下点(low water mark)及びアクティブなトランザクションのリストを含むメッセージを第1のノードに送り返す図39のリーダーノードを示し、クイックパージ(quick purge)操作を実施する第1のノードを示すブロック図である。
【図41】最下点及びアクティブなトランザクションのリストを含むメッセージを第1のノードに送り返す図39のリーダーノードを示し、完全パージ(thorough purge)操作を実施する第1のノードを示すブロック図である。
【発明を実施するための形態】
【0054】
図1は、分散型データベースシステム102を含むデータ処理システム100の例を示す。分散型データベースシステム102は、通信ネットワーク106(例えば、WAN、LAN、又はマルチプロセッサシステム内若しくはチップ上のネットワーク)を介してM個のデータベースクライアント104と通信する。
【0055】
1 分散型データベースシステム
分散型データベースシステム102は、データベースDのフラグメントDnが割り振られるN個のノード(又は「パーティション」)108を含む。一部の例において、各ノード108は、サーバコンピューティングシステム上で実行されるサーバプロセスに対応する。一部の例においては、いくつかのノード108が、単一のプロセッサ若しくはコンピューティングマシン上にホストされる可能性があり、又はノード108は、(例えば、各ノード108が独自のプロセッサ上でホストされるようにして)複数のプロセッサ若しくはコンピューティングマシンに拡散される可能性がある。
【0056】
各ノード108は、データベースDのフラグメントが記憶されるデータストレージデバイス112と、データストレージデバイス112上のデータベースのフラグメントを管理するデータベースマネージャ110とを含む。ノード108のためのデータベースマネージャ110は、データストレージデバイス112上のデータベースのフラグメントとクライアント104及びその他のノード108などのノード108の外部のエンティティとの間のインターフェースとしても働く。
【0057】
動作中、クライアント104は、データベースDに対して実行するための1又は2以上のデータベーストランザクションを指定する。クライアント104によって指定されたトランザクションは、ノード108のデータベースマネージャ110のうちの1又は2以上に通信ネットワーク106を介して送信される。トランザクションがN個のノード108の第nのデータベースマネージャ110に到着するとき、第nのデータベースマネージャ110は、第nのデータベースマネージャ110によって管理される第nのデータストレージデバイス112上に記憶されるデータベースのフラグメントに対してトランザクションを実行させる。
【0058】
一部の例において、トランザクションが複数のノード108に記憶されるデータベースの複数のフラグメントにアクセスするとき、第nのデータベースマネージャ110は、複数のノード108のデータベースマネージャ110にトランザクションを転送する。その他の例においては、トランザクションが生じたクライアント104が、トランザクションを完了するために必要とされる適切なノード108にトランザクションを送信する。さらにその他の例においては、トランザクションが生じたクライアント104が、リーダーノードにトランザクションを送信し、リーダーノードが、トランザクションを完了するために必要とされる適切なノード108にトランザクションを送信する。
【0059】
1又は2以上のトランザクションが適切なノード108において受信されるようにして、1又は2以上のトランザクションが実行され、データベースにアクセスし得る。通常の集中的なトランザクション型データベースと同様に、1又は2以上のトランザクションが互いに競合し、一部のトランザクションが成功裏に完了し、その他のトランザクションが失敗する結果を生じる可能性があり、その時点で、それらのトランザクションは、それらのトランザクションの変更をアンドゥさせられ、再試行させられる。
【0060】
一部の例において、上述のデータベースマネージャ110の各々は、タスクの中でもとりわけ、ノード108上で過去に実行されたか又は現在実行されている各トランザクションのレコードを維持するためのローカルトランザクションマネージャ114を含む。一部の例において、ローカルトランザクションマネージャ114によって維持されるトランザクションの各レコードは、トランザクションに関するトランザクション識別子(例えば、トランザクションの開始時間)、コミット識別子(例えば、トランザクションがコミットされた時間)、及びトランザクションの状態(例えば、ACTIVE、PREPARING、COMMITTED、又はABORTING)を含む。図に明示的に示されていないが、一部の例において、各データベースマネージャ110は、データベースマネージャ110によって管理されるデータストレージデバイス112上に記憶されるデータベースのフラグメントの管理に責任を負うデータプロセッサと、2つ以上のノード108上のデータベースフラグメントへのアクセスを必要とする要求を処理するためのアプリケーションプロセッサと、クライアント104及びその他のノード108と通信するための通信ソフトウェアとをさらに含む。
【0061】
一部の例において、ノード108のうちの1つ(例えば、図1のノード2)が、「リーダー」ノードとして指定される。リーダーノードは、新しいトランザクションにトランザクション識別子を割り当て、トランザクションにコミット識別子を割り当て、分散型データベースシステム102内のさまざまなノード108間でコミット操作を調整する責任を負うグローバルトランザクションマネージャ116を含む。一部の例において、グローバルトランザクションマネージャ116は、分散型データベースシステム102内で現在アクティブであるすべてのトランザクションのレコードをさらに保有する。一部の例において、アクティブなトランザクションの各レコードは、トランザクションに関するトランザクション識別子(例えば、トランザクションの開始時間)、トランザクションに関するコミット識別子(例えば、トランザクションがコミットされた時間)、トランザクションが操作しているノードのリスト、及びトランザクションの状態(例えば、ACTIVE、PREPARING、COMMITTED、又はABORTING)を含む。
【0062】
1.1 データベーストランザクション
概して、分散型データベースシステム102において動作する各データベーストランザクションは、トランザクションのライフタイムを表す時間間隔に関連付けられる。時間間隔を確立するために、データベースに対して動作するトランザクションTが始まるとき、トランザクション識別子がTに割り当てられる。トランザクション識別子は、分散型データベースシステム102内のトランザクションを特定するグローバルに区別可能な番号であり、トランザクションに関する開始時間(つまり、時間間隔の始め)を明記する。一部の例においては、そのような識別子を実現するために、トランザクション識別子は、時間の概念を伝える番号の単調増加シーケンスとして生じさせられる。例えば、第1のトランザクションT[10]がトランザクション識別子「10」を有し、第2のトランザクションT[20]がトランザクション識別子「20」を有するとき、T[10]に関するトランザクション識別子がT[20]に関するトランザクション識別子よりも前に来るので、T[20]が開始する前にT[10]が開始したことを認識し得る。
【0063】
トランザクションがコミットする準備ができているとき、トランザクションは、トランザクションに関する終了時間(つまり、時間間隔の終わり)を明記するコミット識別子を割り当てられる。コミット識別子は、トランザクション識別子と同じ番号のシーケンスから生じ、やはり時間の概念を伝える。
【0064】
一部の例において、表記T[a,b]は、aからbまでの時間にわたるライフタイムを有するトランザクションを表すために使用される。トランザクション識別子aは、コミット識別子bよりも常に小さい。現在アクティブなトランザクション(つまり、コミットしていないトランザクション)は、T[a,FUTURE]と表される可能性があり、b=FUTUREと設定することは、トランザクションが将来の何らかの未知の時間に終わることを示唆する。一部の例において、現在アクティブなトランザクションは、省略表現T[a]を使用して表され、b=FUTUREであることが、含意される。
【0065】
トランザクションに関連する時間間隔は、トランザクション間の関係についての情報を提供し得る。例えば、第1のトランザクションT[10,15]及び第2のトランザクションT[16,20]に関する時間間隔を調べることは、第1のトランザクションが終了した後に第2のトランザクションが始まるようにして2つのトランザクションが逐次的に実行されたという情報を提供する。第3のトランザクションT[10,20]及び第4のトランザクションT[15,25]に関する時間間隔を調べることは、2つのトランザクションが同時に実行されたという情報を提供する。本出願においては、2つのトランザクションのそれぞれのライフタイムが重なるとき、2つのトランザクションが同時に実行されていると考えられることが留意される。トランザクションのライフタイムは、トランザクション識別子に関連する時間に始まり、トランザクションが有用な仕事を実行するために活発に実行されている時間を含み、確認フェーズ(例えば、トランザクションに関連するJOIN、PREPARE、及びCOMMITメッセージ/フェーズ)に関する時間を含み、コミット識別子に関連する時間に終わり、この時間の後、トランザクションは、完了したと考えられる。2つの同時トランザクションのうちの一方又は両方は、それらのトランザクションのライフタイムのいずれかの部分の間、有用な仕事を実行するためにそれらのトランザクションが活発に実行されていない中断(又は「スリープ」)状態である可能性があり、それらのトランザクションは、それらのトランザクションの重なり合うライフタイムのおかげで、やはり同時に実行されていると考えられる。
【0066】
一部の例においては、新しいトランザクションが分散型データベースシステム102に到着するとき、トランザクションは、「参加」と呼ばれるプロセスを経る。参加するために、トランザクションは、ノード上のデータへのアクセスを要求し、ノードは、トランザクションの以前のレコードを持たない。要求を受信すると、ノードは、リーダーノード上のグローバルトランザクションマネージャ116に「参加」メッセージを送信し、メッセージは、ノードの名前(例えば、ノード1)を含む。グローバルトランザクションマネージャ116がメッセージを受信するとき、ノードは、トランザクションの参加者として登録される。
【0067】
そして、グローバルトランザクションマネージャ116は、トランザクションに関するトランザクション識別子、トランザクションに関する「最下点」、及びトランザクションに関する「完了するトランザクション識別子」のリストによってノード108に応答を送信する。非常に広く言えば、トランザクションに関する最下点は、トランザクションが開始したときの分散型データベースシステム102内の最も古いアクティブなトランザクションに関するトランザクション識別子である。完了するトランザクション識別子のリストは、トランザクションが開始したときに準備するプロセスにあったトランザクションのリストである。最下点及び完了するトランザクション識別子のリストは、下でより詳細に説明される。
【0068】
1.2 データ要素のバージョン付与
一部の例において、データベースDは、多版型同時実行制御(MVCC,multi-version concurrency control)の特定の形態であるスナップショット分離技術を使用して実装される。そのようなデータベースにおいては、データベース内のデータ要素の1又は2以上に関していくつかのバージョンが存在する可能性がある。データ要素の各バージョンは、データ要素の異なるバージョンが互いに区別され得るような一意識別子を有する。一部の例においては、データ要素の各バージョンに関して、バージョンに関する一意識別子は、データベースにバージョンを書き込んだトランザクションのトランザクション識別子に対応する。つまり、トランザクションがデータ要素の新しいバージョンをデータベースに書き込むたびに、新しいバージョンを書き込むトランザクションに関するトランザクション識別子が、新しいバージョンに関する識別子として割り当てられる。例えば、xと命名されたデータ要素は、トランザクションT[25,30]、T[37,42]、及びT[53,59]によってそれぞれ書き込まれたx[25]、x[37]、及びx[53]を含むいくつかのバージョンを有する可能性がある。
【0069】
1.3 データの可視性
上述のバージョン付与技術は、トランザクションがデータ要素のどのバージョンにアクセスすることを許容されるかを決定し、操作が競合するトランザクションを特定するために分散型データベースシステム102のノード108によって使用され得る。競合する操作のあるトランザクションが特定されるとき、トランザクションのうちの1つが、強制的にアボートさせられる可能性がある。この目的で、一部の例において、分散型データベースシステム102のノード108は、トランザクションが1又は2以上のデータ要素にアクセスしようと試みるとき、以下の規則を遵守する。
1)データ要素xが与えられたとすると、x[m]がトランザクションT[m]によって書き込まれたxのバージョンである場合、トランザクションT[i]は、xを読み取ろうと試みるとき、T[i]が開始される前にコミットされたxの最も新しいバージョンを読み取ることができる。つまり、T[i]は、T[j]がxを書き込み、T[i]が始まる前にT[j]がコミットしたような、jがi未満の最も大きなトランザクション識別子であるx[j]を読み取ることができる。
2)データ要素xが与えられたとすると、x[i]がトランザクションT[i]によって書き込まれたxのバージョンである場合、T[i]は、T[j]がxを書き込み、T[j]がT[i]と同時に存在し、T[j]が最初にコミットしたようなトランザクションT[j]が存在しない場合にコミットすることができる。
【0070】
概して、上の規則は、同時トランザクションの間の高度な分離を行う。特に、第1の規則は、ダーティリード(つまり、データ要素のコミットされていないバージョンを読むこと)を防止し、第2の規則は、データの意図されない上書きを防止する。規則のどちらも、遮断又は待ちを必要としない。
【0071】
1.4 2段階コミット手順
分散型データベースシステム102の分散の性質によって、通信ネットワーク106上のメッセージの送信と受信との間には本質的な遅延が存在し、ネットワークメッセージがノード108において受信され、処理される順序は、それらのネットワークメッセージが送信された順序と異なる可能性がある。この本質的な遅延が原因で、(クライアントの観点から見た)原子性を保証することは、複雑な動作である。クライアントの観点から見た原子性を保証するために、分散型データベースシステム102は、2相コミット手順を使用して分散型データベースシステム102のノード108の間のコミット操作を調整する。
【0072】
2相コミット手順において、分散型データベースシステム102上で動作するトランザクションは、ACTIVE状態、PREPARING(若しくはPREPARED)状態、COMMITTING(若しくはCOMMITTED)状態、又はABORTING(若しくはABORTED)状態である可能性がある。PREPAREフェーズの間に、トランザクションに参加する各ノードは、トランザクションがコミットすることができるかどうかを決定するための確認手順を実施する。すべてのパーティションがトランザクションがコミットすることができることを(賛成して)認める場合、トランザクションはコミットする。そうでない場合、トランザクションはアボートする。
【0073】
1.5 分散型データベースの書き込み
図2〜6に、データ要素の新しいバージョンを書き込み、2段階コミットプロトコルを使用して成功裏にコミットするトランザクションの一例が示される。図2を参照すると、分散型データベースシステム202の一部は、第1のノード108a、第2のノード108b、及び第5のノード108cを含む。(与えられた例に関する「第1の」又は「第2の」などのノードのラベル付けは、その他の例においては、適宜それらのラベルを変更することを妨げないことに留意されたい。)第2のノード108bは、分散型データベースシステム202のためのリーダーノードとして指定される。第1のトランザクションT[52,75]は、第1のノード108a上で既に完了しており、データ要素のバージョンx[52]218が第1のノード108a上の第1のデータベースフラグメント112aに書き込まれる結果を生じた。第1のトランザクションの第1のローカルレコード220は、第1のノード108aの第1のローカルトランザクションマネージャ114aに記憶される。
【0074】
クライアントがグローバルトランザクションマネージャ116にBegin Transactionメッセージ(図示せず)を送信するときに、第2のトランザクションが分散型データベースシステム202において開始される。グローバルトランザクションマネージャ116は、第2のトランザクションT[105,FUTURE]に関するグローバルレコード221を生成し、Started T[105]メッセージ(図示せず)によってクライアントに応答する。それから、クライアントは、第1のノード108aにおけるトランザクションT[105]に関するWrite(x)コマンド及び第5のノード108cにおけるトランザクションT[105](図示せず)に関する1又は2以上のその他のコマンドを発行する。第2のトランザクションは第1のノード108a及び第5のノード108cにとって新しいので、第1のノード108a及び第5のノード108cは、それぞれ、リーダーノード(すなわち、第2のノード108b)のグローバルトランザクションマネージャ116に第2のトランザクションに関するJoin(T[105])メッセージを送信する。グローバルトランザクションマネージャ116は、第1のノード108a及び第5のノード108cがトランザクションに参加したことを反映するためにグローバルレコード221を更新し、つまり、T[105,FUTURE]:N1N5である。グローバルレコード221は、トランザクション識別子105を有するトランザクションが現在アクティブであり(つまり、グローバルレコード221のコミット識別子がFUTUREであり)、第1のノード108a及び第5のノード108c上で動作していることを示す。図3を参照すると、グローバルトランザクションマネージャ116は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cにT[105]に関する空の「完了するトランザクション識別子のリスト」(すなわち、下でより詳細に説明される())を送り返す。第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cは、それぞれ、第2のトランザクションT[105,FUTURE]に関する第2のローカルレコード222を生成する。第1のノード108aは、Write(x)コマンドの実行を進め、xの第2のバージョンx[105]224が第1のデータベースフラグメント112aに書き込まれる結果を生じる。図に示されていないが、第5のノード108cも、第2のトランザクションに関するコマンドの実行を進める。
【0075】
図4を参照すると、第2のトランザクションのコマンドが完了すると、クライアントが、End Transactionメッセージ(図示せず)をグローバルトランザクションマネージャ116に送信することによって第2のトランザクションに関するコミットシーケンスを開始し、そして今度は、グローバルトランザクションマネージャ116が、第2のトランザクションに関するコミット識別子(すなわち、111)を生じさせ、コミット識別子を含めるために第2のトランザクションに関するグローバルレコード221を更新する。グローバルトランザクションマネージャ116は、さらに、(図4においてアステリスクとして示される)第2のトランザクションに関するグローバルレコード221に、PREPARE状態にあるものとして印を付け、グローバルレコード221の更新されたバージョン、すなわち、T[105,111]*:N1N5を結果として生じる。グローバルトランザクションマネージャ116は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cに完了するトランザクション識別子の空のリスト(すなわち、())を含むPrepare(T[105,111])メッセージを送信する。グローバルトランザクションマネージャ116からPrepare(T[105,111])メッセージを受信することに応じて、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cは、第2のトランザクションに関するそれらのノードのローカルレコードをT[105,111]に更新し、それらのノードが第2のトランザクションをコミットする準備ができているかどうかを決定する。
【0076】
図5を参照すると、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cが、両方とも、ノード108a、108cの両方が第2のトランザクションをコミットする準備ができていることを示すOK(T[105])メッセージによってグローバルトランザクションマネージャ116に応答する。図6を参照すると、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cからOK(T[105])メッセージを受信することに応じて、グローバルトランザクションマネージャ116が、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cにCommit(T[105])メッセージを送信し、xの新しく書き込まれたバージョンx[105]をコミットすることを含め、第2のトランザクションにコミットをさせる。
【0077】
1.6 分散型データベースの読み取り
図7〜11に、データ要素のバージョンを読み取り、2段階コミットプロトコルを使用してコミットするトランザクションの一例が示される。図7を参照すると、分散型データベースシステム202の一部は、第1のノード108a、第2のノード108b、及び第5のノード108cを含む。第2のノード108bは、分散型データベースシステム202のためのリーダーノードとして指定される。第1のトランザクションT[52,75]は、第1のノード108a上で既に完了しており、データ要素xのバージョンx[52]1518が第1のノード108a上の第1のデータベースフラグメント112aに書き込まれる結果を生じた。第1のトランザクションの第1のローカルレコード1520は、第1のノード108aの第1のローカルトランザクションマネージャ114aに記憶される。
【0078】
クライアントがグローバルトランザクションマネージャ116にBegin Transactionメッセージ(図示せず)を送信するときに、第2のトランザクションが分散型データベースシステム202において開始される。グローバルトランザクションマネージャは、第2のトランザクションT[80,FUTURE]に関するグローバルレコード1521を生成し、Started T[80]メッセージ(図示せず)によってクライアントに応答する。それから、クライアントは、第1のノード108aにおけるトランザクションT[80]に関するRead(x)コマンド及び第5のノード108cにおけるトランザクションT[80](図示せず)に関する1又は2以上のその他のコマンドを発行する。第2のトランザクションは第1のノード108a及び第5のノード108cにとって新しいので、第1のノード108a及び第5のノード108cは、それぞれ、リーダーノード(すなわち、第2のノード108b)のグローバルトランザクションマネージャ116に第2のトランザクションに関するJoin(T[80])メッセージを送信する。グローバルトランザクションマネージャ116は、第1のノード108a及び第5のノード108cがトランザクションに参加したことを反映するために第2のトランザクションに関するグローバルレコード1521を更新し、つまり、T[80,FUTURE]:N1N5である。グローバルレコード1521は、トランザクション識別子80を有するトランザクションが現在アクティブであり(つまり、グローバルレコード1521のコミット識別子がFUTUREであり)、第1のノード108a及び第5のノード108c上で動作していることを示す。
【0079】
図8を参照すると、グローバルトランザクションマネージャ116は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cにT[80]に関する完了するトランザクション識別子のリスト(すなわち、この場合は空である())を送り返す。第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cは、それぞれ、第2のトランザクションT[80,FUTURE]に関する第2のローカルレコード1622を生成する。第1のノード108aは、Read(x)コマンドの実行を進め、x[52]が第1のデータベースフラグメント112aから読み取られる結果を生じる。図に示されていないが、第5のノード108cも、第2のトランザクションに関するコマンドの実行を進める。
【0080】
図9を参照すると、第2のトランザクションのコマンドが完了すると、クライアントが、End Transactionメッセージ(図示せず)をグローバルトランザクションマネージャ116に送信することによって第2のトランザクションに関するコミットシーケンスを開始し、そして今度は、グローバルトランザクションマネージャ116が、第2のトランザクションに関するコミット識別子(すなわち、85)を生じさせ、コミット識別子を含めるために第2のトランザクションに関するグローバルレコード1521を更新する。グローバルトランザクションマネージャ116は、さらに、(図9においてアステリスクとして示される)第2のトランザクションに関するグローバルレコード1521に、PREPARE状態にあるものとして印を付け、グローバルレコード1521の更新されたバージョン、すなわち、T[80,85]*:N1N5を結果として生じる。グローバルトランザクションマネージャ116は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cに完了するトランザクション識別子の空のリスト(すなわち、())を含むPrepare(T[80,85])メッセージを送信する。グローバルトランザクションマネージャ116からPrepare(T[80,85])メッセージを受信することに応じて、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cは、それぞれ、第2のトランザクションに関する第2のローカルレコード1622をT[80,85]に更新し、それらのノードが第2のトランザクションをコミットする準備ができているかどうかを決定する。
【0081】
図10を参照すると、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cが、両方とも、ノード108a、108cの両方が第2のトランザクションをコミットする準備ができていることを示すOK(T[80])メッセージによってグローバルトランザクションマネージャ116に応答する。図11を参照すると、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cからOK(T[80])メッセージを受信することに応じて、グローバルトランザクションマネージャ116が、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cにCommit(T[80])メッセージを送信し、第2のトランザクションにコミットをさせる。
【0082】
1.7 最適化された分散型データベースの動作
上述の例示的な分散型データベーストランザクションでは、読み取り操作と書き込み操作との両方が、2段階コミット手順においていかなる複雑さに直面することもなく分散型データベース上で実行される。しかし、一部の例においては、1又は2以上のトランザクションがそれらのPREPAREフェーズにあるとき、曖昧さが発生し、分散型データベースシステム102における非効率的な動作につながる可能性がある。
【0083】
下でより詳細に説明されるように、これらの曖昧さは、そのノード108上で実行される各トランザクションのレコードを維持するローカルトランザクションマネージャ114を使用して軽減される。ローカルトランザクションマネージャによって記憶されるトランザクションの各レコードは、トランザクションのライフタイムT[i,k](まだアクティブであるトランザクションに関してはk=FUTUREである)を含む。ローカルトランザクションマネージャによって維持されるレコードは、曖昧性の結果として生じる特定の競合を解決するために使用され得る。
【0084】
1.7.1 最適化された分散型データベースの書き込み
一部の例においては、第1のトランザクション及び第2のトランザクションが両方ともデータ要素の異なるバージョンを書き込み済みであり、第2のトランザクションのトランザクション識別子が第1のトランザクションに関するトランザクション識別子よりも大きく、第1のトランザクションに関するコミット識別子よりも小さいようにして両方ともPREPAREフェーズにあるとき、曖昧性が、非効率を引き起こす可能性がある。特に、第2のトランザクションは、第1のトランザクションがコミットするか又はアボートするかが知られていないので、その第2のトランザクションがその書き込み操作をアボートすべきか否かを知る術がない。これは、第2のトランザクションが早まってアボートする結果となる可能性がある。
【0085】
図12を参照すると、そのような状況が起こることを防止するために、最適化されたデータベース書き込みアルゴリズム1200が使用される。最適化されたデータベース書き込みアルゴリズム1200の第1のステップ1202において、(おそらくは、操作の中でもとりわけ)データベース書き込み操作を含むトランザクションに関するBegin Transactionメッセージが、リーダーノードのグローバルトランザクションマネージャにおいて受信される。第2のステップ1204において、データベース書き込み操作に参加するデータベースシステムのノードのローカルトランザクションマネージャが、グローバルトランザクションマネージャにJoin()メッセージを送信する。第3のステップ1206において、トランザクションが、トランザクションに参加するノードにおいて記憶されるデータ要素に対して実行される。第4のステップ1208においては、トランザクションの実行が完了すると、End Transactionメッセージが、グローバルトランザクションマネージャにおいて受信される。第5のステップ1210において、グローバルトランザクションマネージャが、完了するトランザクションのリストを含むPrepare()メッセージを、参加するノードのローカルトランザクションマネージャに送信する。
【0086】
第6のステップ1212において、参加するノードのローカルトランザクションマネージャが、トランザクションが準備状態にされる前に、トランザクションと同じデータ要素に対して動作するいずれかのその他のトランザクションがPREPARE状態にされたかどうかを決定するために、完了するトランザクションのリストを、それらのローカルトランザクションマネージャが現在管理するトランザクションのレコードと比較する。そのような以前のトランザクションが確かに存在する場合、アルゴリズムは、第7のステップ1214に進み、第7のステップ1214において、ローカルトランザクションマネージャが、以前のトランザクションが完了するまでトランザクションをスリープさせる(つまり、ローカルトランザクションマネージャによってSUSPENDED状態にさせる)。このようにしてトランザクションを中断することは、以前のトランザクションの結果が知られるまでトランザクションをアボートすべきかどうかの決定を遅らせる。
【0087】
そのような以前のトランザクションが存在しない場合、又はトランザクションが中断から覚めるとき、アルゴリズムは、第8のステップ1216に進み、第8のステップ1216において、ローカルトランザクションマネージャが、トランザクションがコミットされ得るかどうかを決定する。
【0088】
トランザクションがコミットされ得る場合、アルゴリズムは、第9のステップ1218に進み、第9のステップ1218において、参加するノードのローカルトランザクションマネージャのすべてが、グローバルトランザクションマネージャにOK()メッセージを送信する。後続の第10のステップ1220において、グローバルトランザクションマネージャが、参加するノードのローカルトランザクションマネージャにCommit()メッセージを送信する。最後に、第11のステップ1222において、トランザクションの変更が、参加するノードにおいてコミットされる。
【0089】
トランザクションがコミットされ得ない場合、アルゴリズムは、第12のステップ1224に進み、第12のステップ1224において、参加するノードのローカルトランザクションマネージャのうちの1又は2以上が、グローバルトランザクションマネージャにNotOK()メッセージを送信する。後続の第13のステップ1226において、グローバルトランザクションマネージャが、参加するノードにAbort()メッセージを送信する。最後に、第14のステップ1228において、トランザクションの変更が、参加するノードにおいてロールバックされる。
【0090】
以下の例は、図12のアルゴリズムのステップ1210〜1228の応用を示す。図13を参照すると、分散型データベースシステム202の一部は、第1のノード108a、第2のノード108b、及び第5のノード108cを含む。第2のノード108bは、分散型データベースシステム202のためのリーダーノードとして指定される。第1のトランザクションT[100,FUTURE]は、第1のノード108a上の第1のデータベースフラグメント112aにデータ要素xの第1の新しいバージョンx[100]626を書き込み、第5のノード108c上で1又は2以上のその他の操作(図示せず)を実施した。第2のトランザクションT[105,FUTURE]は、第1のノード108a上の第1のデータベースフラグメント112aにデータ要素xの第2の新しいバージョンx[105]224を書き込み、第5のノード108c上で1又は2以上のその他の操作(図示せず)を実施した。グローバルトランザクションマネージャ116は、第1のトランザクションに関する第1のグローバルレコード721、すなわち、T[100,FUTURE]:N1N5を含む。第1のグローバルレコード721は、第1のトランザクションがトランザクション識別子100を有し、第1のノード108a及び第5のノード108c上で現在アクティブであることを示す。グローバルトランザクションマネージャ116は、第2のトランザクションに関する第2のグローバルレコード726、すなわち、T[105,FUTURE]:N1N5をさらに含む。第2のグローバルレコード726は、第2のトランザクションがトランザクション識別子105を有し、第1のノード108a及び第5のノード108c上で現在アクティブであることを示す。第1のトランザクションの第1のローカルレコードT[100,FUTURE]720と第2のトランザクションの第2のローカルレコードT[105,FUTURE]722との両方は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cに記憶される。
【0091】
図14を参照すると、第1のトランザクションのコマンドが完了すると、クライアントが、End Transactionメッセージ(図示せず)をグローバルトランザクションマネージャ116に送信することによって第2の第1のトランザクションに関するコミットシーケンスを開始し、そして今度は、グローバルトランザクションマネージャ116が、第1のトランザクションに関するコミット識別子(すなわち、110)を生じさせ、コミット識別子を含めるために第1のトランザクションに関する第1のグローバルレコード721を更新する。グローバルトランザクションマネージャ116は、さらに、第1のトランザクションに関する第1のグローバルレコード721に、(図14においてアステリスクとして示される)PREPARE状態にあるものとして印を付け、第1のグローバルレコード721の更新されたバージョン、すなわち、T[100,110]*:N1N5を結果として生じる。グローバルトランザクションマネージャ116は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cに完了するトランザクション識別子の空のリスト(すなわち、())を含むPrepare(T[100,110])メッセージを送信する。グローバルトランザクションマネージャ116からPrepare(T[100,110])メッセージを受信することに応じて、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cは、それぞれ、第1のトランザクションに関する第1のローカルレコード720をT[100,110]に更新し、それらのノードが第1のトランザクションをコミットする準備ができているかどうかの決定を開始する。
【0092】
図15を参照すると、第2のトランザクションのコマンドが完了すると、クライアントが、End Transactionメッセージ(図示せず)をグローバルトランザクションマネージャ116に送信することによって第2のトランザクションに関するコミットシーケンスを開始し、そして今度は、グローバルトランザクションマネージャ116が、第2のトランザクションに関するコミット識別子(すなわち、111)を生じさせ、コミット識別子を含めるために第2のトランザクションに関する第2のグローバルレコード726を更新する。グローバルトランザクションマネージャ116は、さらに、第2のトランザクションに関する第2のグローバルレコード726に、(図15においてアステリスクとして示される)PREPARE状態にあるものとして印を付け、第2のグローバルレコード726の更新されたバージョン、すなわち、T[105,111]*:N1N5を結果として生じる。グローバルトランザクションマネージャ116は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cにPrepare(T[105,111])メッセージを送信する。Prepare(T[105,111])メッセージと一緒に、グローバルトランザクションマネージャ116は、「完了するトランザクション識別子」のリストを送信する。この例においては、T[100]が完了するトランザクション(つまり、Prepare(T[105,111])メッセージがグローバルトランザクションマネージャ116によって送信される前にT[100]がPREPARE状態であった)であるので、完了するトランザクション識別子のリストは、T[100]を含む。
【0093】
グローバルトランザクションマネージャ116からPrepare(T[105,111])メッセージを受信することに応じて、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cは、それぞれ、第2のトランザクションに関する第2のローカルレコード722をT[105,111]に更新し、それらのノードが第2のトランザクションをコミットする準備ができているかどうかの決定を開始する。
【0094】
図15に示される瞬間に、分散型データベースシステム102は、第2のトランザクションが安全にコミットし得るかどうかを決定する必要がある。そのようにする1つの簡単な方法において、分散型データベースシステム102は、どのトランザクションが最も早いコミット識別子を有するかどうかを決定するために、第1のトランザクションのコミット識別子と第2のトランザクションのコミット識別子とを比較する可能性がある。2つのコミット識別子のうちの遅い方を有するトランザクションが、アボートされる。図15の例において、第2のトランザクションは、この簡単な方法を使用してアボートする。しかし、第1のトランザクションは、PREPARE状態であり、まだコミットしていない。実際の所、第1のトランザクションは、アボートする可能性がある。第1のトランザクションがアボートする場合、上の簡単な方法は、両方のトランザクションがアボートする非効率的で望ましくない結果になる。
【0095】
そのような非効率的で望ましくない結果を避けるために、完了するトランザクション識別子のリストを利用する別の方法が、第2のトランザクションが安全にコミットし得るかどうかを決定するために使用される。特に、第2のトランザクションがPREPAREフェーズにあるとき、第2のトランザクションと同じ(1又は2以上の)データ要素にアクセスしており、第2のトランザクションのトランザクション識別子よりも小さいトランザクション識別子を有するいずれかの完了するトランザクションが存在するかどうかを決定するために、完了するトランザクション識別子のリストが照会される。この場合、(完了するトランザクション識別子のリストに含まれる)第1のトランザクションは、PREPARING状態にあり、第2のトランザクションと同じデータ要素(すなわち、x)にアクセスしており、第2のトランザクションのトランザクション識別子(すなわち、105)よりも小さいトランザクション識別子(すなわち、100)を有する。ローカルトランザクションマネージャ114は、第1のトランザクションが成功裏にコミットするのか又はアボートするのかを知る術がないので、第1のトランザクションがコミットし終わるか又はアボートし終わるかのどちらかまで第2のトランザクションを中断させる。
【0096】
図16を参照すると、第1のノード108aのデータベースマネージャ110aは、第1のトランザクションがコミットし得ることを示すOK(T[100])メッセージをグローバルトランザクションマネージャ116に送信する。しかし、第5のノード108cは、第1のトランザクションがコミットし得ないことを示すNot OK(T[100])メッセージをグローバルトランザクションマネージャ116に送信する。図17を参照すると、第5のノード108cからNot OK(T[100])メッセージを受信した結果として、グローバルトランザクションマネージャ116は、第1のグローバルレコード721を削除し、第1のノード108a及び第5のノード108cにAbort(T[100])メッセージを送信することによって第1のトランザクションをアボートする。
【0097】
グローバルトランザクションマネージャ116からAbort(T[100])メッセージを受信すると、第1のノード108aは、データ要素xのx[100]のバージョンをその第1のノードのデータフラグメント112aから削除し、第1のローカルレコード720をその第1のノードのローカルトランザクションマネージャ114aから削除する。同様に、第5のノード108cは、第1のローカルレコード720をその第5のノードのローカルトランザクションマネージャ114cから削除する。第1のトランザクションがアボートされ、第2のトランザクションが中断から覚める。
【0098】
図18を参照すると、中断から覚めると、第1のノード108aのデータベースマネージャ110aは、第2のトランザクションがコミットする準備ができていることを示すOK(T[105])メッセージをグローバルトランザクションマネージャ116に送信する。第5のノード108cも、第2のトランザクションがコミットする準備ができていることを示すOK(T[105])メッセージをグローバルトランザクションマネージャ116に送信する。
【0099】
第1の及び第5のノード108a、108cからのOK(T[105])メッセージが受信される図19を参照すると、グローバルトランザクションマネージャ116は、第2のトランザクションが動作しているノードのすべてが第2のトランザクションがコミットする準備ができていることを示したと決定する。グローバルトランザクションマネージャ116は、第2のグローバルレコード726に、もはや準備していないものとして印を付け、第1のノード108a及び第5のノード108cにCommit(T[105])メッセージを送信し、第1のノード108aのデータベースフラグメント112a上でxのx[105]のバージョンにコミットをさせることを含め、第2のトランザクションにコミットをさせる。
【0100】
1.7.2 最適化された分散型データベースの読み取り
一部の例においては、第1のトランザクションがデータ要素の新しいバージョンを書き込み、PREPAREフェーズにあり、データ要素を読み取るための操作を含み、第1のトランザクションのトランザクション識別子よりも大きく、第1のトランザクションのコミット識別子よりも大きいトランザクション識別子を有する第2のトランザクションがアクティブであるとき、システムの非効率的な動作を生じる結果となる可能性がある曖昧性が発生する可能性がある。特に、第2のトランザクションは、第1のトランザクションがコミットするのか又はアボートするのかが分からないので、データ要素の新しいバージョンを読み取るべきか又はデータ要素の前のバージョンを読み取るべきかを知る術がない。
【0101】
図20を参照すると、そのような状況が起こることを防止するために、最適化されたデータベース読み取りアルゴリズム1900が使用される。最適化されたデータベース読み取りアルゴリズム1900の第1のステップ1902において、(おそらくは、操作の中でもとりわけ)データベース読み取り操作を含むトランザクションに関するBegin Transactionメッセージが、リーダーノードのグローバルトランザクションマネージャにおいて受信される。第2のステップ1904において、データベース読み取り操作に参加するデータベースシステムのノードのローカルトランザクションマネージャが、グローバルトランザクションマネージャにJoin()メッセージを送信する。第3のステップ1906において、グローバルトランザクションマネージャが、完了するトランザクションのリストを、参加するノードのローカルトランザクションマネージャに送信する。
【0102】
第4のステップ1908においては、データ要素を読み取る前に、参加するノードのローカルトランザクションマネージャが、完了するトランザクションのリスト内のいずれかのその他のトランザクションがPREPARE状態にあり、このトランザクションの開始前にデータ要素のバージョンを書き込んだかどうかを決定するために、完了するトランザクションのリストを、それらのローカルトランザクションマネージャが現在管理するトランザクションと比較する。そのような完了するトランザクションが確かに存在する場合、アルゴリズムは、第5のステップ1910に進み、第5のステップ1910において、ローカルトランザクションマネージャが、完了するトランザクションが完了するまでトランザクションを中断させる。トランザクションを中断させることは、データ要素のどのバージョンがトランザクションによって読み取られるかの判断を遅らせる。そのような完了するトランザクションが存在しない場合、又はトランザクションが中断から覚めるとき、アルゴリズムは、第6のステップ1912に進み、第6のステップ1912において、読み取り操作が、トランザクションの開始前に最も新しくコミットされたデータ要素のバージョンに対して実行される。
【0103】
第7のステップ1913において、End Transactionメッセージが、グローバルトランザクションマネージャにおいて受信される。第8のステップ1915において、グローバルトランザクションマネージャが、Prepare()メッセージを、参加するノードのローカルトランザクションマネージャに送信する。
【0104】
第9のステップ1914において、ローカルトランザクションマネージャが、トランザクションがコミットされ得るかどうかを決定する。トランザクションがコミットされ得る場合、アルゴリズムは、第10のステップ1916に進み、第10のステップ1916において、参加するノードのすべてのローカルトランザクションマネージャが、グローバルトランザクションマネージャにOK()メッセージを送信する。後続の第11のステップ1918において、グローバルトランザクションマネージャが、参加するノードのローカルトランザクションマネージャにCommit()メッセージを送信する。最後に、第12のステップ1920において、トランザクションの変更が、参加するノードにおいてコミットされる。
【0105】
トランザクションがコミットされ得ない場合、アルゴリズムは、第13のステップ1922に進み、第13のステップ1922において、参加するノードのうちの1又は2以上のローカルトランザクションマネージャが、グローバルトランザクションマネージャにNotOK()メッセージを送信する。後続の第14のステップ1924において、グローバルトランザクションマネージャが、参加するノードのローカルトランザクションマネージャにAbort()メッセージを送信する。最後に、第15のステップ1926において、トランザクションの変更が、参加するノードにおいてロールバックされる。
【0106】
例えば、図21を参照すると、分散型データベースシステム202の一部は、第1のノード108a、第2のノード108b、及び第5のノード108cを含む。第2のノード108bは、分散型データベースシステム202のためのリーダーノードとして指定される。第1のトランザクションT[52,75]は、第1のノード108a上で既に完了しており、データ要素xのバージョンx[52]2018が第1のノード108a上の第1のデータベースフラグメント112aに書き込まれる結果を生じた。第2のトランザクションT[100,110]は、第1のノード108aと第2のノード108bとの両方においてアクティブであり、データ要素xのバージョンx[100]2019を第1のノード108a上の第1のデータベースフラグメント112aに書き込み済みである。第1のトランザクションの第1のローカルレコード2020は、第1のノード108aのローカルトランザクションマネージャ114aに記憶される。第2のローカルレコード2022は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cに記憶される。グローバルトランザクションマネージャ116は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cに、第2のトランザクションに関する完了するトランザクション識別子の空のリスト(すなわち、())を含むPrepare(T[100,110])メッセージを送信した。
【0107】
図22を参照すると、クライアントがグローバルトランザクションマネージャ116にBegin Transactionメッセージ(図示せず)を送信するときに、第3のトランザクションが分散型データベースシステム202において開始される。グローバルトランザクションマネージャ116は、第3のトランザクションT[111,FUTURE]に関するグローバルレコード2127を生成し、Started T[111]メッセージ(図示せず)によってクライアントに応答する。それから、クライアントは、第1のノード108aにおけるトランザクションT[111]に関するRead(x)コマンド及び第5のノード108cにおけるトランザクションT[111](図示せず)に関する1又は2以上のその他のコマンドを発行する。第3のトランザクションは第1のノード108a及び第5のノード108cにとって新しいので、第1のノード108a及び第5のノード108cは、それぞれ、リーダーノード(すなわち、第2のノード108b)のグローバルトランザクションマネージャ116に第3のトランザクションに関するJoin(T[111])メッセージを送信する。グローバルトランザクションマネージャ116は、第1のノード108a及び第5のノード108cがトランザクションに参加したことを反映するために第3のトランザクションに関する第2のグローバルレコード2127を更新し、つまり、T[111,FUTURE]:N1N5である。第2のグローバルレコード2127は、トランザクション識別子111を有するトランザクションが現在アクティブであり(つまり、第2のグローバルレコード2127のコミット識別子がFUTUREであり)、第1のノード108a及び第5のノード108c上で動作していることを示す。
【0108】
図23を参照すると、グローバルトランザクションマネージャ116は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cに完了するトランザクション識別子のリストを送り返す。この例においては、T[100]が完了するトランザクションである(つまり、T[100]がPREPARE状態である)ので、完了するトランザクション識別子のリストは、T[100]を含む。第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cは、それぞれ、第3のトランザクションT[111,FUTURE]に関する第3のローカルレコード2225を生成する。
【0109】
図23に示される時点で、第3のトランザクションの前に、T[111]は、xを読み取ろうと試みる。第1のノード108aのためのローカルトランザクションマネージャ114aは、完了するトランザクションのリストを照会して、第3のトランザクションと同じ(1又は2以上の)データ要素にアクセスしており、第3のトランザクションのトランザクション識別子よりも小さいトランザクション識別子を有するいずれかの完了するトランザクションが存在するかどうかを決定することによって、第3のトランザクションがxを読み取ることが安全であるかどうかを決定する。いずれかのそのような完了するトランザクションが存在する場合、第3のトランザクションがxを読み取ることは安全でない。この場合、第2のトランザクションは、PREPARING状態にあり、第3のトランザクションと同じデータ要素(すなわち、x)にアクセスしており、第3のトランザクションのトランザクション識別子(すなわち、111)よりも小さいトランザクション識別子(すなわち、100)を有する。
【0110】
PREPARING状態の第2のトランザクションが原因で、第3のトランザクションT[111]は、その第3のトランザクションがx[52]を読み取るべきか又はx[100]を読み取るべきかを決定することができない。つまり、第2のトランザクションT[100,110]が準備フェーズにある状態では、第2のトランザクションがコミットするか又はアボートするかが未知である。第2のトランザクションがアボートする場合、第3のトランザクションはx[52]を読み取るべきである。そうではなく、第2のトランザクションがコミットする場合、第3のトランザクションはx[100]を読み取るべきである。
【0111】
しかし、第2のトランザクションがすぐにその判断をする(つまり、コミットするか又はアボートするかのどちらか)ことが知られており、したがって、第1のノード108aのローカルトランザクションマネージャ114aは、第2のトランザクションが完了する(つまり、コミットし終わる)まで第3のトランザクションを中断する。
【0112】
図24を参照すると、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cが、両方とも、ノード108a、108cの両方が第2のトランザクションをコミットする準備ができていることを示すOK(T[100])メッセージによってグローバルトランザクションマネージャ116に応答する。図25を参照すると、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cからOK(T[100])メッセージを受信することに応じて、グローバルトランザクションマネージャ116が、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cにCommit(T[100])メッセージを送信し、第2のトランザクションにコミットをさせる。
【0113】
Commit(T[100])メッセージが第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cにおいて受信されるとき、ローカルトランザクションマネージャ114a、114cは、第2のトランザクションが成功裏にコミットした(及びアボートしなかった)ことを知る。ローカルトランザクションマネージャ114a、114cは、第3のトランザクションを中断から覚まし、そして、第3のトランザクションが、第1のデータベースフラグメント112aからx[100]を読み取る。図26を参照すると、第3のトランザクションの操作が完了すると、グローバルトランザクションマネージャ116は、第3のトランザクションに関するコミット識別子(すなわち、115)を生じさせ、コミット識別子を含めるために第3のトランザクションに関する第2のグローバルレコード2127を更新する。また、グローバルトランザクションマネージャ116は、(図26においてアステリスクとして示される)第3のトランザクションに関する第2のグローバルレコード2127に、PREPARE状態にあるものとして印を付け、第2のグローバルレコード2127の更新されたバージョン、すなわち、T[111,115]*:N1N5を結果として生じる。
【0114】
グローバルトランザクションマネージャ116は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cに完了するトランザクション識別子の空のリスト(すなわち、())を含むPrepare(T[111,115])メッセージを送信する。グローバルトランザクションマネージャ116からPrepare(T[111,115])メッセージを受信することに応じて、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cは、第3のトランザクションに関するそれらのノードのそれぞれの第3のローカルレコード2225をT[111,115]に更新し、それらのノードが第3のトランザクションをコミットする準備ができているかどうかを決定する。
【0115】
図27を参照すると、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cが、両方とも、ノード108a、108cの両方が第3のトランザクションをコミットする準備ができていることを示すOK(T[111])メッセージによってグローバルトランザクションマネージャ116に応答する。図28を参照すると、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cからOK(T[111])メッセージを受信することに応じて、グローバルトランザクションマネージャ116が、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cにCommit(T[111])メッセージを送信し、第3のトランザクションにコミットをさせる。
【0116】
1.8 順序が狂ったメッセージの処理
一部の例においては、2又は3以上のトランザクションに関するPREPAREメッセージなどのメッセージが、グローバルトランザクションマネージャ116から分散型データベースシステム102内のノード108に第1の順序で送信されるが、ノード108のうちの1又は2以上のローカルトランザクションマネージャ114に第1の順序とは異なる第2の順序で到着する可能性がある。PREPAREメッセージが、それらのPREPAREメッセージがグローバルトランザクションマネージャ116から送信される順序ではなくそれらのPREPAREメッセージがローカルトランザクションマネージャ114において受信される順序で処理される場合、コミットするべきトランザクションを誤ってアボートすることによって、第1のコミットするトランザクションが勝つ規則(つまり、データ要素を書き込む2つの同時トランザクションに関して、コミットする第1のトランザクションが勝ち、その他のトランザクションがアボートしなければならない)に違反するなどの副次的な作用が発生する可能性がある。そのような副次的な作用は、システムの非効率的で、潜在的に誤った動作を引き起こす可能性がある。
【0117】
図29を参照すると、そのような状況が起こるのを防ぐために、順序が狂ったメッセージの処理アルゴリズム2700が使用される。第1のステップ2702において、完了するトランザクションのリストを含むPrepare()メッセージが、第1のトランザクションに参加するノードのローカルトランザクションマネージャにおいて受信される。第2のステップ2704において、ローカルトランザクションマネージャは、完了するトランザクションのリスト内のいずれかのトランザクションが第1のトランザクションと同じデータ要素に書き込んでいるが、参加しているノードにおいてまだPREPARE状態にないかどうかを決定するために、第1のトランザクションを完了するトランザクションのリスト及びトランザクションマネージャに管理されるトランザクションと比較する。
【0118】
いずれかのそのようなトランザクションが特定される場合、第1のトランザクションに関するPrepare()メッセージが、順序が狂って受信されており、アルゴリズムは、第3のステップ2706に進み、第3のステップ2706において、ローカルトランザクションマネージャが、特定されたトランザクションが完了するまで第1のトランザクションを中断させる。特定されたトランザクションが完了するまで第1のトランザクションを中断させることは、第1のコミットするトランザクションが勝つ規則が違反されないような適切なメッセージの順序付けを再確立する。
【0119】
第1のトランザクションに関するPrepare()メッセージが順序が狂って受信されない場合、又は第1のトランザクションが中断から覚めるとき、アルゴリズムは、第4のステップ2708に進み、第4のステップ2708において、ローカルトランザクションマネージャが、第1のトランザクションがコミットされ得るかどうかを決定する。第1のトランザクションがコミットされ得る場合、アルゴリズムは、第5のステップ2710に進み、第5のステップ2710において、参加するノードのすべてのローカルトランザクションマネージャが、グローバルトランザクションマネージャにOK()メッセージを送信する。後続の第6のステップ2712において、グローバルトランザクションマネージャが、参加するノードのローカルトランザクションマネージャにCommit()メッセージを送信する。最後に、第7のステップ2714において、第1のトランザクションの変更が、参加するノードにおいてコミットされる。
【0120】
第1のトランザクションがコミットされ得ない場合、アルゴリズムは、第8のステップ2716に進み、第8のステップ2716において、参加するノードのうちの1又は2以上のローカルトランザクションマネージャが、グローバルトランザクションマネージャにNotOK()メッセージを送信する。後続の第9のステップ2718において、グローバルトランザクションマネージャが、参加するノードのローカルトランザクションマネージャにAbort()メッセージを送信する。最後に、第10のステップ2720において、第1のトランザクションの変更が、参加するノードにおいてロールバックされる。
【0121】
例えば、図30を参照すると、分散型データベースシステム202の一部は、第1のノード108a、第2のノード108b、及び第5のノード108cを含む。第2のノード108bは、分散型データベースシステム202のためのリーダーノードとして指定される。第1のトランザクションT[100,FUTURE]は、第1のノード108a上の第1のデータベースフラグメント112aにデータ要素xの第1の新しいバージョンx[100]626を書き込み、第5のノード108c上で1又は2以上のその他の操作(図示せず)を実施した。第2のトランザクションT[105,FUTURE]は、第1のノード108a上の第1のデータベースフラグメント112aにデータ要素xの第2の新しいバージョンx[105]224を書き込み、第5のノード108c上で1又は2以上のその他の操作(図示せず)を実施した。グローバルトランザクションマネージャ116は、第1のトランザクションに関する第1のグローバルレコード721、すなわち、T[100,FUTURE]:N1N5を含む。第1のグローバルレコード721は、第1のトランザクションがトランザクション識別子100を有し、第1のノード108a及び第5のノード108c上で現在アクティブであることを示す。グローバルトランザクションマネージャ116は、第2のトランザクションに関する第2のグローバルレコード726、すなわち、T[105,FUTURE]:N1N5をさらに含む。第2のグローバルレコード726は、第2のトランザクションがトランザクション識別子105を有し、第1のノード108a及び第5のノード108c上で現在アクティブであることを示す。第1のトランザクションの第1のローカルレコードT[100,FUTURE]720と第2のトランザクションの第2のローカルレコードT[105,FUTURE]722との両方は、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cに記憶される。
【0122】
図31を参照すると、グローバルトランザクションマネージャ116は、(例えば、クライアント104のうちの1つから)END_TRANS(T[100])メッセージを受信するとき、第1のトランザクションに関するコミット識別子(すなわち、110)を生じさせ、コミット識別子を含めるために第1のトランザクションに関する第1のグローバルレコード721を更新する。グローバルトランザクションマネージャ116は、さらに、第1のトランザクションに関する第1のグローバルレコード721に、(図31においてアステリスクとして示される)PREPARE状態にあるものとして印を付け、第1のグローバルレコード721の更新されたバージョン、すなわち、T[100,110]*:N1N5を結果として生じる。
【0123】
図32を参照すると、グローバルトランザクションマネージャ116は、(例えば、クライアント104のうちの1つから)END_TRANS(T[105])メッセージを受信するとき、第2のトランザクションに関するコミット識別子(すなわち、111)を生じさせ、コミット識別子を含めるために第2のトランザクションに関する第2のグローバルレコード726を更新する。グローバルトランザクションマネージャ116は、さらに、第2のトランザクションに関する第2のグローバルレコード726に、(図32においてアステリスクとして示される)PREPARE状態にあるものとして印を付け、第2のグローバルレコード726の更新されたバージョン、すなわち、T[105,111]*:N1N5を結果として生じる。
【0124】
図33を参照すると、グローバルトランザクションマネージャ116が、ローカルトランザクションマネージャ114a、114cに完了するトランザクション識別子の空のリスト(すなわち、())を含むPrepare(T[100,110])メッセージを最初に送信する。それから、グローバルトランザクションマネージャは、後続のPrepare(T[105,111])メッセージを、T[100]を含む完了するトランザクション識別子のリストと一緒にローカルトランザクションマネージャ114a、114cに送信する。
【0125】
図33の例において、Prepare(T[105,111])メッセージ及び完了するトランザクション識別子のそのメッセージの関連するリストは、Prepare(T[100,110])メッセージの前にローカルトランザクションマネージャ114a、114cに到着する。つまり、Prepare(...)メッセージが、順序が狂って受信される。Prepare(...)メッセージが単純にそれらのメッセージがローカルトランザクションマネージャ114a、114cにおいて受信される順序で処理されるならば、ローカルトランザクションマネージャ114a、114cは、第2のトランザクションT[105,111]が第1のコミットするトランザクションであると決定し、T[100]をアボートさせることになる。もちろん、第1のトランザクションT[100]をアボートすることは、第2のトランザクションT[105,111]が実際には第1のコミットするトランザクションではないので誤った操作になる。確かに、第1のトランザクションT[100,110]は、第2のトランザクションのコミット識別子111よりも小さいコミット識別子110を第1のグローバルレコード721内に有するので第1のコミットするトランザクションである。
【0126】
第1のトランザクションを誤ってアボートすることを防止するために、この例においては、Prepare(T[105,111])メッセージを受信すると、ローカルトランザクションマネージャ114a、114cは、いずれかのトランザクションが第2のトランザクションT[105,111]と同じ(1又は2以上の)データ要素を書き込み済みであり、PREPARE状態にあるかどうかを決定するために、完了するトランザクション識別子のリストを調べる。この場合、第1のトランザクションT[100]は、完了するトランザクション識別子のリストに含まれており(つまり、第1のトランザクションT[100]がPREPARE状態にあり)、第2のトランザクションT[105,111]も書き込んだデータ要素xのバージョンを書き込み済みであるので、これらの条件を満たす。第1のトランザクションT[100]をアボートするのではなく、ローカルトランザクションマネージャ114a、114cは、第1のトランザクションT[100]の結果が知られるまで第2のトランザクションT[105,111]を中断する。
【0127】
図34を参照すると、Prepare(T[105,111])メッセージがローカルトランザクションマネージャ114a、114cにおいて受信された後の時点で、Prepare(T[100,110])メッセージが、ローカルトランザクションマネージャ114a、114cにおいて受信される。グローバルトランザクションマネージャ116からPrepare(T[100,110])メッセージを受信することに応じて、第1の及び第5のノード108a、108cのローカルトランザクションマネージャ114a、114cは、それぞれ、第1のトランザクションに関する第1のローカルレコード720をT[100,110]に更新し、それらのノードが第1のトランザクションをコミットする準備ができているかどうかの決定を開始する。
【0128】
図35を参照すると、第1のノード108aのデータベースマネージャ110aは、第1のトランザクションがコミットする準備ができていることを示すOK(T[100])メッセージをグローバルトランザクションマネージャ116に送信する。第5のノード108cも、第1のトランザクションがコミットする準備ができていることを示すOK(T[100])メッセージをグローバルトランザクションマネージャ116に送信する。
【0129】
第1の及び第5のノード108a、108cからのOK(T[100])メッセージが受信される図36を参照すると、グローバルトランザクションマネージャ116は、第1のトランザクションが動作しているノードのすべてが第1のトランザクションがコミットする準備ができていることを示したと決定する。グローバルトランザクションマネージャ116は、第1のグローバルレコード721に、もはや準備していないものとして印を付け、第1のノード108a及び第5のノード108cにCommit(T[100])メッセージを送信し、第1のノード108aのデータベースフラグメント112a上でxのx[100]のバージョンにコミットをさせることを含め、第1のトランザクションにコミットをさせる。
【0130】
図37を参照すると、第1のトランザクションがコミットされた状態で、第2のトランザクションが中断から覚める。中断から覚めると、第1のノード108aのデータベースマネージャ110aは、そのことが第1のコミットするトランザクションが勝つ規則に違反するので、第2のトランザクションが第1のノード108a上でコミットし得ないことを示すNot OK(T[105])メッセージをグローバルトランザクションマネージャ116に送信する。第5のノード108cのデータベースマネージャ110cは、第2のトランザクションがコミットし得ることを示すOK(T[105])メッセージを送信する。
【0131】
図38を参照すると、第1のノード108aからNot OK(T[105])メッセージを受信した結果として、グローバルトランザクションマネージャ116が、第2のグローバルレコード726を削除し、第1のノード108a及び第5のノード108cにAbort(T[105])メッセージを送信することによって第2のトランザクションをアボートする。
【0132】
グローバルトランザクションマネージャ116からAbort(T[105])メッセージを受信すると、第1のノード108aは、データ要素xのx[105]のバージョンをその第1のノードのデータフラグメント112aから削除し、第2のローカルレコード722をその第1のノードのローカルトランザクションマネージャ114aから削除する。同様に、第5のノード108cは、第2のローカルレコード722をその第5のノードのローカルトランザクションマネージャ114cから削除する。
【0133】
1.9 ローカルトランザクションマネージャのパージメカニズム
上述のように、分散型データベースシステム102内のノード108の各々のためのローカルトランザクションマネージャ114は、ノード108上で過去に実行されたか又は現在実行されている各トランザクションのレコードを維持する。一部の例において、このプロセスがスケーリングすることを難しくする技術的詳細が存在する。例えば、トランザクションT[10]がそのトランザクションがデータ要素のバージョンx[8]を読むことができるかどうかを決定する場合を考える。x[8]はT[8]によって書き込まれ、T[8]がT[10]の前に始まったことが知られている。しかし、T[8]がコミットした時間又はいったいT[8]がコミットをしたのかどうかは、(x[8]自体から)分からない。T[10]は、T[8]のコミット情報をxから直接得られないが、ローカルトランザクションマネージャ114に記憶されたT[8]のレコードからこの情報を得ることができる。以下の4つの場合のうちの1つが存在することになる。
1.T[8]が、まだアクティブである(そして、ローカルトランザクションマネージャ114が、T[8]がまだアクティブであることを知っている)。この場合、T[10]は、x[8]を読み取ることができない。
2.T[8]が、アボートしている(そして、ローカルトランザクションマネージャ114が、T[8]がアボートしていることを知っている)が、アボートが、x[8]をまだ「アンドゥ」していない。この場合、T[10]は、x[8]を読み取ることができない。
3.T[8]がT[10]が始まる前にコミットした、つまり、T[8]がT[8,9]である。この場合、T[10]は、x[8]を読み取ることができる。
4.T[8]がT[10]が始まった後にコミットし、したがって、T[8]が(例えば)T[8,12]である。この場合、T[10]は、x[8]を読み取ることができない。
【0134】
困難は、上のポイント3及び4から生じる。特に、ローカルトランザクションマネージャ114は、(効率的なアクセスのために)そのトランザクションに関するトランザクションの状態をメモリに維持する。ポイント3及び4は、ローカルトランザクションマネージャ114がT[8]がコミットした後のある時間の期間T[8]のトランザクションの状態を維持しなければならないことを示唆する。これは、ライフタイムの長い(long-lived)サーバプロセスに関する問題を引き起こす。特に、ローカルトランザクションマネージャ114は、可視性の計算を容易にするために必要なだけ長くT[8]の状態を維持しなければならず、この状態を無期限に維持することができず、そうでなければ、サーバプロセスがメモリを使い果たし、クラッシュすることになる。
【0135】
メモリを使い果たすのを防ぐために、分散型データベースシステム102内のローカルトランザクションマネージャ114は、「古い」トランザクションの状態(つまり、トランザクションの古いレコード)を周期的にパージする。ローカルトランザクションマネージャ114は、2つのパージ戦略、すなわち、最も良くあるケースを対象とするアルゴリズム的に効率的な戦略(「クイックパージ」)と、クイックパージでは十分ではない場合のための、効率的には劣るがより完全な戦略(「完全パージ」)とを使用する。
【0136】
概して、パージアルゴリズムは、「グローバル最下点」の概念に依拠する可能性がある。グローバル最下点は、次のように、つまり、T[i]がシステム内の最も古いアクティブなトランザクションであるものとし、T[j]がT[i]が始まったときの最も古いアクティブなトランザクションであるものとして画定される。グローバル最下点は、jである。トランザクションのレコードのパージに関する限り、グローバル最下点は、次のこと、つまり、トランザクション識別子がjよりも小さいいかなるトランザクションも、そのトランザクションの状態の情報が可視性の計算のために再び必要とされることがないだけ十分前にコミットされたはずであることを示唆する。
【0137】
1.9.1 クイックパージ
クイックパージアルゴリズムが始まる前に、ノード108のためのローカルトランザクションマネージャ114は、コミット識別子によって順序付けられたコミットされたトランザクションのリストを含む。このリストは、可視性の計算のために必要とされる可能性があるすべてのコミットされたトランザクションを含む。クイックパージプロセスを開始するために、ローカルトランザクションマネージャ114は、分散型データベースシステム102のグローバルトランザクションマネージャ116にネットワークメッセージを送信し、分散型データベースシステム102に関するグローバル最下点及びグローバルにアクティブなトランザクションのリストを要求する。グローバルトランザクションマネージャ116は、要求された情報を含むメッセージによってローカルトランザクションマネージャ114に応答する。ローカルトランザクションマネージャ114は、コミットされたトランザクションの各々のコミット識別子をグローバル最下点と比較することを含め、コミットされたトランザクションのそのローカルトランザクションマネージャ114のリストを処理する。例示的なグローバル最下点よりも小さいコミット識別子を有するすべてのコミットされたトランザクションは、ローカルトランザクションマネージャ114からパージされる。一部の例において、クイックパージアルゴリズムは、早期終了条件(early termination condition)を用いるリニアワンパスアルゴリズム(linear one-pass algorithm)である。単一のローカルトランザクションマネージャ上で、クイックパージアルゴリズムは、正しい操作のために必要な最も小さな数のトランザクションを調べることができる。
【0138】
図39を参照すると、分散型データベースシステム202の一部は、第1のノード108a、第2のノード108b、及び第5のノード108cを含む。第2のノード108bは、分散型データベースシステム202のためのリーダーノードとして指定される。第1のノード108aのローカルトランザクションマネージャ114aは、第1のノード108aにおいて既に完了したトランザクションの5つのローカルレコード、すなわち、T[100,120]の第1のローカルレコード2840、T[63,80]の第2のローカルレコード2842、T[50,62]の第3のローカルレコード2844、T[25,35]の第4のローカルレコード2846、及びT[20,30]の第5のローカルレコード2848を含む。第5のノード108cのローカルトランザクションマネージャ114cは、第5のノード108c上でアクティブであるトランザクションの2つのローカルレコード、すなわち、T[110,FUTURE]の第6のローカルレコード2850及びT[53,FUTURE]の第7のローカルレコード2852を含む。グローバルトランザクションマネージャ116は、分散型データベースシステム内でアクティブであるトランザクションの2つのグローバルレコード、すなわち、T[110,FUTURE]:N5の第1のグローバルレコード2854及びT[53,FUTURE]:N5の第2のグローバルレコード2856を含む。第1のノード108aのローカルトランザクションマネージャ114aは、グローバルトランザクションマネージャ116に「Purge Request Message」を送信しており、分散型データベースシステム102に関するグローバル最下点及びグローバルにアクティブなトランザクションのリストを要求する。
【0139】
図40を参照すると、グローバルトランザクションマネージャ116は、例えば、この場合は48であるグローバル最下点と、例えば、T[110]及びT[53]を含むグローバルにアクティブなトランザクションのリストとによって「Purge Request Message」に応答する。任意のクイックパージを実施するために、ローカルトランザクションマネージャ114aは、最も古いものから最も新しいものまでトランザクションのそのローカルトランザクションマネージャ114aのローカルレコードに繰り返し適用され、ローカルレコードのコミット識別子を例示的なグローバル最下点と比較して、どのローカルレコードをパージすべきかを決定する。この例においては、第5のローカルレコード2848のコミット識別子(すなわち、30)が、例示的なグローバル最下点(すなわち、48)と比較される。30は48より小さいので、第5のローカルレコード2848は、ローカルトランザクションマネージャ114aからパージされる。次に、第4のローカルレコード2846のコミット識別子(すなわち、35)が、グローバル最下点(すなわち、48)と比較される。35は48より小さいので、第4のローカルレコード2846は、ローカルトランザクションマネージャ114aからパージされる。そして、第3のローカルレコード2844のコミット識別子(すなわち、62)が、例示的なグローバル最下点(すなわち、48)と比較される。62は48より大きいので、第3のローカルレコード2844はパージされず、この場合、クイックパージアルゴリズムが完了する。
【0140】
1.9.2 完全パージ
一部の例において、上述のクイックパージアルゴリズムは、トランザクションが比較的安定した率で到着し、実行され、完了する作業負荷に対して有効である。しかし、すべての作業負荷が、これらの特徴を有するとは限らない。特に、一部の例において、クイックパージアルゴリズムは、長くランされる(long-running)トランザクション(すなわち、ライフタイムが平均よりも著しく長いトランザクション)に上手く対処しない。そのような例において、ローカルトランザクションマネージャ114は、完全パージアルゴリズムを使用する。
【0141】
概して、完全パージアルゴリズムは、ローカルトランザクションマネージャ114が例示的なグローバル最下点及びグローバルにアクティブなトランザクション識別子のリストを所有し、クイックパージアルゴリズムを既に実施した可能性があると実行される。完全パージアルゴリズムは、ローカルトランザクションマネージャ114によって記憶されたコミットされたトランザクションのローカルレコードに繰り返し適用され得る。各ローカルレコードT[i,j]に関して、ローカルトランザクションマネージャ114は、グローバルにアクティブなトランザクション識別子のリストに対して繰り返し適用され、それぞれのグローバルにアクティブなトランザクション識別子gをローカルレコードのトランザクション識別子(すなわち、i)及びコミット識別子(すなわち、j)と比較して、ローカルレコードがパージされ得るかどうかを決定し得る。概して、i < g < jであるようなグローバルにアクティブなトランザクション識別子gが存在する場合、ローカルレコードはパージされ得ない。そのようなgが特定されない場合、ローカルレコードはパージされ得る。
【0142】
i < g < jであるようなgが存在する場合にT[i,j]を維持する必要があることは、次のこと、つまり、この特定のローカルトランザクションマネージャ114に参加しなかったが、T[i,j]と同時に存在するアクティブなトランザクションT[g]が存在することを示唆するということに留意されたい。もしもT[g]が参加するようなことがあれば、T[i,j]の状態情報が、T[g]の可視性の判断のために必要とされる可能性がある。
【0143】
図41を参照すると、クイックパージアルゴリズムが、(図40に示されたように)実施されており、ローカルトランザクションマネージャ114aが、グローバルにアクティブなトランザクションT[53]及びT[110]のリストを有する。完全パージアルゴリズムは、第1のローカルレコード2840、第2のローカルレコード2842、及び第3のローカルレコード2844に繰り返し適用される。
【0144】
完全パージアルゴリズムが第1のローカルレコード2840に達するとき、アルゴリズムは、グローバルにアクティブなトランザクションのリストのトランザクション識別子(すなわち、53及び110)を第1のローカルレコード2840のトランザクション識別子(すなわち、100)及びコミット識別子(すなわち、120)と比較して、第1のローカルレコード2840がパージされ得るかどうかを決定する。この例においては、トランザクション識別子「110」を有するグローバルにアクティブなトランザクションが存在する。「110」は第1のローカルレコード2840のトランザクション識別子(すなわち、100)とコミット識別子(すなわち、120)との間に入るので、第1のローカルレコード2840はパージされない。
【0145】
完全パージアルゴリズムが第2のローカルレコード2842に達するとき、アルゴリズムは、グローバルにアクティブなトランザクションのリストのトランザクション識別子(すなわち、53及び110)を第2のローカルレコード2842のトランザクション識別子(すなわち、63)及びコミット識別子(すなわち、80)と比較して、第2のローカルレコード2842がパージされ得るかどうかを決定する。この例においては、グローバルにアクティブなトランザクションのトランザクション識別子のいずれも第2のローカルレコード2842のトランザクション識別子(すなわち、63)とコミット識別子(すなわち、80)との間に入らないので、第2のローカルレコード2842はパージされる。
【0146】
完全パージアルゴリズムが第3のローカルレコード2844に達するとき、アルゴリズムは、グローバルにアクティブなトランザクションのリストのトランザクション識別子(すなわち、53及び110)を第3のローカルレコード2844のトランザクション識別子(すなわち、50)及びコミット識別子(すなわち、62)と比較して、第3のローカルレコード2844がパージされ得るかどうかを決定する。この例においては、トランザクション識別子「53」を有するグローバルにアクティブなトランザクションが存在する。「53」は第3のローカルレコード2844のトランザクション識別子(すなわち、50)とコミット識別子(すなわち、62)との間に入るので、第3のローカルレコード2844はパージされない。
【0147】
図41の例においては、完全パージアルゴリズムの完了時に、第1のローカルレコード2840及び第3のローカルレコード2844以外のすべてのローカルレコードが、第1のノード108aのローカルトランザクションマネージャ114aからパージされる。
【0148】
2 実施形態
上述の分散型データベースシステムは、例えば、好適なソフトウェア命令を実行するプログラミング可能なコンピューティングシステムを用いて実装される可能性があり、又はフィールドプログラマブルゲートアレイ(FPGA,field-programmable gate array)などの好適なハードウェアで、若しくは何らかの混成の形態で実装される可能性がある。例えば、プログラミングされる手法において、ソフトウェアは、それぞれが少なくとも1つのプロセッサ、(揮発性及び/又は不揮発性メモリ及び/又はストレージ要素を含む)少なくとも1つのデータストレージシステム、(少なくとも1つの入力デバイス又はポートを用いて入力を受け取るため、及び少なくとも1つの出力デバイス又はポートを用いて出力を与えるための)少なくとも1つのユーザインターフェースを含む(分散、クライアント/サーバ、又はグリッドなどのさまざまなアーキテクチャである可能性がある)1又は2以上のプログラミングされた又はプログラミング可能なコンピューティングシステム上で実行される1又は2以上のコンピュータプログラムのプロシージャを含み得る。ソフトウェアは、例えば、データフローグラフの設計、構成、及び実行に関連するサービスを提供するより大きなプログラムの1又は2以上のモジュールを含む可能性がある。プログラムのモジュール(例えば、データフローグラフの要素)は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
【0149】
ソフトウェアは、ある期間(例えば、ダイナミックRAMなどのダイナミックメモリデバイスのリフレッシュ周期の間の時間)媒体の物理特性(例えば、表面ピット及びランド、磁区、又は電荷)を使用して、揮発性若しくは不揮発性ストレージ媒体又は任意のその他の非一時的媒体に具現化されるなど、非一時的形態で記憶され得る。命令をロードするのに備えて、ソフトウェアは、CD−ROM又は(例えば、多目的若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な)その他のコンピュータ可読媒体などの有形の非一時的媒体上に提供される可能性があり、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される(例えば、伝播信号に符号化される)可能性がある。処理の一部又はすべては、専用のコンピュータ上で、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ(FPGA,field-programmable gate array)若しくは専用の特定用途向け集積回路(ASIC,application-specific integrated circuit)などの専用のハードウェアを使用して実施される可能性がある。処理は、ソフトウェアによって規定された計算の異なる部分が異なるコンピューティング要素によって実施される分散された方法で履行される可能性がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実施するためにストレージデバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、多目的又は専用のプログラミング可能なコンピュータによってアクセスされ得るストレージデバイスのコンピュータ可読ストレージ媒体(例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体)に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムによって構成された有形の非一時的媒体として実装されると考えられる可能性もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの1又は2以上を実施するために特定の予め定義された方法でコンピュータを動作させる。
【0150】
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、以下の請求項の範囲によって画定される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、以下の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順序に依存しない可能性があり、したがって、説明された順序とは異なる順序で実施される可能性がある。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【国際調査報告】

[広告欄]

ログインすれば広告は減ります

ログインすれば広告は減ります