特許第6231675号(P6231675)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 華為技術有限公司の特許一覧

<>
  • 特許6231675-トランザクション処理方法および装置 図000003
  • 特許6231675-トランザクション処理方法および装置 図000004
  • 特許6231675-トランザクション処理方法および装置 図000005
  • 特許6231675-トランザクション処理方法および装置 図000006
  • 特許6231675-トランザクション処理方法および装置 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6231675
(24)【登録日】2017年10月27日
(45)【発行日】2017年11月15日
(54)【発明の名称】トランザクション処理方法および装置
(51)【国際特許分類】
   G06F 12/00 20060101AFI20171106BHJP
【FI】
   G06F12/00 533J
   G06F12/00 518A
【請求項の数】28
【全頁数】29
(21)【出願番号】特願2016-526114(P2016-526114)
(86)(22)【出願日】2013年11月5日
(65)【公表番号】特表2016-538631(P2016-538631A)
(43)【公表日】2016年12月8日
(86)【国際出願番号】CN2013086572
(87)【国際公開番号】WO2015062113
(87)【国際公開日】20150507
【審査請求日】2016年4月25日
(31)【優先権主張番号】PCT/CN2013/086169
(32)【優先日】2013年10月29日
(33)【優先権主張国】CN
(73)【特許権者】
【識別番号】503433420
【氏名又は名称】華為技術有限公司
【氏名又は名称原語表記】HUAWEI TECHNOLOGIES CO.,LTD.
(74)【代理人】
【識別番号】110001243
【氏名又は名称】特許業務法人 谷・阿部特許事務所
(72)【発明者】
【氏名】方 新
【審査官】 塚田 肇
(56)【参考文献】
【文献】 特開平07−319748(JP,A)
【文献】 特開2012−022379(JP,A)
【文献】 特開平10−289142(JP,A)
【文献】 特開2006−227816(JP,A)
【文献】 米国特許第07401084(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
コーディネータに適用されるトランザクション処理方法であって、前記コーディネータは、参加者に通信可能に接続され、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、前記サブオブジェクトのうちの1つは、前記コーディネータ内にあり、その他のサブオブジェクトは、異なる参加者内にあり、前記方法は、
前記コーディネータによって、問合せメッセージを各参加者に送信するステップであって、前記問合せメッセージは、トランザクションID、オブジェクトID、および前記オブジェクトの変更情報を運搬し、前記トランザクションIDは、前記トランザクションを識別するために使用され、前記オブジェクトIDは、前記オブジェクトを識別するために使用され、前記変更情報は、前記オブジェクトのコンテンツに対応し、異なる変更情報を有する前記オブジェクトのコンテンツは異なっている、ステップと、
前記コーディネータによって、各参加者から前記問合せメッセージに対する応答メッセージを受信するステップと、
前記コーディネータによって、前記応答メッセージに応じて結論を引き出し、前記コーディネータによって、前記結論を実行し、前記結論を前記参加者に送信するステップであって、前記結論は、
前記応答メッセージの任意の1つが第1の情報を運搬している場合、前記結論は、前記トランザクションを実行することであり、前記第1の情報は、前記参加者が、前記トランザクションIDを含まず前記オブジェクトIDを含み、前記参加者内の前記オブジェクトの前記変更情報が、前記コーディネータ内の前記オブジェクトの前記変更情報と同じであることを示すこと、または、
前記応答メッセージの任意の1つが第2の情報を運搬している場合、前記結論は、前記トランザクションをアボートすることであり、前記第2の情報は、前記参加者が、前記トランザクションIDを含まず前記オブジェクトIDを含み、前記参加者内の前記オブジェクトの前記変更情報が、前記コーディネータ内の前記オブジェクトの前記変更情報とは異なることを示すこと
の少なくとも一方を含む、ステップと
を含むことを特徴とするトランザクション処理方法。
【請求項2】
前記コーディネータおよび前記参加者はすべてオブジェクトベースのストレージデバイスOSDであり、前記トランザクションは、すべての前記サブオブジェクトの読み取り、すべての前記サブオブジェクトの削除、またはすべての前記サブオブジェクトの書き込みであることを特徴とする請求項1に記載の方法。
【請求項3】
前記コーディネータおよび前記参加者は、元のコーディネータに通信可能に接続されており、前記元のコーディネータはサブオブジェクトを有しておらず、その前に、前記方法は、
前記元のコーディネータが故障した後に、元の参加者のうちの1つが前記コーディネータとして選択されることをさらに含むことを特徴とする請求項1または2に記載の方法。
【請求項4】
前記元のコーディネータが故障する前に、前記方法は、
前記元のコーディネータによって、操作要求を各参加者に送信するステップであって、前記操作要求は、前記オブジェクトID、操作タイプ、前記コーディネータ内に記録された前記オブジェクトの前記変更情報、および参加者のリストを運搬し、前記参加者のリストは、すべての前記元の参加者を記録している、ステップと、
前記コーディネータによって、準備コマンドを各参加者に送信するステップであって、前記元の参加者のそれぞれが、参加者のリストを受信し記憶し、前記トランザクションのためのリソースを割り当てるように、前記コマンドは、前記トランザクションID、前記オブジェクトID、前記コーディネータ内に記録された前記オブジェクトの前記変更情報、および参加者の前記リストを運搬する、ステップと
をさらに含むことを特徴とする請求項に記載の方法。
【請求項5】
前記オブジェクトの前記変更情報は、前記オブジェクトのバージョン番号であることを特徴とする請求項1乃至のいずれか一項に記載の方法。
【請求項6】
前記参加者内の前記オブジェクトの前記変更情報が、前記コーディネータ内の前記オブジェクトの前記変更情報とは異なることは、特に、
前記参加者内の前記オブジェクトのバージョンが、前記コーディネータ内の前記オブジェクトのバージョンよりも後である、または、
前記参加者内の前記オブジェクトのバージョンが、前記コーディネータ内の前記オブジェクトのバージョンよりも古い
ことを特徴とする請求項5に記載の方法。
【請求項7】
参加者に通信可能に接続されたトランザクション処理装置であって、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、前記サブオブジェクトのうちの1つは、前記トランザクション処理装置内にあり、その他のサブオブジェクトは、異なる参加者内にあり、前記装置は、
問合せメッセージを各参加者に送信するように構成された問合せモジュールであって、前記問合せメッセージは、トランザクションID、オブジェクトID、および前記オブジェクトの変更情報を運搬し、前記トランザクションIDは、前記トランザクションを識別するために使用され、前記オブジェクトIDは、前記オブジェクトを識別するために使用され、前記変更情報は、前記オブジェクトのコンテンツに対応し、異なる変更情報を有する前記オブジェクトのコンテンツは異なっている、問合せモジュールと、
各参加者から前記問合せメッセージに対する応答メッセージを受信するように構成された受信モジュールと、
前記応答メッセージに応じて結論を引き出し、前記結論をすべての前記参加者に送信するように構成された判断モジュールであって、前記結論は、
前記応答メッセージの任意の1つが第1の情報を運搬している場合、前記結論は、前記トランザクションを実行することであり、前記第1の情報は、前記参加者が、前記トランザクションIDを含まず前記オブジェクトIDを含み、前記参加者内の前記オブジェクトの前記変更情報が、コーディネータ内の前記オブジェクトの前記変更情報と同じであることを示すこと、または、
前記応答メッセージの任意の1つが第2の情報を運搬している場合、前記結論は、前記トランザクションをアボートすることであり、前記第2の情報は、前記参加者が、前記トランザクションIDを含まず前記オブジェクトIDを含み、前記参加者内の前記オブジェクトの前記変更情報が、コーディネータ内の前記オブジェクトの前記変更情報とは異なることを示すこと
の少なくとも一方を含む、判断モジュールと、
前記判断モジュールの前記結論を実行するように構成された実行モジュールと
を備えることを特徴とするトランザクション処理装置。
【請求項8】
前記コーディネータおよび前記参加者はすべてオブジェクトベースのストレージデバイスOSDであり、前記トランザクションは、すべての前記サブオブジェクトの読み取り、すべての前記サブオブジェクトの削除、またはすべての前記サブオブジェクトの書き込みであることを特徴とする請求項に記載のトランザクション処理装置。
【請求項9】
前記コーディネータおよび前記参加者は、元のコーディネータに通信可能に接続されており、前記元のコーディネータはサブオブジェクトを有しておらず、前記受信モジュールは、
記元のコーディネータの、前記トランザクションID、前記オブジェクトID、前記オブジェクトの前記変更情報、および参加者のリストを受信することにより、さらに構成されることを特徴とする請求項またはに記載のトランザクション処理装置。
【請求項10】
前記オブジェクトの前記変更情報は、前記オブジェクトのバージョン番号であることを特徴とする請求項乃至のいずれか一項に記載のトランザクション処理装置。
【請求項11】
参加者に通信可能に接続されたコーディネータであって、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、前記サブオブジェクトのうちの1つは、前記コーディネータ内にあり、その他のサブオブジェクトは、異なる参加者内にあり、前記コーディネータは、プロセッサ、および前記プロセッサと通信するメモリを備え、前記メモリは、プログラム命令を記憶するように構成され、前記プロセッサは、前記プログラム命令を実行するように構成され、前記プログラム命令は、
問合せメッセージを各参加者に送信することであって、前記問合せメッセージは、トランザクションID、オブジェクトID、および前記オブジェクトの変更情報を運搬し、前記トランザクションIDは、前記トランザクションを識別するために使用され、前記オブジェクトIDは、前記オブジェクトを識別するために使用され、前記変更情報は、前記オブジェクトのコンテンツに対応し、異なる変更情報を有する前記オブジェクトのコンテンツは異なっている、送信することと、
各参加者から前記問合せメッセージに対する応答メッセージを受信することと、
前記応答メッセージに応じて結論を引き出し、前記結論を実行し、前記結論を前記参加者に送信することであって、前記結論は、
前記応答メッセージの任意の1つが第1の情報を運搬している場合、前記結論は、前記トランザクションを実行することであり、前記第1の情報は、前記参加者が、前記トランザクションIDを含まず前記オブジェクトIDを含み、前記参加者内の前記オブジェクトの前記変更情報が、前記コーディネータ内の前記オブジェクトの前記変更情報と同じであることを示すこと、または、
前記応答メッセージの任意の1つが第2の情報を運搬している場合、前記結論は、前記トランザクションをアボートすることであり、前記第2の情報は、前記参加者が、前記トランザクションIDを含まず前記オブジェクトIDを含み、前記参加者内の前記オブジェクトの前記変更情報が、前記コーディネータ内の前記オブジェクトの前記変更情報とは異なることを示すこと
の少なくとも一方を含む、送信することと
を行うために使用されることを特徴とするコーディネータ。
【請求項12】
前記コーディネータおよび前記参加者はすべてオブジェクトベースのストレージデバイスOSDであり、前記トランザクションは、すべての前記サブオブジェクトの読み取り、すべての前記サブオブジェクトの削除、またはすべての前記サブオブジェクトの書き込みであることを特徴とする請求項11に記載のコーディネータ。
【請求項13】
前記プログラム命令は、元のコーディネータによって送信された前記トランザクションID、前記オブジェクトID、前記オブジェクトの前記変更情報、および参加者のリストを受信するためにさらに使用されることを特徴とする請求項11または12に記載のコーディネータ。
【請求項14】
前記オブジェクトの前記変更情報は、前記オブジェクトのバージョン番号であることを特徴とする請求項11乃至13のいずれか一項に記載のコーディネータ。
【請求項15】
コーディネータに適用されるトランザクション処理方法であって、前記コーディネータは、参加者に通信可能に接続され、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、前記サブオブジェクトのうちの1つは、前記コーディネータ内にあり、その他のサブオブジェクトは、異なる参加者内にあり、前記方法は、
前記コーディネータによって、問合せメッセージを各参加者に送信するステップであって、前記問合せメッセージは、トランザクションIDおよびオブジェクトIDを運搬し、前記トランザクションIDは、トランザクションを識別するために使用され、前記オブジェクトIDは、前記オブジェクトを識別するために使用され、変更情報は、前記オブジェクトのコンテンツに対応し、異なる変更情報を有する前記オブジェクトのコンテンツは異なっている、ステップと、
前記コーディネータによって、各参加者から前記問合せメッセージに対する応答メッセージを受信するステップであって、前記応答メッセージは、第5の情報を運搬し、前記第5の情報は、前記参加者が、前記トランザクションIDを含まないが前記オブジェクトIDを含むことを示し、前記第5の情報は、前記応答メッセージを送信する前記参加者内の前記オブジェクトの変更情報をさらに運搬する、ステップと、
前記コーディネータによって、前記応答メッセージに応じて結論を引き出し、前記コーディネータによって、前記結論を実行し、前記結論を前記参加者に送信するステップであって、前記結論は、
前記参加者内の前記オブジェクトの前記変更情報が前記コーディネータ内の前記オブジェクトの変更情報と同じ場合、前記結論は、前記トランザクションを実行することであること、または、
前記参加者内の前記オブジェクトの前記変更情報が前記コーディネータ内の前記オブジェクトの変更情報とは異なる場合、前記結論は、前記トランザクションをアボートすることであること
の少なくとも一方を含む、ステップと
を含むことを特徴とするトランザクション処理方法。
【請求項16】
前記コーディネータおよび前記参加者はすべてオブジェクトベースのストレージデバイスOSDであり、前記トランザクションは、すべての前記サブオブジェクトの読み取り、すべての前記サブオブジェクトの削除、またはすべての前記サブオブジェクトの書き込みであることを特徴とする請求項15に記載の方法。
【請求項17】
前記参加者内の前記オブジェクトの前記変更情報が、前記コーディネータ内の前記オブジェクトの変更情報とは異なることは、特に、
前記参加者内の前記オブジェクトのバージョンが、前記コーディネータ内の前記オブジェクトのバージョンよりも後である、または、
前記参加者内の前記オブジェクトのバージョンが、前記コーディネータ内の前記オブジェクトのバージョンよりも古い
ことを特徴とする請求項15に記載の方法。
【請求項18】
前記コーディネータおよび前記参加者は、元のコーディネータに通信可能に接続されており、前記元のコーディネータはサブオブジェクトを有しておらず、その前に、前記方法は、
前記元のコーディネータが故障した後に、元の参加者のうちの1つが前記コーディネータとして選択されることをさらに含むことを特徴とする請求項15乃至17のいずれか一項に記載の方法。
【請求項19】
前記元のコーディネータが故障する前に、前記方法は、
前記元のコーディネータによって、操作要求を各参加者に送信するステップであって、前記操作要求は、前記オブジェクトID、操作タイプ、前記コーディネータ内に記録された前記オブジェクトの前記変更情報、および参加者のリストを運搬し、前記参加者のリストは、すべての前記元の参加者を記録している、ステップと、
前記コーディネータによって、準備コマンドを各参加者に送信するステップであって、前記元の参加者のそれぞれが、参加者のリストを受信し記憶し、前記トランザクションのためのリソースを割り当てるように、前記コマンドは、前記トランザクションID、前記オブジェクトID、前記コーディネータ内に記録された前記オブジェクトの前記変更情報、および参加者の前記リストを運搬する、ステップと
をさらに含むことを特徴とする請求項18に記載の方法。
【請求項20】
前記オブジェクトの前記変更情報は、前記オブジェクトのバージョン番号であることを特徴とする請求項15乃至19のいずれか一項に記載の方法。
【請求項21】
参加者に通信可能に接続されたトランザクション処理装置であって、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、前記サブオブジェクトのうちの1つは、前記トランザクション処理装置内にあり、その他のサブオブジェクトは、異なる参加者内にあり、前記装置は、
問合せメッセージを各参加者に送信するように構成された問合せモジュールであって、前記問合せメッセージは、トランザクションIDおよびオブジェクトIDを運搬し、前記トランザクションIDは、前記トランザクションを識別するために使用され、前記オブジェクトIDは、前記オブジェクトを識別するために使用され、変更情報は、前記オブジェクトのコンテンツに対応し、異なる変更情報を有する前記オブジェクトのコンテンツは異なっている、問合せモジュールと、
各参加者から前記問合せメッセージに対する応答メッセージを受信するように構成された受信モジュールであって、前記応答メッセージは、前記参加者が前記トランザクションIDを含まず前記オブジェクトIDを含むことを示す第5の情報を運搬し、前記第5の情報は、前記応答メッセージを送信する前記参加者内の前記オブジェクトの変更情報をさらに運搬する、受信モジュールと、
前記応答メッセージに応じて結論を引き出し、記結論を前記参加者に送信するように構成された判断モジュールであって、前記結論は、
前記参加者内の前記オブジェクトの前記変更情報がコーディネータ内の前記オブジェクトの変更情報と同じ場合、前記結論は、前記トランザクションを実行することであること、または、
前記参加者内の前記オブジェクトの前記変更情報が前記コーディネータ内の前記オブジェクトの変更情報とは異なる場合、前記結論は、前記トランザクションをアボートすることであること
の少なくとも一方を含む、判断モジュールと、
前記判断モジュールの前記結論を実行するように構成された実行モジュールと
を備えることを特徴とするトランザクション処理装置。
【請求項22】
前記コーディネータおよび前記参加者はすべてオブジェクトベースのストレージデバイスOSDであり、前記トランザクションは、すべての前記サブオブジェクトの読み取り、すべての前記サブオブジェクトの削除、またはすべての前記サブオブジェクトの書き込みであることを特徴とする請求項21に記載のトランザクション処理装置。
【請求項23】
前記コーディネータおよび前記参加者は、元のコーディネータに通信可能に接続されており、前記元のコーディネータはサブオブジェクトを有しておらず、前記受信モジュールは、
前記元のコーディネータによって送信された前記トランザクションID、前記オブジェクトID、前記オブジェクトの前記変更情報、および参加者のリストを受信するようにさらに構成されることを特徴とする請求項21または22に記載のトランザクション処理装置。
【請求項24】
前記オブジェクトの前記変更情報は、前記オブジェクトのバージョン番号であることを特徴とする請求項21乃至23のいずれか一項に記載のトランザクション処理装置。
【請求項25】
参加者に通信可能に接続されたコーディネータであって、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、前記サブオブジェクトのうちの1つは、前記コーディネータ内にあり、その他のサブオブジェクトは、異なる参加者内にあり、前記コーディネータは、プロセッサ、および前記プロセッサと通信するメモリを備え、前記メモリは、プログラム命令を記憶するように構成され、前記プロセッサは、前記プログラム命令を実行するように構成され、前記プログラム命令は、
問合せメッセージを各参加者に送信することであって、前記問合せメッセージは、トランザクションIDおよびオブジェクトIDを運搬し、前記トランザクションIDは、前記トランザクションを識別するために使用され、前記オブジェクトIDは、前記オブジェクトを識別するために使用され、変更情報は、前記オブジェクトのコンテンツに対応し、異なる変更情報を有する前記オブジェクトのコンテンツは異なっている、送信することと、
各参加者から前記問合せメッセージに対する応答メッセージを受信することであって、前記応答メッセージは、前記参加者が前記トランザクションIDを含まないが前記オブジェクトIDを含むことを示す第5の情報を運搬し、前記第5の情報は、前記応答メッセージを送信する前記参加者内の前記オブジェクトの変更情報をさらに運搬する、受信することと、
前記応答メッセージに応じて結論を引き出し、記結論を実行し、前記結論を前記参加者に送信することであって、前記結論は、
前記参加者内の前記オブジェクトの前記変更情報が前記コーディネータ内の前記オブジェクトの変更情報と同じ場合、前記結論は、前記トランザクションを実行することであること、または、
前記参加者内の前記オブジェクトの前記変更情報が前記コーディネータ内の前記オブジェクトの変更情報とは異なる場合、前記結論は、前記トランザクションをアボートすることであること
の少なくとも一方を含む、送信することと
を行うために使用されることを特徴とするコーディネータ。
【請求項26】
前記コーディネータおよび前記参加者はすべてオブジェクトベースのストレージデバイスOSDであり、前記トランザクションは、すべての前記サブオブジェクトの読み取り、すべての前記サブオブジェクトの削除、またはすべての前記サブオブジェクトの書き込みであることを特徴とする請求項25に記載のコーディネータ。
【請求項27】
前記プログラム命令は、元のコーディネータによって送信された前記トランザクションID、前記オブジェクトID、前記オブジェクトの前記変更情報、および参加者のリストを受信するためにさらに使用されることを特徴とする請求項25に記載のコーディネータ。
【請求項28】
前記オブジェクトの前記変更情報は、前記オブジェクトのバージョン番号であることを特徴とする請求項25に記載のコーディネータ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報技術の分野に関し、詳細にはトランザクション処理方法および装置に関する。
【背景技術】
【0003】
オブジェクトベースのストレージシステム(Object−Based Storage System)は、分散されたストレージシステムであり、複数のオブジェクトベースのストレージデバイスOSD(Object−based Storage Devices)によって形成される。OSDはネットワークを介して相互接続され、また、OSDはオブジェクトベースのストレージシステムにおいてノードと呼ばれることがある。オブジェクトベースのストレージシステムにおいて、オブジェクト(Object)は、最も基本的な記憶されるコンテンツ単位であり、オブジェクトは、データ、およびデータの属性情報を含む。データは、オブジェクトに記憶されたコンテンツを指し、たとえば、ビデオファイルまたは音楽ファイルなどであり、データの属性情報は、たとえば、ファイルのサイズまたはバージョン情報などである。
【0004】
記憶されたオブジェクトの信頼性のために、一般に、1つのオブジェクトがいくつかの異なるOSDに記憶される。このようにすると、OSDの一部が故障していても、オブジェクトの読み取り操作および書き込み操作が影響を受けず、それによりデータ信頼性を向上させる。多くのコピーによってバックアップされた後に同じオブジェクトが異なるノードに記憶される必要があるため、すなわち、オブジェクトが複数のOSDノードにわたって記憶されるので、これらのデータのバックアップはコピーとも呼ばれることがある。オブジェクトベースのストレージの整合性要求を保証するために、オブジェクトに対する書き込み操作がトランザクションによって保証される必要がある。トランザクションは、データ変更のための操作のグループとして理解され得る。操作のグループにおいて、データは、すべての操作が成功しない限り変更されない。これは、異なるOSDにおける同じオブジェクトのコピーが同じであることを保証し、それにより、コピーの一部が変更されるがその他のコピーが変更されないことを回避する。
【0005】
トランザクションは、一連の操作のセットであり、これらの操作は、しばしば、複数のノードに分散されたデータが整合性のある状態から別の整合性のある状態に変換されるように、複数のノードによって並列に実行され(分散されたオブジェクトベースのストレージシステムでは、これは、複数のノードにおける同じオブジェクトが同じバージョン番号を有することを意味する)、一連の操作を構成する操作のすべてが実行されるかまたはすべてが実行されず、それにより、ノードにおけるデータ状態の整合性を維持する。非ストレージ分野において、同様にトランザクションが必要とされる状況が存在する。
【0006】
既存の2相コミットメントプロトコル(Two−phase Commitment Protocol、2PC)は、分散されたトランザクションコミットメントの原子性を保証することができる。2PCプロトコルは、分散されたトランザクションのOSDをコーディネータ(Coordinator)として任命し、すべての他のOSDを参加者(Participants)として任命する。コーディネータのみが、トランザクションをコミットするまたは取り消す決定権を有し、トランザクションをコミットするまたは取り消す結論を出した後に、コーディネータは結論を参加者に送信する。結論がトランザクションをコミットすることである場合、コミット(Commit)メッセージが送信され、結論がトランザクションをアボートすることである場合、アボート(Abort)メッセージが送信される。各参加者は、コーディネータの結論を受信し、結論に従って参加者のローカルデータベースにおいて操作を実行し、参加者はまた、サブトランザクションを取り消すまたはコミットする意図を、コーディネータに提案することもある。
【0007】
参加者がコーディネータの結論を待っているときに、コーディネータが故障している場合、参加者はコーディネータの結論を長時間待つことになる。待機期間中に、各参加者のトランザクションが完了されることができず、占有されたリソースが解放されることができず、結果としてブロッキングをもたらす。ブロッキングを回避するために、従来技術は、参加者が他の参加者のトランザクション状態を問い合わせて、参加者がトランザクションを実行する必要があるかどうかを確認する、状態確認技術を提案している。しかしながら、この方法では、参加者間の相互作用プロセスが過剰であり、結果としてシステム性能の低下をもたらす。
【0008】
コーディネータが故障していない場合でも、参加者の情報を読み取ることによってトランザクション結論を如何に引き出すかも解決されるべき問題である。
【発明の概要】
【課題を解決するための手段】
【0009】
本発明は、トランザクション処理方法を提供し、この方法は、参加者の情報を読み取ることによってトランザクション結論を引き出すことができる。
【0010】
第1の態様によれば、本発明の実施形態は、コーディネータに適用されるトランザクション処理方法であって、コーディネータは、参加者に通信可能に接続され、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、サブオブジェクトのうちの1つは、コーディネータ内にあり、その他のサブオブジェクトは、異なる参加者内にあり、方法は、コーディネータによって、問合せメッセージを各参加者に送信するステップであって、問合せメッセージは、トランザクションID、オブジェクトID、およびオブジェクトの変更情報を運搬し、トランザクションIDは、トランザクションを識別するために使用され、オブジェクトIDは、オブジェクトを識別するために使用され、変更情報は、オブジェクトのコンテンツに対応し、異なる変更情報を有するオブジェクトのコンテンツは異なっている、ステップと、コーディネータによって、各参加者から問合せメッセージに対する応答メッセージを受信するステップと、コーディネータによって、応答メッセージに応じて結論を引き出し、コーディネータによって、結論を実行し、結論をすべての参加者に送信するステップであって、結論は、応答メッセージの任意の1つが第1の情報を運搬している場合、結論は、トランザクションを実行することであり、第1の情報は、参加者が、トランザクションIDを含まずオブジェクトIDを含み、参加者内のオブジェクトの変更情報が、コーディネータ内のオブジェクトの変更情報と同じであることを示すこと、または、応答メッセージの任意の1つが第2の情報を運搬している場合、結論は、トランザクションをアボートすることであり、第2の情報は、参加者が、トランザクションIDを含まずオブジェクトIDを含み、参加者内のオブジェクトの変更情報が、コーディネータ内のオブジェクトの変更情報とは異なることを示すことの少なくとも一方を含む、ステップとを含むことを特徴とするトランザクション処理方法を提供する。
【0011】
第1の態様の第1の実装様式では、結論は、すべての応答メッセージが第3の情報を運搬している場合、結論は、トランザクションを実行することであり、第3の情報は、参加者がトランザクションIDを含むことを示すことと、応答メッセージの任意の1つが第4の情報を運搬している場合、結論は、トランザクションを実行することであり、第4の情報は、参加者がトランザクションIDを含まず、参加者がオブジェクトIDを含まないことを示すこととの少なくとも一方をさらに含む。
【0012】
第2の態様によれば、本発明の実施形態は、参加者に通信可能に接続されたトランザクション処理装置であって、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、サブオブジェクトのうちの1つは、トランザクション処理装置内にあり、その他のサブオブジェクトは、異なる参加者内にあり、装置は、問合せメッセージを各参加者に送信するように構成された問合せモジュールであって、問合せメッセージは、トランザクションID、オブジェクトID、およびオブジェクトの変更情報を運搬し、トランザクションIDは、トランザクションを識別するために使用され、オブジェクトIDは、オブジェクトを識別するために使用され、変更情報は、オブジェクトのコンテンツに対応し、異なる変更情報を有するオブジェクトのコンテンツは異なっている、問合せモジュールと、各参加者から問合せメッセージに対する応答メッセージを受信するように構成された受信モジュールと、応答メッセージに応じて結論を引き出し、結論をすべての参加者に送信するように構成された判断モジュールであって、結論は、応答メッセージの任意の1つが第1の情報を運搬している場合、結論は、トランザクションを実行することであり、第1の情報は、参加者が、トランザクションIDを含みオブジェクトIDを含み、参加者内のオブジェクトの変更情報が、コーディネータ内のオブジェクトの変更情報と同じであることを示すこと、または、応答メッセージの任意の1つが第2の情報を運搬している場合、結論は、トランザクションをアボートすることであり、第2の情報は、参加者が、トランザクションIDを含みオブジェクトIDを含み、参加者内のオブジェクトの変更情報が、コーディネータ内のオブジェクトの変更情報とは異なることを示すことの少なくとも一方を含む、判断モジュールと、判断モジュールの結論を実行するように構成された実行モジュールとを備えることを特徴とするトランザクション処理装置を提供する。
【0013】
第2の態様の第1の実装様式では、結論は、すべての応答メッセージが第3の情報を運搬している場合、結論は、トランザクションを実行することであり、第3の情報は、参加者がトランザクションIDを含むことを示すことと、応答メッセージの任意の1つが第4の情報を運搬している場合、結論は、トランザクションを実行することであり、第4の情報は、参加者がトランザクションIDを含まず、参加者がオブジェクトIDを含まないことを示すこととの少なくとも一方をさらに含む。
【0014】
第3の態様によれば、本発明の実施形態は、コーディネータに適用されるトランザクション処理方法であって、コーディネータは、参加者に通信可能に接続され、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、サブオブジェクトのうちの1つは、コーディネータ内にあり、その他のサブオブジェクトは、異なる参加者内にあり、方法は、コーディネータによって、問合せメッセージを各参加者に送信するステップであって、問合せメッセージは、トランザクションIDおよびオブジェクトIDを運搬し、トランザクションIDは、トランザクションを識別するために使用され、オブジェクトIDは、オブジェクトを識別するために使用され、変更情報は、オブジェクトのコンテンツに対応し、異なる変更情報を有するオブジェクトのコンテンツは異なっている、ステップと、コーディネータによって、各参加者から問合せメッセージに対する応答メッセージを受信するステップであって、応答メッセージは、第5の情報を運搬し、第5の情報は、参加者が、トランザクションIDを含まないがオブジェクトIDを含むことを示し、第5の情報は、応答メッセージを送信する参加者内のオブジェクトの変更情報をさらに運搬する、ステップと、コーディネータによって、応答メッセージに応じて結論を引き出し、コーディネータによって、結論を実行し、結論をすべての参加者に送信するステップであって、結論は、参加者内のオブジェクトの変更情報がコーディネータ内のオブジェクトの変更情報と同じ場合、結論は、トランザクションを実行することであること、または、参加者内のオブジェクトの変更情報がコーディネータ内のオブジェクトの変更情報とは異なる場合、結論は、トランザクションをアボートすることであることの少なくとも一方を含む、ステップと、を含むことを特徴とするトランザクション処理方法を提供する。
【0015】
第3の態様の第1の実装様式では、結論は、すべての応答メッセージが第3の情報を運搬している場合、結論は、トランザクションを実行することであり、第3の情報は、参加者がトランザクションIDを含むことを示すことと、応答メッセージの任意の1つが第4の情報を運搬している場合、結論は、トランザクションを実行することであり、第4の情報は、参加者がトランザクションIDを含まず、参加者がオブジェクトIDを含まないことを示すこととの少なくとも一方をさらに含む。
【0016】
第4の態様によれば、本発明の実施形態は、参加者に通信可能に接続されたトランザクション処理装置であって、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、サブオブジェクトのうちの1つは、トランザクション処理装置内にあり、その他のサブオブジェクトは、異なる参加者内にあり、装置は、問合せメッセージを各参加者に送信するように構成された問合せモジュールであって、問合せメッセージは、トランザクションIDおよびオブジェクトIDを運搬し、トランザクションIDは、トランザクションを識別するために使用され、オブジェクトIDは、オブジェクトを識別するために使用される、問合せモジュールと、各参加者から問合せメッセージに対する応答メッセージを受信するように構成された受信モジュールであって、応答メッセージは、参加者がトランザクションIDを含まないがオブジェクトIDを含むことを示す第5の情報を運搬し、第5の情報は、応答メッセージを送信する参加者内のオブジェクトの変更情報をさらに運搬する、受信モジュールと、応答メッセージに応じて結論を引き出し、コーディネータによって結論を実行し、結論をすべての参加者に送信するように構成された判断モジュールであって、変更情報は、オブジェクトのコンテンツに対応し、異なる変更情報を有するオブジェクトのコンテンツは異なっており、結論は、参加者内のオブジェクトの変更情報がコーディネータ内のオブジェクトの変更情報と同じ場合、結論は、トランザクションを実行することであること、または、参加者内のオブジェクトの変更情報がコーディネータ内のオブジェクトの変更情報とは異なる場合、結論は、トランザクションをアボートすることであることの少なくとも一方を含む、判断モジュールと、判断モジュールの結論を実行するように構成された実行モジュールとを備えることを特徴とするトランザクション処理装置を提供する。
【0017】
第4の態様の第1の実装様式では、結論は、すべての応答メッセージが第3の情報を運搬している場合、結論は、トランザクションを実行することであり、第3の情報は、参加者がトランザクションIDを含むことを示すことと、応答メッセージの任意の1つが第4の情報を運搬している場合、結論は、トランザクションを実行することであり、第4の情報は、参加者がトランザクションIDを含まず、参加者がオブジェクトIDを含まないことを示すこととの少なくとも一方をさらに含む。
【0018】
上記の態様の実装様式において、オブジェクトの変更情報は、オブジェクトのバージョン番号であってよい。
【0019】
本発明の実施形態によって提供される方法によれば、参加者におけるオブジェクトの変更情報を検出することにより、トランザクション結論が引き出され、それにより、トランザクション処理の効率を向上させることが可能である。
【図面の簡単な説明】
【0020】
本発明または従来技術において技術的解決策をより明確に説明するために、実施形態または従来技術を説明するために必要とされる添付図面を以下で簡潔に紹介する。以下の説明において添付図面は本発明のいくつかの実施形態を示すに過ぎず、これらの添付図面からさらに他の図面が導き出されてもよい。
図1】本発明の実施形態によるトランザクション処理方法のフローチャートである。
図2】本発明の実施形態によるトランザクション処理方法のフローチャートである。
図3】本発明の実施形態によるトランザクション処理装置の概略図である。
図4】本発明の実施形態によるトランザクション処理方法のフローチャートである。
図5】本発明の実施形態によるコーディネータの概略構造図である。
【発明を実施するための形態】
【0021】
以下では、本発明の実施形態において添付図面を参照して本発明の技術的解決策を説明する。明らかに、説明される実施形態は、本発明の実施形態の全部でなく一部に過ぎない。本発明の実施形態に基づいて得られるすべての他の実施形態が、本発明の保護範囲内に入るものとする。
【0022】
トランザクションは、一連の操作のセットである。トランザクションは複数の操作を含むことができるが、含まれるすべての操作は分割できず、操作のすべてが実行されるかまたは全く実行されないかのいずれかである。N+M個のノード上の操作が、トランザクションとして機能し得る。1または複数のノードに対する操作が行われる場合、同じタイプの操作が他のノードに対しても実行される必要がある。
【0023】
トランザクションは、コーディネータと参加者によって一緒に実行される。コーディネータは、決定を行うことによって結論を生成し、参加者は、コーディネータの結論を実行し、参加者はまた、コーディネータのための決定の基礎を提供することもできる。
【0024】
2相コミットメントプロトコルでは、システムは、一般に2タイプのノードを含み、すなわち、一方のタイプは、コーディネータ(Coordinator)であり、一般に1つのトランザクションにおいて1つのコーディネータが存在し、他方のタイプは、参加者(Participants)であり、複数の参加者が存在し得る。各ノードは、先書きログ(Write−ahead Log)を記録し、先書きログを永続的に記憶することができ、ノードが故障している場合でも、ログが失われない。トランザクションネゴシエーションのための実行可能な方法のステップは、以下のようになる。(1)コーディネータは、操作要求を各参加者に送信し、操作要求は、トランザクションを実行することに同意するまたは同意しないことが可能である。操作要求は、参加者とネゴシエートするために使用され、参加者によって実行される必要はない。(2)コーディネータからの操作要求を受信した後、参加者は、応答メッセージを返し、応答メッセージは、コーディネータの操作要求に参加者が同意するかどうかを運搬する。たとえば、応答メッセージは、コーディネータの操作要求に同意する、またはコーディネータの操作要求を拒否することが可能であり、参加者は、コーディネータの決定を待つために待機段階(waiting phase)に入る。(3)コーディネータは、各参加者の応答メッセージを要約して決定を行い結論を引き出し、結論を各参加者に送信する。(4)結論を受信した後、各参加者は、結論を実行し、トランザクションによって占有されたリソースを解放する。
【0025】
トランザクションネゴシエーションおよび処理の上記プロセスにおいて、例外が発生することがある。たとえば、ステップ(4)で、コーディネータが故障して、したがって参加者の一部に送信される結論が成功裏に送信されないことがあり、または参加者が故障して、結論を受信しない、または別の理由により、参加者の一部が結論を受信しない。参加者の一部が結論を受信しないこれらの事例は、一般的にコーディネータ障害と呼ばれる。コーディネータ障害は、参加者の一部がトランザクションの結論を実行し、その他の参加者がトランザクションの結論を実行しないようにする。結論を受信しないこれらの参加者は、常に待機段階またはいわゆる準備された(Prepared)状態に留まり、トランザクションによって占有されたリソースは時間内に解放されることができない。この現象はブロッキングと呼ばれる。
【0026】
従来技術では、ブロッキングを回避するために、コーディネータの決定結論を受信した後、参加者は、トランザクションによって占有されたリソースを解放しない。前述のステップ(4)は、(5)および(6)に置き換えられ、すなわち、(5)結論を実行した後、参加者は、受信された結論をログ様式で記録する必要があり、メッセージを他の参加者に送信して、参加者が結論を受信したことを他の参加者に通知し、(6)特定の参加者がすべての他の参加者から結論を受信した後、例外が発生していないことが証明され、したがって、トランザクションによって占有されたリソースが解放されることができ、操作ログが再び記録される。
【0027】
従来技術はブロッキングの問題をある程度解決することができるが、例外が発生するときにシステムブロッキングを回避するために、例外が発生するかどうかに関わらず、ステップ(5)および(6)におけるネゴシエーションおよびログの記録などの操作が、トランザクションの実行ごとに実行され、それによりシステムリソースを消費する。
【0028】
理解を促進するために、本発明の実施形態では、例として、ストレージシステム、特に分散されたオブジェクトベースのストレージシステムが使用される。しかしながら、本発明は、分散されたストレージに限定されず、トランザクションが必要とされる別の技術分野にも適用可能である。ストレージ分野では、トランザクションは、データを書き込むこと、データを削除すること、またはデータを修正することであり得る。オブジェクトは、データの要素などトランザクション操作の対象である。データは、ファイル名、シリアル番号、パス、論理アドレス、または物理アドレスとして識別され得る。たとえば、「作成(create)」のトランザクションは、新しいデータを対象データに書き込むことができ、「削除(delete)」のトランザクションは、対象データを削除することができる。
【0029】
オブジェクトベースのストレージは、分散されたストレージのタイプであることに留意されたい。本発明の実施形態は、オブジェクトベースのストレージまたは他の分散されたストレージに適用されてよく、本発明の実施形態におけるオブジェクトは、本発明の実施形態をオブジェクトベースのストレージの分野に限定することは意図されていない。分散されたストレージにおいて、記憶されたデータは、オブジェクトと呼ばれ、たとえば、特定のタイプまたは特定のタイプの一部のファイル、テキスト、画像、データストリーム、およびコンピュータコードなどである。本発明の実施形態では、オブジェクトは、トランザクションによって操作され得るデータである。本発明の実施形態では、データは、複数のサブデータブロックに分割されてよく、各サブブロックは、1つのストレージノードに記憶される。ストレージノードは、物理的に分離される、または論理的に分離されることが可能である。たとえば、ストレージノードは、たとえば、ストレージクラスタ、ストレージサーバ、ハードディスク、ハードディスクパーティション、またはフォルダであり得る。
【0030】
本発明の実施形態では、オブジェクトのバージョン番号は、オブジェクトが変化したかどうかを識別することができ、オブジェクトのバージョン番号は、オブジェクトを形成する各サブオブジェクトで使用される。たとえば、オブジェクトが作成または修正された後、オブジェクトは新しいバージョン番号を有し、オブジェクトのサブオブジェクトのバージョン番号は対応して更新される。バージョン番号は、オブジェクトにおけるサブオブジェクトの整合性を識別することができる。
【0031】
別の実施形態では、バージョン番号の他に、オブジェクトが変化したかどうかを識別するために、他の情報、たとえば、オブジェクトの名前、オブジェクトによって占有されたストレージスペースのサイズ、オブジェクトの属性が使用されてよい。オブジェクトのコンテンツが変化したかどうかを記録することができる情報が、一般的にオブジェクトの変更情報と呼ばれる。変更情報は、オブジェクトのコンテンツに対応し、異なる変更情報を有するオブジェクトのコンテンツは異なっている。任意のサブオブジェクトが変化することは、オブジェクトのコンテンツ全体が変化することに相当し、対応してオブジェクトの変化情報全体が更新される必要がある。本発明の実施形態では、説明を容易にするため、オブジェクトのバージョン番号が、オブジェクトの変更情報を導入する例として使用される。
【0032】
データファイルオブジェクトは、同じ長さを有するN個のサービスデータブロックに分割され、欠けた部分は0で充填され得る。N個のデータブロックは、M個のチェックデータブロックを生成するように符号化され計算され、N+M個のデータブロックがN+M個の異なるノードに記憶され、ここで、NおよびMは両方とも自然数である。データの任意のM個の部分が故障している場合、残りのN個の部分のデータが、故障データを計算するために使用されてよく、このデータ回復技術は、消失符号(Erasure Code、EC)と呼ばれることがある。N+M個のデータブロックのセットは、オブジェクトと呼ばれることがあり、N+M個のデータブロックの任意の1つが、サブオブジェクトと呼ばれる。
【0033】
これらのN+M個のサブオブジェクトは相関し、サブオブジェクトの任意の1つが更新された場合、すべての残りのサブオブジェクトも更新される必要があり、それによりサブオブジェクトの整合性を維持する。N+M個のサブオブジェクトの整合性は、トランザクションによって保証されることができる。オブジェクトがN個のサブオブジェクトに分割される前に、オブジェクトにバージョン番号が割り当てられ、オブジェクトのバージョン番号は、オブジェクトにより生成されるN+M個のサブオブジェクト内に記録される。したがって、整合性は、オブジェクトのバージョン番号を使用して識別される。N+M個のサブオブジェクトが整合性のある場合、それらは、同じバージョン番号を有し、ノードの一部におけるデータのバージョン番号が他のノードにおけるデータのそれらとは異なる場合、それは、データが整合性のないことを意味する。
【0034】
異なるバージョン番号は多くの理由でもたらされる可能性があり、たとえば、ノードが期間にわたって故障し、故障期間中、ノードがサブオブジェクトの書き込みのいくつかの操作を抜かした場合、故障したノードにおけるサブオブジェクトは、書き込み操作が実行されたノードにおけるサブオブジェクトと整合性がなく、バージョン番号が異なる。分散されたストレージシステムからクライアントがこれらのサブオブジェクトを読み取ると、これらの整合性のないサブオブジェクトが発見されることができる。整合性のあるバージョンを有するN個のサブオブジェクトが使用されて、N個のサブオブジェクトと整合性のあるサブオブジェクトを回復するようにエラーチェック様式に従って整合性のないサブオブジェクトを回復することができる。
【0035】
本発明の実施形態によって提供される方法によれば、元のコーディネータが故障しているとき、新しいコーディネータが参加者から再選択される。新しいコーディネータが、他の参加者のオブジェクトの変更情報を検出することによって、トランザクション結論を引き出すことができる。しかしながら、従来技術では、コーディネータが故障しているときにブロッキングに対処するために、コーディネータが故障しているかどうかに関わらず、トランザクション結論を引き出すために同じ手順が採用される。この手順は、トランザクションが故障していないときに本出願で採用されるトランザクション処理技術よりも複雑である。したがって、本出願は全体的効率性がより高く、(たとえば、コーディネータが故障しているときの)例外処理機構が提供され、それにより、例外が発生しないときのトランザクション処理の手順を単純化する。
【0036】
本出願の解決策は、元のコーディネータが故障していない場合であっても、トランザクション結論がネゴシエーションによって引き出されることができる新しいネゴシエーション機構も提供する。
【0037】
実施形態1
本発明の実施形態は、コーディネータに適用されるトランザクション処理方法であって、コーディネータは、参加者に通信可能に接続され、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、サブオブジェクトのうちの1つは、コーディネータ内にあり、その他のサブオブジェクトは、異なる参加者内にあり、方法は、コーディネータによって、問合せメッセージを各参加者に送信するステップであって、問合せメッセージは、トランザクションID、オブジェクトID、およびオブジェクトのバージョン番号を運搬し、トランザクションIDは、トランザクションを識別するために使用され、オブジェクトIDは、オブジェクトを識別するために使用される、ステップと、コーディネータによって、各参加者から問合せメッセージに対する応答メッセージを受信するステップと、コーディネータによって、応答メッセージに応じて結論を引き出し、コーディネータによって、結論を実行し、結論をすべての参加者に送信するステップとを含むトランザクション処理方法を提供する。
【0038】
結論は、応答メッセージの任意の1つが第1の情報を運搬している場合、結論は、トランザクションを実行することであり、第1の情報は、参加者が、トランザクションIDを含まずオブジェクトIDを含み、参加者内のオブジェクトのバージョン番号が、コーディネータ内のオブジェクトのバージョン番号と同じであることを示すこと、または、応答メッセージの任意の1つが第2の情報を運搬している場合、結論は、トランザクションをアボートすることであり、第2の情報は、参加者が、トランザクションIDを含まずオブジェクトIDを含み、参加者内のオブジェクトのバージョン番号が、コーディネータ内のオブジェクトのバージョン番号とは異なることを示すことの少なくとも一方を含む。
【0039】
結論は、すべての応答メッセージが第3の情報を運搬している場合、結論は、トランザクションを実行することであり、第3の情報は、参加者がトランザクションIDを含むことを示すことと、応答メッセージの任意の1つが第4の情報を運搬している場合、結論は、トランザクションを実行することであり、第4の情報は、参加者がトランザクションIDを含まず、参加者がオブジェクトIDを含まないことを示すこととの少なくとも一方をさらに含む。
【0040】
コーディネータは、第1の情報および第2の情報が存在するかどうかを同時に検出し、検出結果に応じて結論を引き出す機能を有することができる。あるいは、コーディネータは、第1の情報、第2の情報、第3の情報、および第4の情報が存在するかどうかを同時に検出し、検出結果に応じて結論を引き出す機能を有することができる。あるいは、コーディネータは、第1の情報、第2の情報、第3の情報、および第4の情報のうちの任意の1つが存在するかどうかのみを検出し、検出結果に応じて結論を引き出す機能を有することができる。
【0041】
本発明の実施形態によるトランザクション実行方法の実施形態の特定の実装ステップを示す図1を参照する。方法は、コーディネータおよび複数の参加者により形成されたトランザクション処理システムに適用され、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成される。コーディネータは、サブオブジェクトを記憶しないことがあり、コーディネータは、トランザクションに対する調整を行い、サブオブジェクトは、別個に異なる参加者内にある。たとえば、参加者はOSDであってよい。トランザクション実行は、以下のステップを含むことができる。
【0042】
ステップ11:コーディネータは、操作要求を各参加者に送信し、操作要求は、トランザクションID、操作タイプ、およびコーディネータ内に記録されたオブジェクトバージョン番号Version_Tを運搬している。トランザクションの操作タイプがデータを書き込むことである場合、操作要求は、書き込まれるべきデータを運搬することもできる。
【0043】
操作要求は、オブジェクトを操作することに対して準備するように参加者に指示することができる。トランザクションIDは、トランザクションを識別し、識別されたトランザクションは、トランザクションによって操作されるオブジェクトに関連する。
【0044】
たとえば、書き込み(Write)コマンドがN+M個の参加者に送信され、書き込みコマンドは、トランザクションID、操作タイプ、およびコーディネータ内に記録されたオブジェクトバージョン番号Version_Tを運搬しており、操作タイプは、たとえば、書き込みまたは削除である。操作タイプが書き込みであるとき、書き込みコマンドは、各サブオブジェクト内に書き込まれるように準備された書き込まれるべきデータを運搬することもできる。
【0045】
ステップ12:コーディネータは、準備(Prepare)コマンドを各参加者に送信し、準備コマンドは、トランザクションID、オブジェクトID、コーディネータ内に記録されたオブジェクトバージョン番号、および参加者のリストを運搬している。
【0046】
オブジェクトIDは、トランザクションIDで識別されたトランザクションによって操作されるオブジェクトのIDであり、オブジェクトバージョン番号は、オブジェクトIDで識別されたオブジェクトのバージョン番号であり、参加者のリストは、すべての参加者を記録する。
【0047】
ステップ13:準備(Prepare)コマンドをコーディネータから受信した後、参加者は、参加者のリストを記憶し、トランザクションのためのリソースを割り当てる。リソースを割り当てた後、参加者は、準備完了(Prepared)メッセージをコーディネータに送信し、参加者は、準備された段階に入る。別の実施形態では、参加者がトランザクションIDを発見しない場合、または参加者がトランザクションを実行する条件を満たさない場合、参加者は、コーディネータに通知するためにメッセージを送信する。
【0048】
ステップ14:コーディネータは、決定を行い、決定から引き出された結論を各参加者に送信する。たとえば、すべての参加者が準備完了メッセージをフィードバックすると、決定結論は、トランザクションを実行することであり、結論は、各参加者に送信される。結論がトランザクションを実行することであるとき、結論は、コミットメッセージを使用することにより示され得る。別の場合、結論は、トランザクションをアボートすることであり得る。
【0049】
ステップ15:決定者の結論を受信している参加者は結論を実行する。その場合、参加者は、トランザクションによって占有されたリソースを解放する。
【0050】
従来技術における無ブロッキングトランザクション処理方法は、ステップ11からステップ14でそれとは異なる。たとえば、ステップ(1)において、このトランザクションのオブジェクトID、操作タイプ、およびバージョン番号Version_Tのいずれも送信されない。
【0051】
本発明の実施形態によれば、ノード間の情報交換が減少され、記録される必要があるログが軽減される。従来技術と比較されると、より少ないシステムリソースが占有され、トランザクションを処理する時間がより短い。
【0052】
以下では、コーディネータ障害は、例外が発生したときのトランザクション処理実施形態を導入するための例として使用される。コーディネータが故障した後、新しいコーディネータが参加者から選択されるが、よって、障害コーディネータと新しく選択されたコーディネータとを区別するために、特に指定されない限り、ステップ21からステップ29および別の関連する実施形態において、故障したコーディネータは、元のコーディネータと呼ばれ、元のコーディネータは、障害の前に正常に動作することが可能であり、新しく選択されたコーディネータは、コーディネータと呼ばれることに留意されたい。すなわち、ステップ11からステップ15におけるコーディネータは、ステップ21からステップ29ならびにステップ37およびステップ38では、元のコーディネータと呼ばれる。
【0053】
実施形態2
本発明の実施形態では、コーディネータが故障したとき、データ整合性は、参加者の間でトランザクション状態および現在のバージョン番号を問い合わせることによって保証される。本発明の実施形態では、バージョンの更新によって、バージョン番号は、昇順ルールを採用してもよく、または降順ルールを採用してもよい。別の実施形態では、バージョン番号が一意である限り、文字または他の非数値がバージョン番号として使用されてよく、参加者およびコーディネータは、バージョンの更新によるバージョン番号の変更ルールについて同意する。導入を容易にするために、バージョン番号の値がバージョンの更新により増大することが例として以下で使用される。書き込みの各操作はオブジェクトバージョンの増大につながり、新しいバージョンのコンテンツが、古いバージョンのコンテンツの代わりとなる。新しいバージョンのサブオブジェクト、およびその古いバージョンのサブオブジェクトが、同じOSDに書き込まれることができ、古いバージョンのサブオブジェクトが上書きされる。トランザクション操作は、オブジェクトのすべてのサブオブジェクトに対して操作されることができ、これらのサブオブジェクトは、異なるOSDに分散される。OSDは、コントローラおよびストレージ媒体を含むことができ、コントローラは、管理のために構成され、ストレージ媒体は、データを記憶するために構成され、たとえば、ハードディスク(Hard Disk)、ソリッドステートディスク(SSD)、磁気テープ(Magnetic Tap)などである。OSDは、ストレージサーバまたはパーソナルコンピュータであってもよい。
【0054】
ステップ21:分散されたストレージシステムにおける元のコーディネータが故障した後、参加者から新しいコーディネータを選択する。ステップ21は、ステップ13またはステップ14の後に行われ、たとえば、ステップ14が行われた後、予め設定された時間内に参加者がコーディネータから結論を受信しない場合に、ステップ21が行われる。ステップ21は、任意選択のステップである。
【0055】
新しいコーディネータは選択によって生成されることができ、多くの具体的な選択方法があってよく、たとえば、参加者がコーディネータとして直接任命されてもよく、または最小数を有する参加者がコーディネータとして選択されてもよく、または最良の性能を有する参加者がコーディネータとして選択されてもよい。選択されたコーディネータはサブオブジェクトを記憶し、したがって、コーディネータが参加者の機能の一部を有することに留意されたい。特に指定されない限り、以降のステップで言及されるコーディネータは、新しく選択されたコーディネータを指す。
【0056】
本発明の実施形態では、参加者が参加者のリストを記憶し、参加者のリストに記録された参加者から、コーディネータとして参加者が選択され得る。参加者のリストは、OSDを記録し、そこにオブジェクトのすべてのサブオブジェクトが配置されている。このステップで、新しいコーディネータはN+M個の参加者から選択される。
【0057】
本発明の実施形態では、コーディネータ障害は、コーディネータにより送信された結論を参加者が受信しないことを示す一般参照の類である。たとえば、それが、コーディネータが正常に動作できないこと、コーディネータと参加者との間の通信が中断されること、または参加者が故障していることを指す可能性がある。障害理由は、ソフトウェア障害またはハードウェア障害であり得る。別の実施形態では、物理障害またはソフトウェア障害が発生することがないが、管理者命令が使用されて、新しいコーディネータを選択する。
【0058】
ステップ22:コーディネータは、問合せメッセージをシステム内の参加者に送信し、問合せメッセージは、問い合わされる必要があるトランザクションの、トランザクションID、オブジェクトID、オブジェクトの対象バージョン番号Version_Tを記録している。
【0059】
トランザクションIDは、このトランザクションの操作を識別するために使用される。異なるトランザクションは、異なるトランザクションIDを有し、同じトランザクションIDを有するすべての操作は、同じトランザクションの操作に属する。本発明の実施形態では、これらの操作はN+M個のOSDによって別個に実行される。オブジェクトIDは、トランザクションIDによって操作されるオブジェクトを識別するために使用され、たとえば、オブジェクトのファイル名がオブジェクトIDとして使用される。オブジェクトの対象バージョン番号は、オブジェクトIDによって識別されたオブジェクトの対象バージョン番号である。トランザクション結論が、トランザクションを実行することである場合、参加者およびコーディネータに記憶されたサブオブジェクトのバージョンすべてが対象バージョン番号に変化し、すなわち言い換えれば、オブジェクトのバージョンが対象バージョン番号に変化する。ファイル名以外に、他の様式がオブジェクトIDを識別するために使用されてもよい。ストレージシステムは、この識別子を記録するために2キロバイトのデータを使用し得る。問合せメッセージの受信者は、参加者のリスト内でコーディネータを除くすべての参加者である。
【0060】
問合せメッセージを受信した後、参加者は、それが同じトランザクションIDおよび同じオブジェクトIDを有するトランザクションを持っているかどうかを検索することができ、参加者が同じトランザクションIDおよび同じオブジェクトIDを有するトランザクションを持っている場合、参加者はさらに、参加者のサブオブジェクトの現在のバージョン番号が対象バージョン番号と同じであるかどうかを決定し、バージョンの整合性に従ってトランザクション結論を推論する。
【0061】
対象バージョン番号は、ステップ11のように元のコーディネータから来ることが可能である。
【0062】
ステップ23:問合せメッセージを受信した参加者は、問合せメッセージ内のトランザクションIDに基づいて、同じトランザクションがローカルに存在するかどうかを決定する。特定の決定様式では、同じトランザクションIDがローカルトランザクションIDに存在するかどうかを検索する。はいの場合、ステップ24が行われ、そうでない場合、ステップ25が行われる。
【0063】
ステップ24:問合せメッセージを受信した参加者は、「同じトランザクションが存在する」情報を運搬している応答メッセージを、コーディネータへ返す。この実施形態では、応答メッセージで運搬される情報は、第3の情報と呼ばれる。
【0064】
応答メッセージは、参加者がローカルで同じトランザクションIDを見つけた後に送信される。参加者がローカルで同じトランザクションIDを発見しない場合、応答メッセージは送信されない。応答メッセージは、参加者が問合せメッセージを受信し成功裏に応答することを、判断者に知らせることができる。応答メッセージはまた、参加者が判断結果を知らず判断を待っている段階にあることを、判断者に知らせることもできる。
【0065】
ステップ25:問合せメッセージを受信した参加者は、オブジェクトがローカルに存在するかどうかを検索する、すなわち、問合せメッセージ内のオブジェクトIDと同じオブジェクトIDがすべてのローカルオブジェクトID中に存在するかどうかを決定する。はいの場合、ステップ27が行われ、そうでない場合、ステップ26が行われる。
【0066】
ステップ26:問合せメッセージを受信した参加者は、応答メッセージをコーディネータに返して、トランザクションもオブジェクトもローカルに存在しないことをコーディネータに通知し、この情報は、「オブジェクトが存在しない」または「トランザクションもオブジェクトも存在しない」を使用することで示されてよく、この情報は、第4の情報と呼ばれる。
【0067】
ステップ27:問合せメッセージを受信した参加者は、オブジェクトIDによって識別されたオブジェクトのバージョン番号Version_Cを読み取り、Version_CとVersion_Tを比較し、比較結果を使用することによって問合せメッセージに対する応答メッセージをコーディネータにフィードバックする。
【0068】
より後のバージョンがより大きいバージョン番号を必要とすることが、例として使用される。(1)Version_C>Version_Tである場合、「参加者内のオブジェクトのバージョン番号が対象バージョン番号よりも後である」情報が、コーディネータに返される情報で運搬され、このメッセージは、以下では略して「バージョンがより後である」メッセージと呼ばれる。(2)Version_C=Version_Tである場合、「参加者内のオブジェクトのバージョン番号が対象バージョン番号と同じである」情報が、コーディネータに返される情報で運搬され、このメッセージは、以下では「バージョンが同じである」によって示される。(3)Version_C<Version_Tである場合、「参加者内のオブジェクトのバージョン番号が対象バージョン番号よりも古い」情報が、コーディネータに返される情報で運搬され、このメッセージは、「バージョンがより古い」によって示され得る。
【0069】
別の実施形態では、以下のステップにおいて「バージョンがより後である」および「バージョンがより古い」の処理様式が同じであるので、これら2つの場合は、メッセージ「バージョンが異なる」をフィードバックするように組み合わされてよい。すなわち、このステップでは、Version_CとVersion_Tの番号を比較することを必要としなくてよく、バージョンが同じであるかどうか比較することのみを必要とする。返される応答メッセージは、「バージョンが同じ」または「バージョンが異なる」である。
【0070】
すなわち、このステップで参加者によって送信される応答メッセージは、第1の情報または第2の情報を運搬することができる。第1の情報は、「バージョンが同じ」情報であり、この情報のコンテンツは「Equal」であってもよい。第1の情報は、トランザクションID決定、オブジェクトID決定、およびバージョン番号決定の後に、参加者によって取得され得る。第1の情報は、参加者が、トランザクションIDを含まずオブジェクトIDを含み、参加者内のオブジェクトのバージョン番号が、対象バージョン番号と同じであることを示すことができる。第2の情報は、「バージョンが異なる」情報であり、この情報のコンテンツは「Unequal」であってもよい。第2の情報は、トランザクションID決定、オブジェクトID決定、およびバージョン番号決定の後に、参加者によって取得され得る。第2の情報は、参加者が、トランザクションIDを含まずオブジェクトIDを含み、参加者内のオブジェクトのバージョン番号が、対象バージョン番号とは異なることを示すことができる。
【0071】
ステップ28:参加者によって送信された、第1の情報、第2の情報、第3の情報、および第4の情報のうちの1つを運搬している応答メッセージを受信した後、コーディネータは、応答メッセージのコンテンツに応じて結論を引き出す。結論は、コーディネータおよび参加者によって実行される必要がある。コーディネータは、結論を実行し、結論をシステム内の参加者に送信し、コーディネータ上でトランザクションによって占有されたリソースを解放する。コーディネータと参加者が共に結論を実行することが、トランザクション整合性を保証することができる。
【0072】
結論は、トランザクションをアボートすること、またはトランザクションを実行することである。結論がトランザクションをアボートすることである場合、アボートメッセージが送信され、結論がトランザクションを実行することである場合、コミットメッセージが送信される。結論がトランザクションをアボートすることである場合、実行様式は、トランザクションをアボートすることである。結論がトランザクションを実行することである場合、参加者は、参加者内のサブオブジェクトに対してトランザクションの一連の操作を実行する。
【0073】
いくつかの実施形態では、参加者は、トランザクションID、オブジェクトID、およびバージョン番号を別個に決定し、したがって、第1の情報、第2の情報、第3の情報、および第4の情報のうちの任意の1つが送信され得ることに留意されたい。しかしながら、別の実施形態では、参加者は、1つのアイテムのみを検出する、たとえば、第1の情報が存在するかどうかのみを検出し、したがって、コーディネータに返される応答メッセージは、第2の情報、第3の情報、または第4の情報を除く第1の情報であり、これに対応し、コーディネータは、第2の情報、第3の情報、または第4の情報に対するトランザクション結論を生成しない。別の実施形態では、第1の情報と第2の情報も検出され得る。
【0074】
表1は、コーディネータが、参加者によりフィードバックされた応答メッセージを受信した後に、応答メッセージで運搬された情報に応じてどのように判断して結論を引き出すかを示しており、その結論は、トランザクションをアボートすること、またはトランザクションを実行することである。トランザクションをアボートすることは、アボートコマンドによって示されることができ、トランザクションを実行することは、コミットコマンドによって示されることができる。判断をするとき、コーディネータは、トランザクションの操作タイプも考慮することができ、操作タイプは、作成、修正(modify)、および削除を含むことができ、作成と修正の両方が、書き込み(Write)に属する。操作タイプは、元のコーディネータから来ることができ、コーディネータおよび参加者に記憶され、たとえば、それは、ステップ11でコーディネータおよび参加者に送信される。コーディネータによって参加者へ送信された問合せメッセージは、トランザクションの操作タイプも運搬することができる。
【0075】
操作タイプが作成または修正であるトランザクションでは、以下のルールのうちの1または複数が使用可能である。(a)任意の参加者が、「バージョンが同じ」情報、すなわち第1の情報を返した場合、それは、メッセージを返した参加者がトランザクションを実行したことを示す。結論は、トランザクションが「一緒に進み一緒に戻る」原理に従って、トランザクションを実行することである。(b)任意の参加者が、「バージョンが異なる」情報、すなわち第2の情報を返した場合、それは、参加者がアボートアクションを行ったことを示す。結論は、「一緒に進み一緒に戻る」原理に従って、トランザクションをアボートすることである。(c)すべての参加者が、トランザクションが存在するという情報、すなわち第3の情報を返した場合、それは、コーディネータがトランザクションの決定結果を提供しないことを示す。この場合、すべての参加者が準備された状態にあり、参加者がトランザクションを実行していないが、参加者は、トランザクションを実行することに対して準備していて、トランザクションが正常に実行されることが可能な状態にある。したがって、結論は、トランザクションを実行することである。(d)任意の参加者が、「トランザクションもオブジェクトも存在しない」情報、すなわち第4の情報を返した場合、結論は、トランザクションをアボートすることである。
【0076】
操作タイプが削除であるトランザクションでは、以下の結論のうちの1または複数が使用可能である。(a)任意の参加者が、「バージョンが異なる」情報、すなわち第2の情報を返した場合、それは、参加者がアボートアクションを実行したことを示す。結論は、トランザクションをアボートすることである。(b)すべての参加者が、トランザクションが存在するという情報、すなわち第3の情報を返した場合、それは、参加者が削除操作を実行したこと、およびコーディネータがトランザクションの決定結果を提供しないことを示す。この場合、すべての参加者が準備された状態にあり、参加者がトランザクションを実行していないが、参加者は、トランザクションを実行することに対して準備している。したがって、結論は、トランザクションを実行することである。(c)任意の参加者が、「トランザクションもオブジェクトも存在しない」情報、すなわち第4の情報を返した場合、結論は、トランザクションを実行することである。操作タイプが削除であるとき、参加者は第1の情報をフィードバックしないが、その理由は、バージョンが同じ場合、オブジェクトおよびトランザクションが削除され、参加者は、オブジェクトIDまたはトランザクションIDを見つけることができず、したがって、実際に返される情報は、トランザクションもオブジェクトも存在しないという情報、すなわち第4の情報であるからである。
【0077】
操作が異なるときに、ある種の情報に従って同じ結論が引き出される場合があることに留意されたい。この操作情報の場合、操作タイプは決定される必要がないが、応答メッセージで運搬された情報に従って結論が直接引き出される。たとえば、任意の参加者が「バージョンが異なる」情報を運搬する応答メッセージを返す限り、トランザクション結論は、アボートと決定されることができる。アボート結論を引き出すためにトランザクションの操作タイプを知る必要はない。加えて、任意の参加者が「バージョンが同じ」情報を返す場合、操作タイプを決定する必要がなく、コミット結論が引き出されることができる。
【0078】
コーディネータによって引き出される結論の例として、表1を参照されたい。
【0079】
【表1】
【0080】
加えて、この実施形態では、問合せメッセージが、3つのタイプのコンテンツ、すなわち、トランザクションID、オブジェクトID、および対象バージョン番号を運搬することに留意されたい。決定を複数回行うことなく結論の一部が引き出されることができるので、たとえば、すべての参加者によって返された応答メッセージが「トランザクションが存在する」情報を運搬しているとき、それは、トランザクションを実行する結論を引き出すために十分である。さらに、参加者内にトランザクションIDが存在するかどうかを決定する、またはバージョン番号が同じかどうかを決定する必要がない。同様に、任意の参加者によって返された応答メッセージが「トランザクションが存在するがオブジェクトが存在しない」情報を運搬している場合、すべての参加者は、参加者のオブジェクトバージョンがコーディネータによって提供されたオブジェクト対象バージョンと同じかどうかをさらに決定する必要がない。したがって、問合せメッセージを参加者に送信するとき、コーディネータは、トランザクションIDのみを送信してもよく、またはトランザクションIDおよびオブジェクトIDを送信してもよく、またはトランザクションID、オブジェクトID、およびオブジェクトの対象バージョン番号を送信してもよい。
【0081】
加えて、問合せメッセージは、異なる段階で送信され得る。すなわち、最初に、コーディネータはトランザクションIDを参加者に送信し、受信された応答メッセージが結論を引き出すために不十分なときに、コーディネータはオブジェクトIDを参加者に送信し、オブジェクトIDの応答メッセージが結論を引き出すためにやはり不十分なときに、コーディネータは続いてバージョン番号情報を参加者に送信する。これらの送信方法は、問合せメッセージのデータ量を低減することができる。
【0082】
現在のコーディネータは選択によって生成され、選択の前に、コーディネータは参加者の役割もある。したがって、コーディネータは参加者の責務も有し、参加者によって実行されるべく結論を参加者に送信することの他に、コーディネータは、参加者のように結論を実行する必要もある。この実施形態では、結論がトランザクションを実行することである場合、コーディネータは、トランザクションの一連の操作、たとえば、コーディネータに記憶されたサブオブジェクトに対する削除操作に必要とされる一連の操作またはデータ書き込み操作のための一連の操作を実行する必要がある。実行様式は、OSDのコントローラが、ストレージ媒体上で操作を行う命令、たとえば、ストレージ媒体上でデータを削除する命令を生成することであり得る。ストレージ媒体上で操作を行う命令が生成された後、ログが記録されることができ、このログはコミットされることができる。操作が完了されると、すなわち、コントローラが操作を完了すると、ログが記録されることができ、このログがクリアされることができる。次いで、トランザクションによって占有されたストレージリソースなどのリソースが解放される。コマンドを実行するプロセスを開始することは、トランザクションをコミットすることと呼ばれることがある。
【0083】
ステップ29:コーディネータの結論を受信した後、参加者は結論を実行する。結論が実行された後、トランザクションによって占有されたリソースが解放され得る。コーディネータに関して、ステップ29は任意選択のステップである。
【0084】
結論がトランザクションを実行することである場合、参加者は、トランザクションの一連の操作を実行する、たとえば、参加者に記憶されたサブオブジェクトに対する削除操作またはデータ書き込み操作を実行する。具体的には、結論がトランザクションを実行することである場合、実行様式は、OSDのコントローラが、ストレージ媒体上で操作を行う命令、たとえば、ストレージ媒体上でデータを削除する命令を生成することであり得る。ストレージ媒体上で操作を行う命令が生成された後、ログが記録されることができ、このログはコミットされることができる。トランザクションが完了されると、すなわち、コントローラが操作を完了すると、ログが記録されることができ、このログがクリアされることができる。次いで、トランザクションによって占有されたストレージリソースなどのリソースが解放される。
【0085】
参加者によって受信される結論は、コミットまたはアボートであり得る。結論を受信した後、参加者は、結論を受信したという確認応答メッセージをコーディネータへ送信する必要がなく、また結論が実行されたという確認応答メッセージを送信しなくてよい。
【0086】
ステップ21からステップ29におけるトランザクション処理方法は独立しており、完結的なトランザクション処理方法である。ステップ21からステップ29は、ステップ13もしくはステップ14が実行された後に実行されてよく、または別のシナリオに適用されてもよい。たとえば、元のコーディネータが故障していないが、最初から元のコーディネータが存在せず、単にいくつかの参加者により形成されたトランザクション処理システムが、ネゴシエーションによってトランザクション処理を行う。そのような実施形態では、ステップ21が含まれなくてよい。
【0087】
実施形態2の方法では、ステップの一部がコーディネータによって実行され、その他のステップが参加者によって実行される。ステップ23からステップ28は、全体として3つのタイプの情報、すなわちトランザクションID,オブジェクトID、およびバージョン番号の比較に関係し、トランザクション結論が比較結果に応じて引き出されることができる。このプロセスはまた、以下の4つの結論を含むことができる。4つの結論は、並列的であり、相互依存していない。したがって、本発明の実施形態が4つの結論の少なくとも1つを実装するとき、それは完結した解決策である。
【0088】
(1)応答メッセージの任意の1つが第1の情報を運搬している場合、結論は、トランザクションを実行することであり、第1の情報は、第1の情報を送信した参加者が、受信されたトランザクションIDを含まず、受信されたオブジェクトIDを含み、オブジェクトの受信された変更情報が、それ自体のオブジェクトの変更情報と同じであることを示す。
【0089】
(2)応答メッセージの任意の1つが第2の情報を運搬している場合、結論は、トランザクションをアボートすることであり、第2の情報は、第2の情報を送信した参加者が、トランザクションIDを含まずオブジェクトIDを含み、オブジェクトの受信された変更情報が、それ自体のオブジェクトの変更情報とは異なることを示す。
【0090】
(3)参加者によって返されたすべての応答メッセージが第3の情報を運搬している場合、トランザクション結論は、トランザクションを実行することであり、第3の情報は、第3の情報を送信した参加者が、受信されたトランザクションIDを含むことを示す。
【0091】
(4)参加者によって返された応答メッセージのいずれかが第4の情報を運搬している場合、作成または修正の操作に関して、トランザクション結論は、トランザクションの実行をキャンセルすることであり、削除の操作に関して、トランザクション結論は、トランザクションを実行することである。第4の情報は、第4の情報を送信した参加者が、受信されたトランザクションIDを含まず、受信されたオブジェクトIDを含まないことを示す。
【0092】
実施形態3
図3に示されるように、本発明の別の実施形態は、実施形態2の方法を適用することができるトランザクション処理装置31をさらに提供する。トランザクション処理装置31は、参加者32に通信可能に接続され、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、サブオブジェクトのうちの1つは、トランザクション処理装置内にあり、他のサブオブジェクトは、異なる参加者内にある。トランザクション処理装置31は、問合せモジュール311、受信モジュール312、判断モジュール313、および実行モジュール314を含む。
【0093】
問合せモジュール311は、問合せメッセージを各参加者32に送信するように構成され、問合せメッセージは、トランザクションID、オブジェクトID、およびオブジェクトのバージョン番号を運搬し、トランザクションIDは、トランザクションを識別するために使用され、オブジェクトIDは、オブジェクトを識別するために使用される。
【0094】
受信モジュール312は、各参加者から問合せメッセージに対する応答メッセージを受信するように構成される。
【0095】
判断モジュール313は、応答メッセージに応じて結論を引き出し、結論をすべての参加者に送信するように構成され、結論は、下記の少なくとも1つを含む。
【0096】
(1)応答メッセージの任意の1つが第1の情報を運搬している場合、結論は、トランザクションを実行することであり、第1の情報は、第1の情報を送信した参加者が、受信されたトランザクションIDを含まず、受信されたオブジェクトIDを含み、オブジェクトの受信されたバージョン番号が、それ自体のオブジェクトのバージョン番号と同じであることを示す。
【0097】
(2)応答メッセージの任意の1つが第2の情報を運搬している場合、結論は、トランザクションをアボートすることであり、第2の情報は、第2の情報を送信した参加者が、トランザクションIDを含まずオブジェクトIDを含み、オブジェクトの受信されたバージョン番号が、それ自体のオブジェクトのバージョン番号とは異なることを示す。
【0098】
(3)参加者によって返されたすべての応答メッセージが第3の情報を運搬している場合、トランザクション結論は、トランザクションを実行することであり、第3の情報は、第3の情報を送信した参加者が、受信されたトランザクションIDを含むことを示す。
【0099】
(4)参加者によって返された応答メッセージのいずれかが第4の情報を運搬している場合、作成または修正の操作に関して、トランザクション結論は、トランザクションの実行をキャンセルすることであり、削除の操作に関して、トランザクション結論は、トランザクションを実行することである。第4の情報は、第4の情報を送信した参加者が、受信されたトランザクションIDを含まず、受信されたオブジェクトIDを含まないことを示す。
【0100】
実行モジュール314は、判断モジュール313の結論を実行し、結論をすべての参加者32に送信するように構成される。
【0101】
実行モジュール314の結論を受信した後、参加者32は、結論を実行することができる。
【0102】
本発明の実施形態では、コーディネータ31および参加者32はすべてオブジェクトベースのストレージデバイスOSDであり、トランザクションは、すべてのサブオブジェクトの読み取り、すべてのサブオブジェクトの削除、またはすべてのサブオブジェクトの書き込みである。
【0103】
実施形態4
図4に示されるように、トランザクション処理方法の別の実装様式が提供されることに留意されたい。実装様式は、実施形態2に開示された実装様式と同様であるが、次のような違いの1つがある。コーディネータは、Version_CとVersion_Tが同じであるかどうか比較することができる。
【0104】
この実装様式では、ステップ22でコーディネータによって送信された問合せメッセージは、オブジェクトの現在のバージョン番号Version_Tを含むことがなく、したがって、この実施形態では、参加者によって送信された応答メッセージは、第1の情報または第2の情報に代えて第3の情報または第4の情報を運搬することができる。
【0105】
これに対応して、ステップ25で決定された結果がはいの後に、ステップ47が行われる。問合せメッセージを受信した参加者は、オブジェクトIDによって識別されたオブジェクトのバージョン番号Version_Cを読み取り、Version_Cをコーディネータに送信する。参加者は、バージョンが同じであるかどうかの比較を行わず、バージョンが同じであるかどうかに関する応答情報をコーディネータに送信しない。
【0106】
ステップ47で、参加者は、第5の情報を運搬する応答メッセージを送信することができ、第5の情報は、応答メッセージを送信する参加者内のオブジェクトのバージョン番号をさらに含む。第5の情報は、参加者が、トランザクションIDを含まないがオブジェクトIDを含むことをさらに示すことができる。
【0107】
次いで、ステップ48が以下のように行われる。コーディネータは、応答メッセージで運搬された参加者のオブジェクトバージョンを、コーディネータによって記録された対象バージョン番号と比較し、比較様式は、基本的にステップ27と同じであるが、違いは、比較を実行するためのエンティティが参加者であることである。比較結果が得られた後、ステップ28と同じ様式に従って結論が引き出され、結論が実行される。
【0108】
コーディネータは、第3の情報、第4の情報、および第5の情報が存在するかどうかを同時に検出し、検出結果に応じて結論を引き出す機能を有することができる。あるいは、コーディネータは、第3の情報、第4の情報、および第5の情報のうちの任意の1つが存在するかどうかのみを検出し、検出結果に応じて結論を引き出す機能を有することができる。結論は、下記の少なくとも1つを含む。
【0109】
(1)参加者によって返されたすべての応答メッセージが第3の情報を運搬している場合、トランザクション結論は、トランザクションを実行することであり、第3の情報は、第3の情報を送信した参加者が、受信されたトランザクションIDを含むことを示す。
【0110】
(2)参加者によって返された応答メッセージのいずれかが第4の情報を運搬している場合、作成または修正の操作に関して、トランザクション結論は、トランザクションの実行をキャンセルすることであり、削除の操作に関して、トランザクション結論は、トランザクションを実行することである。第4の情報は、第4の情報を送信した参加者が、受信されたトランザクションIDを含まず、受信されたオブジェクトIDを含まないことを示す。
【0111】
(3)参加者によって返された応答メッセージのいずれかが第5の情報を運搬している場合、第5の情報に応じて結論が引き出されることができ、結論は、(i)参加者によってコーディネータへ返されたバージョン番号情報が、コーディネータによって記録された対象バージョン番号と同じである場合、結論は、トランザクションを実行することであること、または(ii)参加者によってコーディネータへ返されたバージョン番号情報が、コーディネータによって記録された対象バージョン番号とは異なる場合、結論は、トランザクションをアボートすることであることの少なくとも一方を含む。第5の情報は、参加者が、受信されたトランザクションIDを含まないが受信されたオブジェクトIDを含むことを示し、第5の情報は、応答メッセージを送信する参加者内のオブジェクトのバージョン番号をさらに運搬する。
【0112】
実施形態5
図3を同じく参照して、本発明の別の実施形態は、実施形態4の方法を適用することができるトランザクション処理装置31を提供する。トランザクション処理装置31は、参加者32に通信可能に接続され、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、サブオブジェクトのうちの1つは、トランザクション処理装置内にあり、その他のサブオブジェクトは、異なる参加者内にある。トランザクション処理装置31は、問合せモジュール311、受信モジュール312、判断モジュール313、および実行モジュール313を含む。
【0113】
問合せモジュール311は、問合せメッセージを各参加者32に送信するように構成され、問合せメッセージは、トランザクションIDおよびオブジェクトIDを運搬し、トランザクションIDは、トランザクションを識別するために使用され、オブジェクトIDは、オブジェクトを識別するために使用される。
【0114】
受信モジュール312は、各参加者32から問合せメッセージに対する応答メッセージを受信するように構成され、応答メッセージは、参加者がトランザクションIDを含まないがオブジェクトIDを含むことを示す第5の情報を運搬し、第5の情報は、応答メッセージを送信する参加者内のオブジェクトのバージョン番号をさらに運搬する。
【0115】
判断モジュール313は、応答メッセージに応じて結論を引き出し、コーディネータによって結論を実行し、結論をすべての参加者に送信するように構成され、結論は、参加者内のオブジェクトのバージョン番号がコーディネータ内のオブジェクトのバージョン番号と同じ場合、結論は、トランザクションを実行することであること、または、参加者内のオブジェクトのバージョン番号がコーディネータ内のオブジェクトのバージョン番号とは異なる場合、結論は、トランザクションをアボートすることであることの少なくとも一方を含む。
【0116】
実行モジュールは、判断モジュールの結論を実行するように構成される。
【0117】
実施形態6
図5に示されるように、本発明の別の実施形態は、参加者42に通信可能に接続されたコーディネータ51を提供し、トランザクションによって操作されるオブジェクトは、複数のサブオブジェクトにより形成され、サブオブジェクトのうちの1つは、コーディネータ内にあり、その他のサブオブジェクトは、異なる参加者内にある。コーディネータは、プロセッサ(Processor)511、およびプロセッサと通信するメモリ512を含み、メモリは、プログラムを記憶するように構成され、プロセッサは、プログラムを実行するように構成される。プログラムは、上記の方法のうちの1または複数、たとえば、実施形態1、実施形態2、および実施形態4で説明された方法のうちの1または複数を実行することができる。
【0118】
本実施形態におけるプロセッサ511によって実行される1つのプログラムは、問合せメッセージを各参加者に送信することであって、問合せメッセージは、トランザクションID、オブジェクトID、およびオブジェクトのバージョン番号を運搬し、トランザクションIDは、トランザクションを識別するために使用され、オブジェクトIDは、オブジェクトを識別するために使用され、オブジェクトのバージョン番号は、オブジェクトのコンテンツが変化したかどうかを識別するために使用され、異なるバージョン番号を有するオブジェクトのコンテンツは異なっている、送信することと、各参加者から問合せメッセージに対する応答メッセージを受信することと、応答メッセージに応じて結論を引き出し、結論を実行し、結論をすべての参加者に送信することとを行うために使用される。結論は、応答メッセージの任意の1つが第1の情報を運搬している場合、結論は、トランザクションを実行することであり、第1の情報は、参加者が、トランザクションIDを含まずオブジェクトIDを含み、参加者内のオブジェクトのバージョン番号が、コーディネータ内のオブジェクトのバージョン番号と同じであることを示すこと、または、応答メッセージの任意の1つが第2の情報を運搬している場合、結論は、トランザクションをアボートすることであり、第2の情報は、参加者が、トランザクションIDを含まずオブジェクトIDを含み、参加者内のオブジェクトのバージョン番号が、コーディネータ内のオブジェクトのバージョン番号とは異なることを示すことの少なくとも一方を含む。
【0119】
本実施形態におけるプロセッサ511によって実行される1つのプログラムは、問合せメッセージを各参加者に送信することであって、問合せメッセージは、トランザクションIDおよびオブジェクトIDを運搬し、トランザクションIDは、トランザクションを識別するために使用され、オブジェクトIDは、オブジェクトを識別するために使用され、オブジェクトのバージョン番号は、オブジェクトのコンテンツが変化したかどうかを識別するために使用され、異なるバージョン番号を有するオブジェクトのコンテンツは異なっている、送信することと、各参加者から問合せメッセージに対する応答メッセージを受信することであって、応答メッセージは、第5の情報を運搬し、第5の情報は、参加者が、トランザクションIDを含まないがオブジェクトIDを含むことを示し、第5の情報は、応答メッセージを送信する参加者内のオブジェクトのバージョン番号をさらに運搬する、受信することと、応答メッセージに応じて結論を引き出し、コーディネータによって結論を実行し、結論をすべての参加者に送信することとを行うために使用される。結論は、参加者内のオブジェクトのバージョン番号がコーディネータ内のオブジェクトのバージョン番号と同じ場合、結論は、トランザクションを実行することであること、または、参加者内のオブジェクトのバージョン番号がコーディネータ内のオブジェクトのバージョン番号とは異なる場合、結論は、トランザクションをアボートすることであることの少なくとも一方を含む。
【0120】
プロセッサ511は、中央処理装置CPU、または特定用途向け集積回路ASIC(Application Specific Integrated Circuit)、または本発明の実施形態を実装するように構成された1もしくは複数の集積回路であり得る。メモリ512は、高速RAMメモリを含んでよく、または不揮発性メモリ(non−volatile memory)、たとえば、少なくとも1つのディスクメモリをさらに含んでよい。
【0121】
上記の実装様式の説明によれば、本発明は、ソフトウェアに加えて必要な汎用ハードウェアによって実装されることができ、また当然ながらハードウェアによって実装されてもよいが、多くの場合、前者が好ましい実装態様であることが明確に理解され得る。そのような理解に基づいて、本質的に本発明の技術的解決策または従来技術に貢献する部分は、ソフトウェア製品の形態で実装され得る。ソフトウェア製品は、コンピュータのフロッピーディスク、ハードディスク、または光ディスクのような可読ストレージ媒体に記憶され、コンピュータデバイス(パーソナルコンピュータ、サーバ、またはネットワークデバイスなどであり得る)に対して、本発明の実施形態に説明された方法を行うように指示するためのいくつかの命令を含む。
【0122】
上記の説明は、本発明の単に特定の実施形態であるが、本発明の保護範囲を限定することは意図されていない。本発明に開示される技術的範囲内で当業者に容易に理解されるあらゆる変形および置換が、本発明の保護範囲内に入るものとする。したがって、本発明の保護範囲は、特許請求の範囲の保護範囲に従うものとする。
図1
図2
図3
図4
図5