(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2022-02-28
(45)【発行日】2022-03-08
(54)【発明の名称】トランザクション処理システム及び方法
(51)【国際特許分類】
G06F 9/46 20060101AFI20220301BHJP
G06F 16/24 20190101ALI20220301BHJP
【FI】
G06F9/46 430
G06F16/24
(21)【出願番号】P 2021144577
(22)【出願日】2021-09-06
(62)【分割の表示】P 2021144133の分割
【原出願日】2021-09-03
【審査請求日】2021-09-08
【早期審査対象出願】
(73)【特許権者】
【識別番号】519026250
【氏名又は名称】株式会社Scalar
(74)【代理人】
【識別番号】110002365
【氏名又は名称】特許業務法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】鈴木 俊裕
(72)【発明者】
【氏名】山田 浩之
【審査官】北村 学
(56)【参考文献】
【文献】特開2007-188518(JP,A)
【文献】特開2019-125100(JP,A)
【文献】国際公開第2010/098034(WO,A1)
【文献】国際公開第2021/019089(WO,A1)
【文献】米国特許第05920857(US,A)
【文献】米国特許出願公開第2010/0241629(US,A1)
【文献】米国特許出願公開第2013/0332435(US,A1)
【文献】米国特許出願公開第2016/0055230(US,A1)
【文献】米国特許出願公開第2016/0371353(US,A1)
【文献】米国特許出願公開第2018/0329936(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 9/455 - 9/54
G06F 16/00 - 16/958
(57)【特許請求の範囲】
【請求項1】
ビジネスロジックを構成する複数のサブビジネスロジックを実行する複数のサブアプリケーション部と、
複数のCC-OCCと
を備え、
前記複数のCC-OCCは、複数のデータソースクライアントシステムに備えられ、
前記複数のデータソースクライアントシステムは、複数のオブジェクトを有するデータソースサーバシステムに対する複数のクライアントシステムであり、
前記データソースサーバシステムと前記複数のデータソースクライアントシステムは、一つ又は複数の計算機システムであり、
各オブジェクトは、対象の状態を表すデータであり、
前記複数のサブアプリケーション部の各々について、当該サブアプリケーション部は、
サブビジネスロジックの実行において、リード及び/又はライトされるオブジェクトのリード要求及び/又はライト要求を、当該オブジェクトの担当CC-OCCに送信し、
前記複数のCC-OCCの各々は、OCC(Optimistic Concurrency Control)を行うようになっておりCC(Client Coordinated)のトランザクションマネージャであり、
前記OCCは、コミット時にスナップショットを基にバリデーションを行うことを含み、
前記複数のCC-OCCの各々は、トランザクション毎にスナップショットを管理するようになっており、
各トランザクションについて、当該トランザクションのスナップショットは、0以上のリードオブジェクトの集合であるリードセットと、0以上のライトオブジェクトの集合であるライトセットとを含み、
リードオブジェクトは、オブジェクトのリード要求に応答してリードされたオブジェクトであり、
ライトオブジェクトは、オブジェクトのライト要求に応答してライトされるオブジェクトであり、
各トランザクションについて、当該トランザクションが分割されてなるM個(Mは2以上の整数)のサブトランザクションの処理において二つ以上のサブアプリケーション部からオブジェクトのリード要求及び/又はライト要求を受けるCC-OCCがN個(Nは2以上の整数)のCC-OCCの場合、
N個の和集合がペアワイズディスジョイントであり、
前記N個の和集合の各々について、当該和集合は、当該トランザクションに対応しCC-OCCが管理するスナップショットにおけるリードセットとライトセットとの和集合であり、
前記M個のサブトランザクションの各々について、当該サブトランザクションは、サブビジネスロジックの実行において処理され、サブアプリケーション部からCC-OCCへのオブジェクトのリード要求及び/又はライト要求を含む、
トランザクション処理システム。
【請求項2】
ビジネスロジックを構成する複数のサブビジネスロジックを実行する複数のサブアプリケーション部と、
複数のCC-OCCと
を備え、
前記複数のCC-OCCは、複数のデータソースクライアントシステムに備えられ、
前記複数のデータソースクライアントシステムは、複数のオブジェクトを有するデータソースサーバシステムに対する複数のクライアントシステムであり、
前記データソースサーバシステムと前記複数のデータソースクライアントシステムは、一つ又は複数の計算機システムであり、
各オブジェクトは、対象の状態を表すデータであり、
前記複数のCC-OCCの各々は、OCC(Optimistic Concurrency Control)を行うようになっておりCC(Client Coordinated)のトランザクションマネージャであり、
前記OCCは、コミット時にスナップショットを基にバリデーションを行うことを含み、
前記複数のCC-OCCの各々は、トランザクション毎にスナップショットを管理するようになっており、
各トランザクションについて、当該トランザクションのスナップショットは、0以上のリードオブジェクトの集合であるリードセットと、0以上のライトオブジェクトの集合であるライトセットとを含み、
リードオブジェクトは、オブジェクトのリード要求に応答してリードされたオブジェクトであり、
ライトオブジェクトは、オブジェクトのライト要求に応答してライトされるオブジェクトであり、
各トランザクションについて、当該トランザクションが分割されてなるM個(Mは2以上の整数)のサブトランザクションの処理において二つ以上のサブアプリケーション部からオブジェクトのリード要求及び/又はライト要求を受けるCC-OCCがN個(Nは2以上の整数)のCC-OCCの場合、
N個の和集合がペアワイズディスジョイントであり、
前記N個の和集合の各々について、当該和集合は、当該トランザクションに対応しCC-OCCが管理するスナップショットにおけるリードセットとライトセットとの和集合であり、
前記M個のサブトランザクションの各々について、当該サブトランザクションは、サブビジネスロジックの実行において処理され、サブアプリケーション部からCC-OCCへのオブジェクトのリード要求及び/又はライト要求を含み、
前記複数のサブアプリケーション部の各々について、当該サブアプリケーション部は、
サブビジネスロジックの実行において、当該サブアプリケーション部が担当サブアプリケーション部であるか否かの判断である担当判断を行い、
担当サブアプリケーション部は、リード及び/又はライトされるオブジェクトの担当CC-OCCに対してオブジェクトのリード要求及び/又はライト要求を送信可能なサブアプリケーション部であり、
当該担当判断の結果が真の場合、当該オブジェクトのリード要求及び/又はライト要求を、当該サブアプリケーション部を有するデータソースクライアントシステムにおける、当該オブジェクトの担当CC-OCCに送信し、
当該担当判断の結果が偽の場合、当該オブジェクトの担当CC-OCCを有するデータソースクライアントシステムにおけるサブアプリケーション部に、当該オブジェクトのリード及び/又はライトを依頼する、
トランザクション処理システム。
【請求項3】
前記複数のデータソースクライアントシステムの各々に、いずれのオブジェクトをいずれのサブアプリケーション部又はいずれのCC-OCCが担当するかを表すマッピング情報が格納され、
前記複数のサブアプリケーション部の各々が、当該サブアプリケーション部を有するデータソースクライアントシステムにおけるマッピング情報を基に、前記担当判断を行う、
請求項2に記載のトランザクション処理システム。
【請求項4】
前記複数のサブアプリケーション部のうちの少なくとも一つの中又は外に備えられたコーディネータを更に備え、
前記コーディネータが、
トランザクションを開始し、
開始されたトランザクションに関する複数のサブビジネスロジックの各々について、当該サブビジネスロジックの実行をサブアプリケーション部に要求し、
前記複数のサブビジネスロジックの各々について、当該サブビジネスロジックの所定の応答を、当該サブビジネスロジックを実行したサブアプリケーション部から受けた場合、複数のサブアプリケーション部の各々に、一つ以上の準備要求を送信し、
各サブアプリケーション部から、当該サブアプリケーション部に送信された全ての準備要求について所定の応答を受けた場合、前記複数のサブアプリケーション部の各々に、コミット要求を送信する、
請求項1乃至3のうちのいずれかに記載のトランザクション処理システム。
【請求項5】
データソースクライアントシステムにおけるサブアプリケーション部により、サブビジネスロジックを実行するステップと、
前記サブビジネスロジックの実行において、リード及び/又はライトされるオブジェクトのリード要求及び/又はライト要求を、当該オブジェクトの担当CC-OCCに送信するステップと
を有し、
ビジネスロジックを構成する複数のサブビジネスロジックを実行する複数のサブアプリケーション部が、複数のオブジェクトを有するデータソースサーバシステムに対する複数のデータソースクライアントシステムに備えられており、
前記データソースクライアントシステムは、前記複数のデータソースクライアントシステムのうちのいずれかであり、
前記サブアプリケーション部は、前記複数のサブアプリケーション部のうちのいずれかであり、
前記データソースサーバシステムと前記複数のデータソースクライアントシステムは、一つ又は複数の計算機システムであり、
各オブジェクトは、対象の状態を表すデータであり、
前記複数のデータソースクライアントシステムが、複数のCC-OCCを有し、
前記複数のCC-OCCの各々は、OCC(Optimistic Concurrency Control)を行うようになっているCC(Client Coordinated)のトランザクションマネージャであり、
前記OCCは、コミット時にスナップショットを基にバリデーションを行うことを含み、
前記複数のCC-OCCの各々は、当該CC-OCCを有するデータソースクライアントシステムにトランザクション毎にスナップショットを管理するようになっており、
各トランザクションについて、当該トランザクションのスナップショットは、0以上のリードオブジェクトの集合であるリードセットと、0以上のライトオブジェクトの集合であるライトセットとを含み、
リードオブジェクトは、オブジェクトのリード要求に応答してリードされたオブジェクトであり、
ライトオブジェクトは、オブジェクトのライト要求に応答してライトされるオブジェクトであり、
各トランザクションについて、当該トランザクションが分割されてなるM個(Mは2以上の整数)のサブトランザクションの処理において二つ以上のサブアプリケーション部からオブジェクトのリード要求及び/又はライト要求を受けるCC-OCCがN個(Nは2以上の整数)のCC-OCCの場合、
N個の和集合がペアワイズディスジョイントであり、
前記N個の和集合の各々について、当該和集合は、当該トランザクションに対応しCC-OCCが管理するスナップショットにおけるリードセットとライトセットとの和集合であり、
前記M個のサブトランザクションの各々について、当該サブトランザクションは、サブビジネスロジックの実行において処理され、サブアプリケーション部からCC-OCCへのオブジェクトのリード要求及び/又はライト要求を含む、
方法。
【請求項6】
データソースクライアントシステムにおけるサブアプリケーション部により、サブビジネスロジックの実行において、当該サブアプリケーション部が担当サブアプリケーション部であるか否かの判断である担当判断を行うステップと、
当該担当判断の結果が真の場合、前記サブアプリケーション部により、
オブジェクトのリード要求及び/又はライト要求を、当該サブアプリケーション部を有するデータソースクライアントシステムにおける、当該オブジェクトの担当CC-OCCに送信するステップと、
当該担当判断の結果が偽の場合、前記サブアプリケーション部により、当該オブジェクトの担当CC-OCCを有する別のデータソースクライアントシステムにおける別のサブアプリケーション部に、当該オブジェクトのリード及び/又はライトを依頼するステップと
を有し、
ビジネスロジックを構成する複数のサブビジネスロジックを実行する複数のサブアプリケーション部が、複数のオブジェクトを有するデータソースサーバシステムに対する複数のデータソースクライアントシステムに備えられており、
前記データソースクライアントシステムは、前記複数のデータソースクライアントシステムのうちのいずれかであり、
前記別のデータソースクライアントシステムは、前記複数のデータソースクライアントシステムのうちのいずれかであって、前記データソースクライアントシステムと別のデータソースクライアントシステムであり、
前記サブアプリケーション部は、前記複数のサブアプリケーション部のうちのいずれかであり、
前記別のサブアプリケーション部は、前記複数のサブアプリケーション部のうちのいずれかであって、前記サブアプリケーション部と別のサブアプリケーション部であり、
前記データソースサーバシステムと前記複数のデータソースクライアントシステムは、一つ又は複数の計算機システムであり、
各オブジェクトは、対象の状態を表すデータであり、
前記複数のデータソースクライアントシステムが、複数のCC-OCCを有し、
前記複数のCC-OCCの各々は、OCC(Optimistic Concurrency Control)を行うようになっているCC(Client Coordinated)のトランザクションマネージャであり、
前記OCCは、コミット時にスナップショットを基にバリデーションを行うことを含み、
前記複数のCC-OCCの各々は、当該CC-OCCを有するデータソースクライアントシステムにトランザクション毎にスナップショットを管理するようになっており、
各トランザクションについて、当該トランザクションのスナップショットは、0以上のリードオブジェクトの集合であるリードセットと、0以上のライトオブジェクトの集合であるライトセットとを含み、
リードオブジェクトは、オブジェクトのリード要求に応答してリードされたオブジェクトであり、
ライトオブジェクトは、オブジェクトのライト要求に応答してライトされるオブジェクトであり、
各トランザクションについて、当該トランザクションが分割されてなるM個(Mは2以上の整数)のサブトランザクションの処理において二つ以上のサブアプリケーション部からオブジェクトのリード要求及び/又はライト要求を受けるCC-OCCがN個(Nは2以上の整数)のCC-OCCの場合、
N個の和集合がペアワイズディスジョイントであり、
前記N個の和集合の各々について、当該和集合は、当該トランザクションに対応しCC-OCCが管理するスナップショットにおけるリードセットとライトセットとの和集合であり、
前記M個のサブトランザクションの各々について、当該サブトランザクションは、サブビジネスロジックの実行において処理され、サブアプリケーション部からCC-OCCへのオブジェクトのリード要求及び/又はライト要求を含む、
方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、トランザクションの処理に関する。
【背景技術】
【0002】
一般に、サービスを実現するビジネスロジックの実行において、トランザクションが処理される。トランザクションは、一般的に、アトミックに処理されるオペレーションの集合であり、例えば、複数のCRUD(Create、Read、Update又はDelete)要求から成る。トランザクション処理では、複数のオブジェクトに対してACID(Atomicity、Consistency、Isolation及びDurability)性を保証しつつCRUD要求を処理する必要がある。
【0003】
トランザクション処理では、複数のオブジェクト(例えば、複数のレコード)を有するデータソースサーバシステムに対し、データソースサーバシステムに対するクライアントシステムであるデータソースクライアントシステムにより、オブジェクトのリード及び/又はライトが行われる。
【0004】
トランザクション処理として、OCC(Optimistic Concurrency Control)を含むトランザクション処理が知られている(例えば非特許文献1)。OCCでは、コミット時にスナップショットを基にバリデーションが行われる。スナップショットは、トランザクション毎に存在する。各トランザクションについて、スナップショットは、0以上のリードオブジェクトの集合であるリードセット、及び、0以上のライトオブジェクトの集合であるライトセットを含む。各トランザクションについて、リードオブジェクトは、当該トランザクションの処理においてリードされたオブジェクトである。各トランザクションについて、ライトセットは、当該トランザクションの処理においてライトされるオブジェクトである。
【先行技術文献】
【非特許文献】
【0005】
【文献】H.T. KUNG and JOHN T. ROBINSON. On Optimistic Methods forConcurrency Control. ACM Transactions on Database Systems, Vol. 6, No. 2, June 1981,Pages 213-226. (https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.101.8988)
【発明の概要】
【発明が解決しようとする課題】
【0006】
ビジネスロジックは、一般に、アプリケーション部により実行される。アプリケーション部は、ソフトウェア(典型的にはアプリケーションプログラム)(又は、当該ソフトウェアが実行されることにより実現される機能)である。アプリケーション部は、トランザクションの処理において、Tx(トランザクション)マネージャに、オブジェクトのリード及び/又はライトの要求を送信する。
【0007】
ビジネスロジック(例えばサービス)を複数のサブビジネスロジック(例えば複数のマイクロサービス)に分割すること、言い換えれば、複数のサブビジネスロジックから一つのビジネスロジックを構成することが知られている。この場合、複数のサブビジネスロジックを実行する複数のサブアプリケーション部が設計される。
【0008】
このように複数のサブアプリケーション部を含んだアーキテクチャが採用される場合、一つのトランザクションを構成する複数のサブトランザクションが処理されることになる。
【0009】
また、複数のデータソースクライアントシステムに複数のTxマネージャが備えられるにあたり、トランザクション機能をもたないデータソースクライアントシステムにおいてトランザクション機能を実現する等の理由から、各Txマネージャを、client-coordinatedなTxマネージャとすることが考えられる。以下、OCCを行うclient-coordinatedなTxマネージャを、「CC-OCC」と表記する。複数のCC-OCCの各々は、トランザクション毎にスナップショットを管理する。なお、本明細書において、Txマネージャを「Client-coordinatedなTxマネージャとする」とは、一般的にデータソースサーバシステムに配置されるTxマネージャをデータソースサーバシステムではなくデータソースクライアントシステムに配置し、且つ、データソースクライアントシステムに配置されたTxマネージャ同士で通信等により情報交換を行わないということである。また、CC-OCCが「スナップショットを管理する」とは、当該CC-OCCを有するデータソースクライアントシステム(例えば、データソースクライアントシステムのメモリ)にスナップショットを格納することを意味し、当該スナップショットは、当該CC-OCCの中にあっても外にあってもよい。
【0010】
複数のサブアプリケーション部と、複数のデータソースクライアントシステムに備えられた複数のCC-OCCとを含むアーキテクチャにおいて、複数のトランザクションを並列に処理するにあたり、複数のスナップショットの整合性を維持することは、困難である。以下、その一例を、
図1A~
図2Bを参照して説明する。なお、その説明において、前提及び用語(以下、便宜上、「用語集」と言う)は下記とする。また、サブアプリケーション部は、データソースクライアントシステムの中に備えられても外に備えられてもよい。
・サービスは、「ファミリーアカウントに属する複数のメンバアカウントにおける複数のポイントの合計が所定値を超えている場合に、それら複数のメンバアカウントの各々に所定のポイントを付与」というサービスである。
・メンバアカウントA及びBが、或るファミリーアカウントに属する複数のメンバアカウントである。メンバアカウントC及びDが、別のファミリーアカウントに属する複数のメンバアカウントである。
・複数のメンバアカウントにおけるポイントは、サーバシステム15(データソースシステムの一例)におけるDB(データベース)521A及び521Bに記録されている(なお、DB521は一つでも三つ以上でもよい)。
・レコードX(X=A、B、C又はD)は、メンバアカウントXにおけるポイントが記録される一つのレコードである。
・リードXが、レコードXのリードである。
・ライトXが、レコードXのライトである。
・リードレコードX:リードXによりリードされたレコードXであり、スナップショットにおけるリードセットに含まれるレコードである。
・ライトレコードX:ライトXによりライトされるレコードXであり、スナップショットにおけるライトセットに含まれるレコードである。
・Tx1が、リードA~D及びライトA~Dで構成されている。Tx1におけるライトA及びBの各々は、同一ファミリーアカウントに属するメンバアカウントA及びB(リードA及びBによりリードされたレコードA及びB)に記録されているポイントの合計が所定値を超えている場合に所定ポイントを加算するために行われる(Tx1におけるライトC及びDの各々についても同様)。
・DBは、データベースの略であり、データソースの一例である。
【0011】
図1Aが例示するように、DBクライアントシステム531が、アプリケーション部518及びTxマネージャ519を有し、Txマネージャ519が、DB521A及び521Bにアクセスするようになっている。DBクライアントシステム531における一つのアプリケーション部518が一つのビジネスロジックを実行するアーキテクチャでは、OCCを行うTxマネージャ519が管理するスナップショット5の整合性を維持することは容易である。例えば、
図1Bが示すように、Tx1のライトBの前にTx2のリードB及びライトBが行われた場合、Txマネージャ519が、スナップショット5の整合性が崩れたことを検知でき、故に、Tx1をアボートできる。
【0012】
しかし、
図2Aが例示するように、DBクライアントシステム531A及び531Bにサブアプリケーション部418A及び418BとCC-OCC419A及び419Bとが備えられるアーキテクチャでは、CC-OCC419Aが管理するスナップショット5AとCC-OCC419Bが管理するスナップショット5Bの整合性を維持することは困難である。例えば、
図2Aが例示のアーキテクチャにおいて、トランザクションの分離レベルは、Snapshot IsolationのWrite-skew anomaly, Read-only anomalyに加えてRead-skew anomalyがおきる分離レベルであるとする。また、
図2Bが示すように、Tx1が、二つのサブトランザクション(Tx1
Sub1及びTx1
Sub2)に分割されたとする。Tx1
Sub1が、リードA~D、ライトA及びライトCで構成され、Tx1
Sub2が、リードA~D、ライトB及びライトDで構成されているとする。サブアプリケーション部418AがまずTx1
Sub1を処理し、その後、サブアプリケーション部418BがTx2を処理し次にTx1
Sub2を処理するとする。この場合、Tx2のライトBによりレコードBが更新されるため、Tx1
Sub2のリードBによりリードされたレコードBがTx1
Sub1のリードBによりリードされたレコードBよりも新しいというリードスキューが生じる。しかし、Client coordinatedが採用されたアーキテクチャでは、CC-OCC421AもCC-OCC421Bも、リードスキューが生じたことを検知できず、故に、スナップショット5A及び5B間でレコードBが不整合であるにも関わらず、Tx1
Sub1及びTx1
Sub2のいずれもコミットされてしまう。
【課題を解決するための手段】
【0013】
トランザクション処理システムが、サービスを実現するビジネスロジックを構成する複数のサブビジネスロジックを実行する複数のサブアプリケーション部と、複数のCC-OCCとを備える。複数のCC-OCCは、複数のデータソースクライアントシステムに備えられる。複数のデータソースクライアントシステムは、複数のオブジェクトを有するデータソースサーバシステムに対する複数のクライアントシステムである。データソースサーバシステムと複数のデータソースクライアントシステムは、一つ又は複数の計算機システムである。各オブジェクトは、対象の状態を表すデータである。
【0014】
複数のサブアプリケーション部の各々は、サブビジネスロジックの実行において、リード及び/又はライトされるオブジェクトのリード要求及び/又はライト要求を、当該サブアプリケーション部を有するデータソースクライアントシステムにおける、当該オブジェクトの担当CC-OCCに送信する。
【0015】
複数のCC-OCCの各々は、OCC(Optimistic Concurrency Control)を行うようになっているCC(Client Coordinated)のトランザクションマネージャである。複数のCC-OCCの各々は、トランザクション毎にスナップショットを管理するようになっている。
【0016】
各トランザクションについて、当該トランザクションのスナップショットは、0以上のリードオブジェクトの集合であるリードセットと、0以上のライトオブジェクトの集合であるライトセットとを含む。リードオブジェクトは、オブジェクトのリード要求に応答してリードされたオブジェクトである。ライトオブジェクトは、オブジェクトのライト要求に応答してライトされるオブジェクトである。
【0017】
各トランザクションについて、当該トランザクションを構成するM個(Mは2以上の整数)のサブトランザクションの処理において二つ以上のサブアプリケーション部からオブジェクトのリード要求及び/又はライト要求を受けるCC-OCCがN個(Nは2以上の整数)のCC-OCCの場合、N個の和集合がペアワイズディスジョイントである。N個の和集合の各々について、当該和集合は、当該トランザクションに対応しCC-OCCが管理するスナップショットにおけるリードセットとライトセットとの和集合である。M個のサブトランザクションの各々について、当該サブトランザクションは、サブビジネスロジックの実行において処理され、サブアプリケーション部からCC-OCCへのオブジェクトのリード要求及び/又はライト要求を含む。
【発明の効果】
【0018】
複数のサブアプリケーション部と、複数のデータソースクライアントシステムに備えられた複数のCC-OCCとを含むアーキテクチャにおいて、各トランザクションについて、複数のCC-OCCが管理する複数のスナップショットの整合性を維持することができる。
【図面の簡単な説明】
【0019】
【
図1A】第1の比較例に係るアーキテクチャを示す。
【
図1B】第1の比較例におけるTx1及びTx2の流れを示す。
【
図2A】第2の比較例に係るアーキテクチャを示す。
【
図2B】第2の比較例におけるTx1及びTx2の流れを示す。
【
図4】実施形態に係るシステム全体の構成の一例を示す。
【
図5】DBクライアントシステム及びDBサーバシステムの構成の一例を示す。
【
図13A】サブアプリケーション部とCC-OCCとの関係の一例を示す。
【
図13B】サブアプリケーション部とCC-OCCとの関係の一例を示す。
【発明を実施するための形態】
【0020】
以下の説明では、「インターフェース装置」は、一つ以上のインターフェースを含む。一つ以上のインターフェースは、一つ以上の同種の通信インターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし二つ以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
【0021】
また、以下の説明では、「記憶装置」は、一つ以上のメモリを含む。記憶装置に関して少なくとも一つのメモリは、揮発性メモリでよい。記憶装置は、主に、プロセッサによる処理の際に使用される。記憶装置は、メモリの他に、一つ以上の不揮発性の記憶デバイス(例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive))を含んでもよい。
【0022】
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサを含む。少なくとも一つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサである。一つ以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【0023】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶装置(例えばメモリ)及び/又はインターフェース装置(例えば通信ポート)等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。また、プロセッサは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
【0024】
また、以下の説明では、「yyy部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGA又はASIC)によって実現されてもよいし、それらの組合せによって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置及び/又はインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。
【0025】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号を使用し、同種の要素を区別する場合は、参照符号を使用することがある。
【0026】
また、以下の説明では、「レコード」とは、アプリケーションプログラムのようなプログラムから見た1つの論理的な電子データの塊であり、具体的には、対象の状態を表すデータであるオブジェクトの一例である。レコードとしてのデータは、例えば、キーバリューペア又はタプルがある。
【0027】
また、「対象」とは、任意の有体物又は無体物である。例えば、「対象」として、アカウントを採用し、対象の状態として、アカウントにおけるポイントを採用することができる。
【0028】
また、「リード及び/又はライト」は、リード及びライトの一方又は両方を意味し、「リードライトアクセス」と総称されてもよい。同様に、「リード要求及び/又はライト要求」は、リード要求及びライト要求の一方又は両方を意味し、「リードライトアクセス要求」と総称されてもよい。
【0029】
以下、本発明の一実施形態を説明する。なお、以下の説明では、
図1A~
図2Bの説明において使用された上述の用語集が採用される。
【0030】
【0031】
一つ以上のDB521(例えばDB521A及び521B)を有するDBサーバシステム15に対し、複数のDBクライアントシステム13(例えば、DBクライアントシステム13A及び13B)が存在する。一つ以上のDB521が、データソースの一例であり、DBサーバシステム15が、データソースサーバシステムの一例であり、DBクライアントシステム13が、データソースクライアントシステムの一例である。
【0032】
トランザクション処理システム20が、複数のサブアプリケーション部18と複数のCC-OCC19とを備える。複数のサブアプリケーション部18と複数のCC-OCC19とのうち少なくとも複数のCC-OCC19が複数のDBクライアントシステム13に備えられる。
【0033】
ビジネスロジックを構成する複数のサブビジネスロジックが、複数のサブアプリケーション部18により実行される。任意の観点で複数のサブビジネスロジックが決められてよい。例えば、ビジネスロジックが、注文処理と決済処理で構成されている場合、複数のサブビジネスロジックは、注文処理としてのサブビジネスロジックと決済処理としてのサブビジネスロジックといったように機能が異なるサブビジネスロジックでもよいし、注文処理も決済処理も行うがアクセス可能なレコード範囲が異なるサブビジネスロジックでもよい。複数のサブビジネスロジックは予め定義されていてもよいし(例えば、サブアプリケーション部18に予めサブビジネスロジックが定義されていてもよいし)、ビジネスロジックから動的に複数のサブビジネスロジックが(例えば後述のコーディネータ16により)生成されてもよい。
【0034】
CC-OCC19は、client-coordinatedのTxマネージャであるため、CC-OCC19間での通信は行われない。そこで、各サブアプリケーション部18に、サブアプリケーション部18間で通信する機能が備えられる。説明を簡単にするために、一つのサブアプリケーション部18に一つのCC-OCC19が存在し、それらのサブアプリケーション部18及びCC-OCC19が一つのDBクライアントシステム13に備えられるとする。サブアプリケーション部18のCC-OCC19の符号を「19S」とする。CC-OCC19Sが、トランザクションの処理(トランザクションを構成する複数のサブトランザクションの処理)においてレコードのリード要求及び/又はライト要求を受け付けるCC-OCCである。各トランザクションについて、CC-OCC19Sが、スナップショット10(リードセット及びライトセット)を管理(例えば、DBクライアントシステム13のメモリに格納)する。リードセットは、0以上のリードレコードの集合である。リードレコードは、メモリ上のリードされたレコードである。ライトセットは、0以上のライトレコードの集合である。ライトレコードは、メモリ上のライトされるレコードである。
【0035】
また、トランザクションのコーディネータ16が備えられる。コーディネータ16は、トランザクションの開始や、準備処理、コミット処理及びロールバック処理等のコーディネーションを行う。コーディネータ16は、後述するように、サブビジネスロジックの実行要求をサブアプリケーション部18に送信してもよい(サブアプリケーション部18へのサブビジネスロジックの実行要求の送信は別のサブアプリケーション部18により行われてもよい)。コーディネータ16は、トランザクション毎に存在してもよいし、複数のトランザクションに共通でもよい。コーディネータ16は、少なくとも一つのサブアプリケーション部18の中に存在してもよいし外に存在してもよい。コーディネータ16は、DBクライアントシステム13に存在してもよいし、DBクライアントシステム13の外に存在してもよい。説明を簡単にするために、複数のトランザクションに共通の一つのコーディネータ16がサブアプリケーション部18の外に存在するとし、一つのコーディネータ16に一つのCC-OCC19が存在するとする。コーディネータ16のCC-OCC19の符号を「19C」とする。コーディネータ16及びCC-OCC19CがDBクライアントシステム13Aに存在するとする。
【0036】
トランザクションは、複数のオペレーションから構成され、Txマネージャ(本実施形態ではCC-OCC19S)によってアトミックに処理される。トランザクションが、複数のサブトランザクションから構成される、言い換えれば、トランザクションが複数のサブトランザクションに分割される。サブトランザクションは、サブアプリケーション部18からCC-OCC19Sへのレコードのリード要求及び/又はライト要求を含む。当該レコードのリード要求及び/又はライト要求を受けたCC-OCCが、当該レコードをDB521からリード及び/又はDB521にライトする。
【0037】
ビジネスロジックを構成する複数のサブビジネスロジックの実行において、トランザクションを構成する複数のサブトランザクションが処理される。当該複数のサブトランザクションが、M個(Mは2以上の整数)のサブトランザクションであるとする。また、当該複数のサブトランザクションの処理において二つ以上のサブアプリケーション部18からレコードのリード要求及び/又はライト要求を受けるCC-OCC19Sが、N個(Nは2以上の整数)のCC-OCC19Sであるとする。説明の簡単のために、本実施形態では、M=Nとし、故に、サブトランザクションとCC-OCC19Sが1:1で対応するとする。サブビジネスロジックがコーディネータ16によりサブアプリケーション部18に送信され、当該サブアプリケーション部18により当該サブトランザクションが処理される。
【0038】
本実施形態では、トランザクション毎に、下記の不変式が満たされる。
【数1】
【0039】
不変式において、Nは、サブトランザクションの数である。iは、サブトランザクションの通し番号(例えばID)である。RSiは、サブトランザクションiのリードセットである。WSiは、サブトランザクションiのライトセットである。
【0040】
従って、この不変式は、「トランザクションを構成するサブトランザクション毎のリードセットとライトセットとの和集合が、当該トランザクションを構成する全サブトランザクションについてペアワイズディスジョイント(互いに素)である」ことを意味する。例えば、サービス及びトランザクションとして
図2Bを参照して説明したサービス及びTx1があるとする。この場合、本実施形態ではサブトランザクションとCC-OCC19Sが1:1であるため、
図3に示すように、Tx1を構成するサブトランザクションは二つとなる。そして、二つのサブトランザクションに対応した二つの和集合(RS
iとWS
iの和集合(i=1,2))がペアワイズディスジョイントでなければならない。このため、Tx1は、Tx1
Sub1(リードA、リードB、ライトA及びライトB)とTx1
Sub2(リードC、リードD、ライトC及びライトD)に分割される。Tx1
Sub1がCC-OCC19SAに割り当てられ、Tx1
Sub2がCC-OCC19SBに割り当てられる。これにより、不変式、すなわち、CC-OCC19SAのスナップショット10Aにおける和集合(RS
1とWS
1の和集合)と、CC-OCC19SBのスナップショット10Bにおける和集合(RS
2とWS
2の和集合)とがペアワイズディスジョイントであること、が維持される。なお、不変式を維持する方法は、このようなトランザクション分割とサブトランザクション割当てとに限られない。不変式を維持する方法の例については後述する。
【0041】
また、この不変式は、上述したようにトランザクション毎に満たされればよい。言い換えれば、トランザクション間では、リードセットとライトセットとの和集合がペアワイズディスジョイントである必要は無い。例えば、Tx1について、リードレコードA又はライトレコードAが、CC-OCC19SAのスナップショット10Aに含まれている場合、レコードAは、CC-OCC19SBのスナップショット10Bに含まれてはならないが、Tx1と別のTxであるTx2については、レコードAが、CC-OCC19SBのスナップショット10Bに含まれてもよい(この場合、Tx2については、レコードAは、CC-OCC19SAのスナップショット10Aに含まれてはならない)。
【0042】
以上の不変式がトランザクション毎に満たされるので、複数のサブアプリケーション部18と複数のDBクライアントシステム13に備えられた複数のCC-OCC19Sとを含むアーキテクチャにおいて、各トランザクションについて、複数のCC-OCC19Sが管理する複数のスナップショット10の整合性を維持することができる。
【0043】
以下、本実施形態を詳細に説明する。
【0044】
図4は、本実施形態に係るシステム全体の構成の一例を示す。
【0045】
複数のDBクライアントシステム13A、13B、…と、DBサーバシステム15が、通信ネットワーク19を介して通信可能に接続される。
【0046】
DBクライアントシステム13の構成として、任意の構成が採用されてよい。
【0047】
例えば、DBクライアントシステム13Aは、サブアプリケーション部18A、CC-OCC19SA、コーディネータ16及びCC-OCC19Cの他に、ユーザプログラム124を有するクライアントシステムであってよい。また、DBクライアントシステム13Bは、ユーザプログラム124を実行するユーザシステム12に通信ネットワーク14を介して接続されたDBクライアントシステムであってよい。ユーザシステム12は、ユーザの計算機(例えば、パーソナルコンピュータ)でよい。ユーザプログラム124は、Webブラウザでもよいしアプリケーションプログラムでもよい。通信ネットワーク14は通信ネットワーク19と一体でもよい。
【0048】
DBクライアントシステム13は、DBサーバシステム15に対してクライアントシステムであるが、ユーザシステム12に対してはサーバシステムでもよい。DBクライアントシステム13が、システム全体におけるクライアントシステム(エンドクライアント)でもよい。
【0049】
また、サブアプリケーション部18が、DBクライアントシステム13の外部のシステム(例えばユーザシステム12)に存在してもよい。また、サブアプリケーション部18は、サーバアプリケーションとして機能してもよいし、デスクトップアプリケーションとして機能してもよい。また、サブアプリケーション部18は、ネットワークを介してDBクライアントシステム13又はユーザシステム12といったシステムに提供されてもよい。
【0050】
DBサーバシステム15は、複数(又は一つ)のDB21と、CC-OCC19Sからの要求に応答してDB21に対してデータの入出力を行うDBマネージャ20とを有する。
【0051】
DBサーバシステム15と複数のDBクライアントシステム13は、一つ又は複数の計算機システムである。例えば、DBサーバシステム15とDBクライアントシステム13は別々の計算機システムでもよいし一つの共通の計算機システムでもよい。
【0052】
図5は、DBクライアントシステム13及びDBサーバシステム15の構成の一例を示す。
【0053】
DBクライアントシステム13は、一つ又は複数のDBクライアント計算機130を含む。DBクライアントシステム13が含むDBクライアント計算機130は一つでもよいため、一つのDBクライアント計算機130が一つのDBクライアントシステム13でもよい。
【0054】
DBクライアント計算機130は、インターフェース装置131、記憶装置132(メモリを含む)及びそれらに接続されたプロセッサ133を有する。
【0055】
インターフェース装置131は、通信ネットワーク19に接続される。
【0056】
記憶装置132は、サブサービスプログラム180及びCC-OCCプログラム190(及びコーディネータプログラム160)を記憶する。これらがプロセッサ133により実行されることで、サブアプリケーション部18及びCC-OCC19(及びコーディネータ16)が実現される。また、記憶装置132は、後述のマッピングテーブル201を記憶する。
【0057】
DBサーバシステム15は、一つ又は複数のDBサーバ計算機150を含む。DBサーバシステム15が含むDBサーバ計算機150は一つでもよいため、一つのDBサーバ計算機150がDBサーバシステム15でもよい。
【0058】
DBサーバ計算機150は、インターフェース装置151、記憶装置152及びそれらに接続されたプロセッサ153を有する。
【0059】
インターフェース装置151は、通信ネットワーク19に接続される。
【0060】
記憶装置152は、DBマネージャプログラム200を記憶する。これがプロセッサ153により実行されることで、DBマネージャ200が実現される。また、記憶装置152は、DB521を記憶する。
【0061】
【0062】
マッピングテーブル201は、各DBクライアントシステム13に格納され、サブアプリケーション部18により参照されるテーブルである。マッピングテーブル201は、サブアプリケーション部18毎に存在してもよいし、CC-OCC19S毎に存在してもよい。また、各DBクライアントシステム13において、マッピングテーブル201は、トランザクション別に存在してもよいし、全てのトランザクションに共通でもよい。また、マッピングテーブル201は、予め用意されていてもよいし、例えばコーディネータ16により動的に生成されてもよい。本実施形態では、マッピングテーブル201は、サブアプリケーション部18毎に、トランザクション別に予め用意されているとする。
【0063】
マッピングテーブル201は、いずれのサブアプリケーション部18のいずれのCC-OCC19Sがいずれのレコードをリード及び/又はライトするか、すなわち、レコードと担当CC-OCC19Sとサブアプリケーション部18との対応関係を表す。各レコードについて、「担当CC-OCC19S」とは、当該レコードのリード及び/又はライトを担当する(当該レコードのリード及び/又はライトが許可されている)CC-OCC19Sである。例えば、マッピングテーブル201は、CC-OCC19S毎に、当該CC-OCC19SのIDと、当該CC-OCC19Sにレコードのリード要求及び/又はライト要求を送信可能なサブアプリケーション部18のIDと、当該CC-OCC19Sが担当CC-OCC19Sとしてリード及びライトが可能なレコードのIDを表す。
【0064】
上述したように、本実施形態では、各トランザクションについて、サブトランザクションとCC-OCC19Sが1:1で対応し、一つのサブアプリケーション部18につき一つのCC-OCC19Sがある。そして、マッピングテーブル201において、サブアプリケーション部18間(CC-OCC19S間)でレコードIDが非重複である。これにより、上述の不変式が維持される。なお、既に説明したが、トランザクションが異なれば、サブアプリケーション部18間(CC-OCC19S間)でレコードIDが重複してもよい。例えば、レコードID“001”のレコードを、或るトランザクションではサブアプリケーション部18A(CC-OCC19SA)がリード及び/又はライトし、別のトランザクションではサブアプリケーション部18B(CC-OCC19SB)がリード及び/又はライトしてよい。
【0065】
以下、
図7~
図11を参照して、Tx1の処理の例を説明する。Tx1は、トランザクションの一例であり、Tx1を構成するTx1
Sub1及びTx1
Sub2は、トランザクションを構成する複数のサブトランザクションの一例である。BL1は、ビジネスロジックの一例であり、BL1を構成するBL1
Sub1及びBL1
Sub2は、ビジネスロジックを構成する複数のサブビジネスロジックの一例である。以下、説明を簡単にするために、サブビジネスロジックとサブトランザクションが1:1の関係にあるとする。
【0066】
図7が示すように、コーディネータ16がCC-OCC19CにTx1を開始させる(S701)。
【0067】
BL1Sub1が開始する。具体的には、コーディネータ16が、BL1Sub1の実行を、サブアプリケーション部18Aに要求する(S702)。BL1Sub1は、予めサブアプリケーション部18Aに定義されていてもよいし、コーディネータ16により動的に生成されS702で送信された要求に関連付けられてもよい。
【0068】
サブアプリケーション部18Aが、BL1Sub1の実行要求を受信する(S703)。BL1Sub1において指定されている全リードレコード(リードがされる全レコード)について、S704~S711が行われる。一つのリードレコードを例に取る。
【0069】
サブアプリケーション部18Aが、サブアプリケーション部18Aのマッピングテーブル201(Tx1に対応したマッピングテーブル201)を参照し(S704)、リードレコードのIDに自分のIDが対応しているか否か(リードレコードの担当CC-OCC19Sにアクセス可能なサブアプリケーション部18がサブアプリケーション部18Aであるか否か)を判断する(S705)。S705の判断結果が真の場合、サブアプリケーション部18Aが、リードレコードのリードをCC-OCC19SAに要求し、CC-OCC19SAが、当該要求に応答してレコードをリードし、リードされたレコードを、DBクライアントシステム13Aのメモリに格納する(S706)。当該リードレコードは、CC-OCC19SAが管理するスナップショット(Tx1のスナップショット)におけるRS1に含まれる。
【0070】
S705の判断結果が偽の場合、サブアプリケーション部18Aが、リードレコードのIDに対応したサブアプリケーション部18B(マッピングテーブル201から特定されたサブアプリケーション部18であって、リードレコードの担当CC-OCC19Sにアクセス可能なサブアプリケーション部18B)に、当該リードレコードのリードを要求する(S707)。サブアプリケーション部18Bが、当該要求を受信し(S708)、リードレコードのリードをCC-OCC19SBに要求する。その際、サブアプリケーション部18Bは、サブアプリケーション部18Bのマッピングテーブル201(Tx1に対応したマッピングテーブル201)を参照し、リードレコードの担当CC-OCC19SがCC-OCC19SBであることを特定し、特定されたCC-OCC19SBに、リードレコードのリードを要求してよい。CC-OCC19SBが、当該要求に応答してレコードをリードし、リードされたレコードを、DBクライアントシステム13Bのメモリに格納する(S709)。当該リードレコードは、CC-OCC19SBが管理するスナップショット(Tx1のスナップショット)におけるRS1に含まれる。サブアプリケーション部18Bが、結果を、要求元であるサブアプリケーション部18Aに返し(S710)、サブアプリケーション部18Aが、当該結果を受信する(S711)。
【0071】
BL1
Sub1の全リードレコードについてS704~S711が終了した後、
図8が示すように、BL1
Sub1において指定されている全ライトレコード(ライトがされる全レコード)について、
図8のS801~S808が行われる。一つのライトレコードを例に取る。
【0072】
サブアプリケーション部18Aが、サブアプリケーション部18Aのマッピングテーブル201(Tx1に対応したマッピングテーブル201)を参照し(S801)、ライトレコードのIDに自分のIDが対応しているか否か(ライトレコードの担当CC-OCC19Sにアクセス可能なサブアプリケーション部18がサブアプリケーション部18Aであるか否か)を判断する(S802)。S802の判断結果が真の場合、サブアプリケーション部18Aが、ライトレコードのライトをCC-OCC19SAに要求し、CC-OCC19SAが、当該要求に応答してライトレコードを、DBクライアントシステム13Aのメモリに格納する(S803)。当該ライトレコードは、CC-OCC19SAが管理するスナップショット(Tx1のスナップショット)におけるWS1に含まれる。
【0073】
S802の判断結果が偽の場合、サブアプリケーション部18Aが、ライトレコードのIDに対応したサブアプリケーション部18Bにライトを要求する(S804)。サブアプリケーション部18Bが、当該要求を受信し(S805)、ライトレコードのライトをCC-OCC19SBに要求する。その際、サブアプリケーション部18Bは、サブアプリケーション部18Bのマッピングテーブル201(Tx1に対応したマッピングテーブル201)を参照し、ライトレコードの担当CC-OCC19SがCC-OCC19SBであることを特定し、特定されたCC-OCC19SBに、ライトレコードのライトを要求してよい。CC-OCC19SBが、当該要求に応答して、ライトレコードを、DBクライアントシステム13Bのメモリに格納する(S806)。当該ライトレコードは、CC-OCC19SBが管理するスナップショット(Tx1のスナップショット)におけるWS1に含まれる。サブアプリケーション部18Bが、結果を、要求元であるサブアプリケーション部18Aに返し(S807)、サブアプリケーション部18Aが、当該結果を受信する(S808)。
【0074】
BL1Sub1の全ライトレコードについてS801~S808が終了した後、サブアプリケーション部18Aが、BL1Sub1の結果をコーディネータ16に返す(S809)。コーディネータ16が、当該結果を受信する(S810)。
【0075】
次にBL1
Sub2が開始する。具体的には、
図9が示すように、コーディネータ16が、BL1
Sub2の実行を、サブアプリケーション部18Bに要求する(S901)。BL1
Sub2は、予めサブアプリケーション部18Bに定義されていてもよいし、コーディネータ16により動的に生成されS901で送信された要求に関連付けられてもよい。
【0076】
サブアプリケーション部18Bが、BL1Sub2の実行要求を受信する(S902)。BL1Sub2において指定されている全リードレコード(リードがされる全レコード)について、S903~S910が行われる。一つのリードレコードを例に取る。
【0077】
サブアプリケーション部18Bが、サブアプリケーション部18Bのマッピングテーブル201(Tx1に対応したマッピングテーブル201)を参照し(S903)、リードレコードのIDに自分のIDが対応しているか否か(リードレコードの担当CC-OCC19Sにアクセス可能なサブアプリケーション部18がサブアプリケーション部18Bであるか否か)を判断する(S904)。S904の判断結果が真の場合、サブアプリケーション部18Bが、リードレコードのリードをCC-OCC19SBに要求し、CC-OCC19SBが、当該要求に応答してレコードをリードし、リードされたレコードを、DBクライアントシステム13Bのメモリに格納する(S905)。当該リードレコードは、CC-OCC19SBが管理するスナップショット(Tx1のスナップショット)におけるRS2に含まれる。
【0078】
S904の判断結果が偽の場合、サブアプリケーション部18Bが、リードレコードのIDに対応したサブアプリケーション部18A(マッピングテーブル201から特定されたサブアプリケーション部18であって、リードレコードの担当CC-OCC19Sにアクセス可能なサブアプリケーション部18A)にリードを要求する(S906)。サブアプリケーション部18Aが、当該要求を受信し(S907)、リードレコードのリードをCC-OCC19SAに要求する。CC-OCC19SAが、当該要求に応答してレコードをリードし、リードされたレコードを、DBクライアントシステム13Aのメモリに格納する(S908)。当該リードレコードは、CC-OCC19SAが管理するスナップショット(Tx1のスナップショット)におけるRS2に含まれる。サブアプリケーション部18Aが、結果を、要求元であるサブアプリケーション部18Bに返し(S809)、サブアプリケーション部18Bが、当該結果を受信する(S910)。
【0079】
BL1
Sub2の全リードレコードについてS903~S910が終了した後、
図10が示すように、BL1
Sub2において指定されている全ライトレコード(ライトがされる全レコード)について、
図10のS1001~S1008が行われる。一つのライトレコードを例に取る。
【0080】
サブアプリケーション部18Bが、サブアプリケーション部18Bのマッピングテーブル201を参照し(S1001)、ライトレコードのIDに自分のIDが対応しているか否か(ライトレコードの担当CC-OCC19Sにアクセス可能なサブアプリケーション部18がサブアプリケーション部18Bであるか否か)を判断する(S1002)。S1002の判断結果が真の場合、サブアプリケーション部18Bが、ライトレコードのライトをCC-OCC19SBに要求し、CC-OCC19SBが、当該要求に応答してライトレコードを、DBクライアントシステム13Bのメモリに格納する(S1003)。当該ライトレコードは、CC-OCC19SBが管理するスナップショット(Tx1のスナップショット)におけるWS2に含まれる。
【0081】
S1002の判断結果が偽の場合、サブアプリケーション部18Bが、ライトレコードのIDに対応したサブアプリケーション部18Aにライトを要求する(S1004)。サブアプリケーション部18Aが、当該要求を受信し(S1005)、ライトレコードのライトをCC-OCC19SAに要求する。CC-OCC19SAが、当該要求に応答して、ライトレコードを、DBクライアントシステム13Aのメモリに格納する(S1006)。当該ライトレコードは、CC-OCC19SAが管理するスナップショット(Tx1のスナップショット)におけるWS2に含まれる。サブアプリケーション部18Aが、結果を、要求元であるサブアプリケーション部18Bに返し(S1007)、サブアプリケーション部18Bが、当該結果を受信する(S1008)。
【0082】
BL1Sub2の全ライトレコードについてS1001~S1008が終了した後、サブアプリケーション部18Bが、BL1Sub2の結果をコーディネータ16に返す(S1009)。コーディネータ16が、当該結果を受信する(S1010)。
【0083】
次に、
図11が示すように、コーディネータ16が、BL1
Sub1の実行要求の送信先であるサブアプリケーション部18Aに対し、2フェーズコミットにおける準備要求を送信する(S1101)。サブアプリケーション部18Aが、当該要求を受け(S1102)、準備をCC-OCC19SAに要求し、CC-OCC19SAが、準備処理を行う(S1103)。サブアプリケーション部18Aが、準備処理が成功か否かを判断する(S1004)。S1104の判断結果が真の場合、サブアプリケーション部18Aは、“OK”という結果(応答)をコーディネータ16に返す(S1105)。S1104の判断結果が偽の場合、サブアプリケーション部18Aは、“NG”という結果をコーディネータ16に返す(S1106)。コーディネータ16が、結果をサブアプリケーション部18から受信する(S1107)。
【0084】
BL1Sub2についても、BL1Sub1のS1101~S1107と同様の処理が行われる(S1108~S1114)。
【0085】
準備の要求先の全てのサブアプリケーション部18から準備要求の結果をコーディネータ16が受信した場合、
図12が示すように、コーディネータ16が、全ての結果が“OK”か否かを判断する(S1201)。S1201の判断結果が真の場合、コーディネータ16が、Tx1のコミット処理を行う(S1202)。具体的には、コーディネータ16が、Tx1に関し全てのサブビジネスロジックの送信先のサブアプリケーション部18(準備要求の送信先の全てのサブアプリケーション部)に、コミット要求を送信する。これにより、各サブアプリケーション部18が、当該コミット要求を受け、当該コミット要求に応答して、コミットをCC-OCC19Sに要求し、CC-OCC19Sが、DB521に対しコミットを行う。S1201の判断結果が偽の場合、コーディネータ16が、ロールバック処理を行う(S1203)。
【0086】
以上の
図7~
図12に例示の流れにおいて、下記のうちの少なくとも一つが採用されてよい。
・BL1
Sub1及びBL1
Sub2の各々の割当先は、自動で(例えばコーディネータ16により)、又は、手動で決定されてよい。例えば、サブビジネスロジックとサブアプリケーション部との対応関係を表すテーブルが用意されてよく、当該テーブルを基に、コーディネータ16により、サブビジネスロジックの割当先が特定されて、当該割当先のサブアプリケーション部に当該サブビジネスロジックが送信されてよい。
・BL1
Sub1の処理(S702~S810)及びBL1
Sub2の処理(S901~S1010)は並列に行われてよい。
・BL1
Sub1の準備(S1101~S1107)及びBL1
Sub2の準備(S1108~S1114)は並列に行われてよい。
【0087】
以上が、本実施形態の説明である。
【0088】
本実施形態では、トランザクション毎に、サブトランザクションとCC-OCC19Sが1:1で対応するため、上述の不変式において、Nは、サブトランザクションの数であり、iは、サブトランザクションの通し番号(例えばID)である。しかし、少なくとも一つのトランザクションについて、必ずしも、サブトランザクションとCC-OCC19Sが1:1で対応しなくてもよい。このため、上述の不変式において、Nは、CC-OCC19Sの数であり、iは、CC-OCC19Sの通し番号(例えばID)である。
【0089】
また、サブトランザクションとサブビジネスロジックが1:1で対応し、サブビジネスロジックとサブアプリケーション部18が1:1で対応し、サブアプリケーション部18とCC-OCC19Sが1:1で対応し、且つ、トランザクション毎に、サブビジネスロジック間でリード及び/又はライトされるレコードが非重複であれば、上述の不変式が満たされる。
【0090】
本実施形態では、一つのトランザクションに関し、サブビジネスロジック間でリード及び/又はライトされるレコードが重複していても、上述の不変式(すなわち、CC-OCC19S間でレコードが非重複とされること)が満たされる。なぜなら、サブビジネスロジックにおいて指定されているレコードの担当CC-OCC19Sにアクセス可能なサブアプリケーション部18が、当該サブビジネスロジックを受けたサブアプリケーション部18でなければ、当該レコードのリード及び/又はライトが、当該サブビジネスロジックを受けたサブアプリケーション部18から、当該レコードの担当CC-OCC19Sにアクセス可能なサブアプリケーション部18に依頼され、当該依頼を受けたサブアプリケーション部18により、当該レコードのリード及び/又はライトの要求が担当CC-OCC19Sに送信されるからである。
【0091】
なお、必ずしも、サブアプリケーション部18とCC-OCC19Sが1:1でなくてもよい。例えば、
図13Aが例示するように、一つのサブアプリケーション部18に二つ以上のCC-OCC19Sが存在してもよいし、
図13Bが例示するように、一つのCC-OCC19Sに二つ以上のサブアプリケーション部18が存在してもよい。この場合、各サブアプリケーション部18が、マッピングテーブル201を基に、いずれのレコードをいずれのCC-OCC19Sが担当し当該CC-OCC19Sにいずれのサブアプリケーション部18がアクセス可能かを把握するようになっていてよい。これにより、トランザクション毎に、上述の不変式を満たすことができる。
【0092】
また、必ずしもサブアプリケーション部18間で通信が可能になっていなくてもよい。この場合、例えば、トランザクション毎に、サブビジネスロジック間でレコードが非重複であり、各サブビジネスロジックの割当先のサブアプリケーション部18が、当該サブビジネスロジックにおいて指定されているレコードの担当CC-OCC19Sにアクセス可能なサブアプリケーション部18であれば、コーディネータ16が、各サブビジネスロジックを、当該サブビジネスロジックの割当先のサブアプリケーション部18(CC-OCC19S)に送信することで、上述の不変式を満たすことが期待される。
【0093】
また、各トランザクションについて、サブビジネスロジックを実行した各サブアプリケーション部18への準備要求の送信は、採用されるアイソレーションレベルの実装によって、
図11に例示の通りの1段階でもよいし、図示しない多段階でもよい。例えば、準備要求が2段階の場合、1段階目の準備要求は、レコードの状態を“Prepared”(未確定を意味する状態の一例)に変更する要求でよく、2段階目の準備要求は、DB521からレコードをリードして当該レコードがメモリ上のレコードと一致するか否かをチェックすることであるバリデーションの要求でよい。コーディネータ16は、各サブアプリケーション部18から全ての準備要求に対してOKを受けた場合に、コミット処理(
図12のS1202)を実行してよい。
【0094】
以上、一実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【符号の説明】
【0095】
20:トランザクション処理システム
【要約】 (修正有)
【課題】複数のトランザクションについて、複数のスナップショットの整合性を維持するトランザクション処理システム及び方法を提供する。
【解決手段】トランザクション処理システム20は、複数のサブアプリケーション部と、複数のデータソースクライアントシステムに備えられた複数のCC-OCCのトランザクションマネージャとを含む。各トランザクションについて、当該トランザクションを構成するM個(Mは2以上の整数)のサブトランザクションの処理において二つ以上のサブアプリケーション部からオブジェクトのリード要求及び/又はライト要求を受けるCC-OCCがN個(Nは2以上の整数)の場合、N個の和集合がペアワイズディスジョイントである。N個の和集合の各々について、当該和集合は、当該トランザクションに対応しCC-OCCが管理するスナップショットにおけるリードセットとライトセットとの和集合である。
【選択図】
図3