本出願の実施例を紹介する前に、クラウド技術の分野におけるいくつかの基本的な概念を導入する必要がある。
クラウド技術(Cloud Technology):ハードウェア、ソフトウェア、ネットワーク、その他の一連のリソースをワイドエリアネットワーク又はローカルエリアネットワークで統合して、データの計算、記憶、処理、共有を実現するホスティング技術であり、即ち、クラウドコンピューティングのビジネスモード応用に基づくネットワーク技術、情報技術、統合技術、管理プラットフォーム技術、アプリケーション技術などの総称であり、リソースプールを形成でき、オンデマンドで柔軟かつ便利に使用できる。クラウドコンピューティング技術は、クラウド技術分野の重要なサポートになる。クラウド技術ネットワークシステムのバックグラウンドサービスは、ビデオウェブサイト、画像類ウェブサイト、その他のポータルサイトなど、多くのコンピューティングおよびストレージリソースを必要とする。インターネット業界の高度な発展及び応用に伴い、将来的には、各製品に独自の識別マークが付けられる可能性があり、バックグラウンドシステムに伝送して論理処理を実行する必要があり、異なるレベルのデータは分けられて処理され、あらゆる種類の業界データはいずれも、強力なシステムバッキングを必要とし、クラウドコンピューティングによって実現できる。
クラウドストレージ(Cloud Storage):クラウドコンピューティングの概念から拡張及び開発された新しい概念であり、分散クラウドストレージシステム(以下、ストレージシステムと称する)とは、クラスターアプリケーション、グリッド技術及び分散ストレージファイルシステムなどの機能によって、ネットワークにおける多くの様々な異なるタイプのストレージデバイス(ストレージノードとも呼ばれる)を、アプリケーションソフトウェア又はアプリケーションインターフェースを介して統合して協働させ、データストレージ及びサービスアクセス機能を共同で外部に提供するストレージシステムである。
データベース(Data Base、DB):要するに、電子ファイリングキャビネットと見なすことができ、電子ファイルが記憶される場所であり、ユーザーは、ファイル内のデータに対して追加、クエリ、更新、削除などの操作を実行することができる。「データベース」とは、特定の方式で一緒に記憶され、少なくとも2人のユーザーと共有することができ、冗長性が可能な限り少なく、アプリケーションプログラムから互いに独立しているデータ集合である。
本出願の実施例に関するデータベースシステムは、スタンドアロンデータベースシステム、スタンドアロントがランザクションを主とするデータベースシステム(スタンドアロントランザクション型データベースシステムとも呼ばれる)、スタンドアロンが分析型を主とするがトランザクション処理能力を必要とするデータベースシステムであってもよく、NoSQL(Non-relational SQL、一般に非関係型データベースを指す)系であってもよく、分散データベースシステム、分散トランザクション型データベースシステム、分散ビッグデータ処理システムであってもよい。分散データベースシステムは、異なる変数が異なる物理ノードに分散して記憶されるときに、データ状態一貫性モデルに2つ以上の変数がある状況に対応し、データ状態一貫性モデル及び対応するトランザクション処理フローはいずれも、以降の各実施例において詳細に説明し、ここで説明を省略する。
データベースシステムは、少なくとも1つのノードデバイスを含んでもよく、各ノードデバイスのデータベースは、少なくとも2つのデータテーブルを記憶することができ、各データテーブルは、少なくとも1つのデータ項目(変数バージョンとも呼ばれる)を格納することができる。ノードデバイスのデータベースは、任意のタイプの分散データベースであってもよく、例示的に、ノードデバイスのデータベースは、例えばSQL(Structured Query Language、構造化クエリ言語)データベース、NoSQL、NewSQL(一般に様々な新しいスケーラブル/高性能データベースを指す)などの関係型データベース及び非関係型データベースのうち少なくとも1つを含むことができ、データベースのタイプは、本出願の実施例では特に限定されない。
いくつかの実施例では、本出願の実施例は、ブロックチェーン技術に基づくデータベースシステム(以下、「ブロックチェーンシステム」と略称する)にも適用することができ、上記のブロックチェーンシステムは、本質的に脱中心化分散データベースシステムに属し、コンセンサスアルゴリズムを使用してブロックチェーン上の異なるノードデバイスに記載された元帳データが一致することを保証し、暗号化アルゴリズムによって、異なるノードデバイスの間の元帳データの暗号化伝送及び改ざん不可能を保証し、スクリプトシステムを介して元帳機能を拡張し、ネットワークルーティングによって、異なるノードデバイスの間の相互接続を実行する。
ブロックチェーンシステムは、少なくとも1つのブロックチェーンを含むことができ、ブロックチェーンは、暗号学的方法を使用して関連付けられて生成された一連のデータブロックであり、各データブロックは、バッチネットワーク取引の情報を含み、その情報の有効性を検証し(偽造防止)、次のブロックを生成する。
ブロックチェーンシステムでは、ノードデバイスの間は、ピアツーピア(Peer To Peer、P2P)ネットワークを形成することができ、P2Pプロトコルは、伝送制御プロトコル(Transmission Control Protocol、TCP)上で実行されるアプリケーション層プロトコルである。ブロックチェーンシステムでは、任意のノードデバイスは、次の機能を備えることができる。1)ルーティングとは、ノードデバイスが有する基本的な機能であり、ノードデバイスの間の通信をサポートする。2)アプリケーションとは、ブロックチェーンに配置され、実際のサービスニーズに基づいて特定のサービスを実現し、機能を実現するための関連データを記録して元帳データを形成し、元帳データにデジタル署名を入れてデータソースを示し、元帳データをブロックチェーンシステムにおける他のノードデバイスに送信し、他のノードデバイスは元帳データのソース及び整合性の検証に成功した場合、元帳データを一時的なブロックに追加し、アプリケーションが実現するサービスは、財布、共有元帳、スマートコントラクトなどを含む。3)ブロックチェーンとは、前後の時間順序に従って相互に接続された一連のブロックを含み、新しいブロックは、ブロックチェーンに追加されると削除されることがなく、ブロックは、ブロックチェーンシステムにおけるノードデバイスによってコミットされた元帳データを記録している。
いくつかの実施例では、各ブロックは、本ブロックが取引記録を記憶するハッシュ値(本ブロックのハッシュ値)及び前のブロックのハッシュ値を含むことができ、各ブロックは、ハッシュ値で接続されてブロックチェーンを形成し、また、ブロックは、ブロック生成時のタイムスタンプなどの情報をさらに含んでもよい。
データベースシステムにおけるトランザクション同時実行制御の正確さは、一貫性及び分離性によって説明できるので、本出願の実施例を紹介する前に、一貫性及び分離性を以下に説明する。
一、分離性
トランザクション分離レベルは、あるデータ異常を回避できるかどうかによって定義され、係る可能性のあるデータ異常には、以下のものが含まれる。1)ダーティー読み取りとは、あるトランザクションが別のトランザクションによってまだコミットされていないデータ項目を読み取ったことを意味する。2)非繰り返し読み取りとは、あるトランザクションが同じデータ項目に対して2回反復読み取りを実行して異なる結果を得たことを意味する。3)幻像読み取りとは、トランザクションが操作中に2回の述語クエリ(範囲クエリ)を実行し、2番目のクエリの結果には、1番目のクエリの結果に現れていないデータ項目が含まれているか、又は1番目のクエリの結果中に現れたデータ項目がないことを意味する。
上記の3つのデータ異常を解決できることに基づいて、データベース国際標準ANSI(American National Standards Institute、米国国家標準学会)SQLは、4つの分離レベルを提供し、上記の3つの既知のデータ異常を区別し、目的は、あるデータ異常の存在が許可される場合にトランザクション処理効率を向上させることである。
これらの4つの分離レベルはそれぞれ、以下を含み、1)非コミット読み取り:以上の3つのデータ異常発生を許可する。2)コミット済み読み取り:ダーティー読み取り発生を許可しない。3)再読み込み可能読み取り:ダーティー読み取り、非繰り返し読み取りの発生を許可しない。4)直列化可能:以上の3つのデータ異常はいずれも発生してはいけない。ANSI SQLによって定義される4つの分離レベルとデータ異常との関係は、以下の表1を使用して直観的に表示できる。
これから分かるように、これらの4つの分離レベルは、いずれも、ダーティー書き込み異常の発生を許可しない。ダーティー書き込み異常とは、2つのコミットされていないトランザクションが、同じデータ項目を修正したことを意味する。ANSI SQL標準が策定されたときに知られているデータ異常のタイプは多くなく、後続に新たなデータ異常が発見され続け、上記のいくつかのデータ異常以外に、知られているデータ異常はさらに、更新欠落異常、読み取り半順序異常、書き込み半順序異常、シリアル同時実行現象(Serial-Concurrent-Phenomenon)異常、交差現象(Cross-Phenomenon)異常などを含む。
ANSI SQL標準に基づいて、Jim Greyなどは、6つの分離レベルを再定義し、より多くの異常及びより多くのレイヤーを使用して分離レベルを定義し、これらの6つの分離レベルと対応するデータ異常との間の関係は、以下の表2を使用して直観的に表示できる。
二、一貫性
データベースの一貫性は、トランザクションの操作中に、データベースのデータ状態が1つの一貫性のある状態から別の一貫性のある状態に遷移するように定義される。上記の「一貫性のある状態」とは、データベースシステムによって事前定義されたいくつかのルールを満たすデータ状態であり、例えば、これらのルールは、制約、カスケード、トリガー及び3つの任意の組み合わせ(データの論理セマンティクスに属する)を含むことができ、書き込み半順序異常は、特定のデータの間の制約に違反し、ここでの制約は、ユーザーセマンティクスによって制限されるデータの一貫性に属する。
データベースシステム全体について、一貫性とは、システムレベルの意味も含み、データベースシステムでデータの一貫性を保証するには、データベースシステムが、直列化可能性(Serializability)と回復可能性(Recoverability)の2つの特性を満たす必要があることである。直列化可能性とは、上記の分離性で定義された直列化可能分離レベルであり、直列化可能性は、データが同時操作によって改竄されないことを保証し、回復可能性とは、コミットされたトランザクションが、ロールバックされたトランザクションによって書き込まれたデータを読み取らなかったこと(ダーティー読み取り異常が発生しなかったこと)を指し、回復可能性は、トランザクションがロールバックされた後、データが以前の一貫した状態に戻ることを保証し、ロールバックされたトランザクションは、データの一貫性に影響を与えず、データベースシステムの一貫性状態は、回復可能である。
上記の概念に基づいて、一貫性及び分離性は、データ異常と密接に関連することが分かるが、データベースシステムにおいて如何にデータ異常を識別し回避するかは重要な問題である。データベースの同時アクセス制御アルゴリズムは、ANSI SQL標準で定義された分離レベルを提供するが、異なるデータベースシステムで実現する技術はそれぞれ異なる。
例えば、DB2(DataBase2)、Informixなどのデータベースシステムの直列化可能分離レベルは全て、ロッキング技術を使用して、ロックの相互排他メカニズムに依存してデータ異常の発生を回避し、MySQLデータベースシステムでも、ロッキング技術を使用して直列化可能分離レベルを実現し、また、SI(Snapshot Isolation、スナップショットアイソレーション)技術を使用して反復可能性及びコミット済み読み取り分離レベルを実現する。PostgreSQLデータベースシステムでは、SSI(Serializable Snapshot Isolation、直列化可能スナップショットアイソレーション)技術を使用して、直列化可能分離レベルを実現し、SI技術を使用して反復可能性及びコミット済み読み取り分離レベルを実現する。また、例えば、分散データベースシステムにおける分散一貫性及びトランザクション一貫性を組み合わせた分離レベルに関連するレベルは、実質的に直列化可能を含む線形直列化可能であり、Spanner分散データベースシステムでは、Truetime(実時間)メカニズムを使用して線形直列化可能を実現し、CockroachDB分散データベースシステムでは、因果一貫性及びSSIに類似した技術を使用して直列化可能と因果一貫性の組み合わせを実現する。但し、上記のデータベースシステムの分離レベルの階層が十分ではないため、データベースシステムの柔軟性及びトランザクション処理の効率は十分ではない。
異常の定義及び分離レベルの定義に基づいて同時アクセス制御アルゴリズムを構築することは、各データベーストランザクション処理技術の基礎であり、ANSI SQL標準で定義された4つの分離レベルであろうと、それ以降に開発された6つの分離レベルであろうと、これに基づいて構築されたトランザクション処理システムには依然として次の4つのタイプの問題がある。
第一に、データ異常タイプは、不完全であり、分離レベルを定義するときに採用されるデータ異常タイプには大きな制限がある。
第二に、データ異常の形式化定義は、厳格ではなく、本出願の実施例では、各種のデータ異常について厳格な定義を与え、従来の定義における厳格ではない点を分析した。
第三に、従来の分離レベル体系は、ほとんどロッキング(Locking)技術に依存するが、ロッキング技術は、同時アクセス制御技術の1つに過ぎず、他にも多くの同時アクセス制御技術がある。また、ロッキング技術は、データベースシステムの同時実行性を厳しく制限し、トランザクション処理の効率を低下させるため、従来の分離レベル体系は適切ではない。
第四に、分散トランザクション及び分離レベルについて体系的な分析及び説明がなく、従来のANSI SQL標準がそのまま使用されている。分散トランザクションシナリオにおける分離レベル及び分散トランザクションの間の関連関係に関する体系的研究が不足しており、分散トランザクションの分離レベルに関する定義及び実現技術が不足している。
これに鑑みて、本出願の実施例は、トランザクション処理方法を提供し、それぞれスタンドアロンデータベースシステムに適用されるスタンドアロン同時アクセス制御アルゴリズム、及び分散データベースシステムに適用される分散同時アクセス制御アルゴリズムを含むトランザクション処理プロセスにおける同時アクセス制御アルゴリズムを提供し、当該方法は、さらに改善されたデータ状態一貫性モデルによって、体系的に提案された様々なデータ異常の汎用的な形式定義、完全な分離レベルに基づいて実現可能であり、以下に詳述する。
図1は、本出願の実施例によるトランザクション処理方法の実施環境の概略図である。図1を参照し、本実施例は、分散データベースシステムに適用することができ、当該分散データベースシステムは、ゲートウェイサーバー101、グローバルタイムスタンプ生成クラスタ102、分散ストレージクラスタ103及び分散調整システム104(例えばZooKeeper)を含むことができ、分散ストレージクラスタ103は、データノードデバイス及び調整ノードデバイスを含むことができる。
ゲートウェイサーバー101は、外部からの読み取り・書き込み要求を受信し、読み取り・書き込み要求に対応する読み取り・書き込みトランザクションを分散ストレージクラスタ103に配布し、例えば、ユーザーは、端末上のアプリケーションクライアントにログインした後、アプリケーションクライアントをトリガーして読み取り・書き込み要求を生成させ、分散データベースシステムによって提供されるAPI(Application Programming Interface、アプリケーションプログラミングプログラムインターフェース)を呼び出して当該読み取り・書き込み要求をゲートウェイサーバー101に送信し、例えば、当該APIは、MySQL API(関係型データベースシステムによって提供されるAPI)であってもよい。
いくつかの実施例では、当該ゲートウェイサーバー101は、分散ストレージクラスタ103におけるいずれかのデータノードデバイス又はいずれかの調整ノードデバイスと同じ物理マシン上にマージされ、即ち、あるデータノードデバイス又は調整ノードデバイスをゲートウェイサーバー101として機能させることができる。
グローバルタイムスタンプ生成クラスタ102は、グローバルトランザクションのグローバルコミットタイムスタンプ(Global timestamp、Gts)を生成すために使用され、当該グローバルトランザクションは、分散トランザクションとも呼ばれ、少なくとも2つのデータノードデバイスに関するトランザクションを示し、例えばグローバル読み取りトランザクションは、少なくとも2つのデータノードデバイスに記憶されたデータの読み取りに関してもよく、また、例えば、グローバル書き込みトランザクションは、少なくとも2つのデータノードデバイスへのデータの書き込みに関してもよい。グローバルタイムスタンプ生成クラスタ102は、論理的に、単一ポイントとして扱うことができるが、いくつかの実施例では、1プライマリ3スタンバイのアーキテクチャにより、より高い可用性を備えたサービスを提供でき、当該グローバルコミットタイムスタンプの生成をクラスタの形態で実現することができ、単一ポイント障害を防止することができるため、単一ポイント・ボトルネックの問題を回避する。
任意選択で、グローバルコミットタイムスタンプは、分散データベースシステムでグローバルに一意で単調増加するタイムスタンプ識別子であり、各トランザクションがグローバルにコミットされる順序を標記し、トランザクション間の実時間における前後関係(トランザクションの全順序関係)を反映し、グローバルコミットタイムスタンプは、物理クロック、論理クロック、ハイブリッド物理クロック又はハイブリッド論理クロック(Hybrid Logical Clock、HLC)の少なくとも1つを使用することができ、本出願の実施例は、グローバルコミットタイムスタンプのタイプを具体的に制限しない。
例示的なシナリオでは、グローバルコミットタイムスタンプは、ハイブリッド物理クロックの方法で生成でき、グローバルコミットタイムスタンプは、8バイトで構成でき、最初の44ビットは、物理タイムスタンプの値(即ち、ミリ秒まで正確なUnixタイムスタンプ)にすることができ、これは、合計2
44個の符号なし整数を表すことができるため、理論的に、合計約557.8(
)年の物理タイムスタンプを表すことができる。次の20ビットは、1ミリ秒あたりの単調増加カウントであってもよく、1ミリ秒あたり2
20個(約100万個)のカウントがあり、上記のデータ構成に基づいて、スタンドアロン(いずれかのデータノードデバイス)のトランザクションスループットが10w/s(即ち、1秒あたり10万個)である場合、理論的に1万個のノードデバイスを含む分散ストレージクラスタ103をサポートすることができる。同時に、グローバルコミットタイムスタンプの数は、システムが理論的にサポートできるトランザクションの総数を表し、上記のデータ構成に基づいて、システムは理論的に(2
44-1)*2
20個のトランザクションをサポートすることができる。これは、グローバルコミットタイムスタンプの定義方法の例示にすぎず、ビジネスニーズに応じて、グローバルコミットタイムスタンプのビット数を、より多くのノード数、トランザクション処理数をサポーするように拡張することができ、本出願の実施例は、グローバルコミットタイムスタンプの定義方法を具体的に制限しない。
いくつかの実施例では、当該グローバルタイムスタンプ生成クラスタ102は、物理的に独立していてもよく、分散調整システム104(例えばZooKeeper)とマージされてもよい。
分散ストレージクラスタ103は、データノードデバイス及び調整ノードデバイスを含むことができ、各調整ノードデバイスは、少なくとも1つのデータノードデバイスに対応することができ、データノードデバイスと調整ノードデバイスの区分はトランザクションごとに異なり、グローバルトランザクションを例にとると、グローバルトランザクションの開始ノードは、調整ノードデバイスと呼ばれ、グローバルトランザクションに関する他のノードデバイスは、データノードデバイスと呼ばれ、データノードデバイスの数は、少なくとも1つであってもよく、調整ノードデバイスの数は、少なくとも1つであってもよく、本出願の実施例は、分散ストレージクラスタ103におけるデータノードデバイス及び調整ノードデバイスの数を具体的に制限しない。本実施例によって提供される分散データベースシステムには、グローバルトランザクションマネージャが欠如するため、当該システムでは、XA(eXtended Architecture、X/Open組織分散トランザクション仕様)技術又は2PC(Two-Phase Commit、二フェーズコミット)技術を使用してクロスノードトランザクション(グローバルトランザクション)をサポートし、クロスノード書き込み操作中のデータ的原子性及び一貫性を保証することができ、この場合、調整ノードデバイスは、2PCアルゴリズムにおけるコーディネータとして機能し、当該調整ノードデバイスに対応する各データノードデバイスは、2PCアルゴリズムにおける参加者として機能する。
任意選択で、各データノードデバイスは、スタンドアロン装置であってもよく、プライマリ・スタンバイ構成を採用してもよく、各調整ノードデバイスは、スタンドアロン装置であってもよく、プライマリ・スタンバイ構成(即ち、1プライマリマルチスタンバイクラスタ)を採用してもよく、図1に示すように、ノードデバイス(データノードデバイス又は調整ノードデバイス)が1プライマリ2スタンバイクラスタであることを例とし、各ノードデバイスは、1つのプライマリマシン及び2つのスタンバイマシン(即ち、スペアマシン)を含み、任意選択で、各プライマリマシンには、それそれ対応してエージェント(agent)装置が配置され、各スタンバイマシンにも、それぞれ対応して、エージェント(agent)装置が配置され、エージェント装置は、プライマリマシン又はスタンバイマインから物理的に独立してもよく、もちろん、エージェント装置は、プライマリマシン又はスタンバイマシン上の1つのエージェントモジュールとしても使用することができ、ノードデバイス1を例として、ノードデバイス1は、1つのプライマリデータベース及びエージェント装置(プライマリdatabase+gent、プライマリDB+agentと略称される)を含み、また、2つのスタンバイデータベース(即ち、2つの予備データベース)及びエージェント装置(スタンバイdatabase+agent、スタンバイDB+agentと略称される)を含む。
例示的なシナリオでは、各ノードデバイスに対応するプライマリマシン、又はプライマリマシン及びスタンバイマシンのデータベースインスタンス集合は、1つのSET(集合)と呼ばれ、例えば、あるノードデバイスがスタンドアロン装置であると仮定すると、当該ノードデバイスのSETは、当該スタンドアロン装置のデータベースインスタンスのみであり、あるノードデバイスが1プライマリ2スタンバイクラスタであると仮定すると、当該ノードデバイスのSETは、プライマリデータベースインスタンス及び2つのスタンバイデータベースインスタンスの集合である。この場合、クラウドデータベースの強力な同期技術を利用してプライマリマシンのデータとスタンバイマシンのコピーデータの一貫性を保証することができ、任意選択で、各SETは、ビックデータシナリオにおけるビジネス処理のニーズに対応するように線形拡張することができる。いくつかの金融ビジネスシナリオでは、グローバルトランザクションは通常、SET間の転送を指す。
分散調整システム104は、ゲートウェイサーバー101、グローバルタイムスタンプ生成クラスタ102又は分散ストレージクラスタ103の少なくとも1つを管理するために使用することができ、任意選択で、技術者は、端末上のスケジューラ(scheduler)を介して当該分散調整システム104にアクセスすることができ、これにより、フロントエンドのスケジューラによりバックエンドの分散調整システム104を制御し、各クラスタ又はサーバーに対する管理を実現する。例えば、技術者は、スケジューラによってZooKeeperを制御して、あるノードデバイスを分散ストレージクラスタ103から削除し、即ち、あるノードデバイスを無効にすることができる。
上記の図1は、軽量なグローバルトランザクション処理を提供するアーキテクチャ図であり、分散データベースシステムの一種である。分散データベースシステム全体は、1つの大きな論理テーブルを共同で維持すると見なすことができ、この大きなテーブルに記憶されたデータは、プライマリキーを介して分散ストレージクラスタ103における各ノードデバイスに分散され、各ノードデバイスに記憶されたデータは、他のノードデバイスから独立しているため、ノードデバイスによる大きな論理テーブルの水平分割を実現する。上記のシステムでは、各データベースにおける各データテーブルを水平に分割してから分散して記憶することができるので、このようなシステムは、「シャーディング」のアーキテクチャを有すると称することができる。
上記の分散データベースシステムでは、書き込み操作のデータの原子性及び一貫性はXA/2PCアルゴリズムに基づいて実現され、読み取り操作のデータ一貫性の問題は、軽量の脱中心化分散トランザクション処理メカニズムを構築することによって改善する必要があり、技術的な観点から、シャーディングアーキテクチャにはグローバルトランザクションマネージャが欠如し、つまり、分散トランザクション処理能力が欠如する。上記の軽量の脱中心化分散トランザクション処理メカニズムを構築することによって、分散データベースシステムに水平拡張などの能力を提供し、分散データベースシステムが簡単で普及しやすく、トランザクション処理の効率が高いことを保証することができ、これは、必ず従来の同時実行制御方式で設計された分散データベースアーキテクチャに大きな影響を与え、具体的に分散トランザクション処理メカニズムは、次の実施例で詳述する。
本出願の実施例によって提供されるトランザクション処理方法は、上記のシャーディングアーキテクチャを採用した分散データベースシステムに適用することができ、例えば、当該分散データベースシステムは、分散トランザクション型データベースシステムであり、もちろん、分散関係型データベースシステムであってもよく、また、本出願の実施例によって提供されるトランザクション処理方法は、スタンドアロンデータベースシステムに適用することもでき、分散データベースシステムにとっては、分散トランザクション処理能力が必要であり、異なるシナリオにおける異なるユーザーのアプリケーション要件に対応するようにトランザクション処理の効率を向上させるために、豊富で柔軟な分離レベルを提供する必要がある。
いくつかの実施例では、上記のゲートウェイサーバー101、グローバルタイムスタンプ生成クラスタ102、分散ストレージクラスタ103及び分散調整システム104によって構成される分散データベースシステムは、端末にデータサービスを提供するサーバーと見なすことができ、当該サーバーは、独立した物理サーバーであってもよく、少なくとも2つの物理サーバーからなるサーバークラスタ又は分散データベースシステムであってもよく、クラウドサービス、クラウドデータベース、クラウドコンピューティング、クラウド関数、クラウドストレージ、ネットワークサービス、クラウド通信、ミドルウェアサービス、ドメインネームサービス、セキュリティサービス、CDN(Content Delivery Network、コンテンツ配信ネットワーク)、及びビッグデータ及び人工知能プラットフォームなどの基盤クラウドコンピューティングサービスを提供するクラウドサーバーであってもよい。任意選択で、上記の端末(ユーザー端末)は、スマートフォン、タブレットコンピューター、ノートパソコン、デスクトップコンピュータ、スマートスピーカー、スマートウォッチなどであってもよいが、これらに限定されない。端末及びサーバーは、有線又は無線の通信方式によって直接又は間接的に接続でき、本出願ではこれに限定されない。
本出願の実施例を紹介する前に、まず、データベースシステムに関するいくつかの基本的な用語及び符号表現を紹介する。
トランザクション:データベース管理システムが操作を実行するプロセスにおける1つの論理ユニットであり、1つの限られたデータベース操作シーケンスで構成され、データベースシステム操作の最小の実行ユニットである。
変数:データベース関係システムにおける1つのデータユニットであり、データベース操作のアクター(又は、操作オブジェクト)であり、1つの変数は、少なくとも2つの変数バージョン(以降、「バージョン」と略称する)を含むことができ、トランザクションが変数を更新するたびに、新しい変数バージョンを追加し、変数の各変数バージョンは、自然数をバージョン番号識別子とすることができ、バージョン番号が大きいほど、変数バージョンが新しくなる。
操作:1つのデータベース操作は、操作タイプ、トランザクション、変数バージョンの3つの部分で構成され、操作タイプは、読み取り(R)及び書き込み(W)の2つを含むことができる。例えば、トランザクションTは、変数xを更新して、変数xの新しいバージョンiを生成し、上記の書き込み操作は、WT(xi)と表記することができ、また、例えば、トランザクションTは、変数xのバージョンiの値を読み取り、上記の読み取り操作は、RT(xi)と表記することができる。
トランザクションデータ集合:データ集合は、少なくとも2つの変数のバージョンからなる集合であり、集合における各変数は、最大で1つのバージョンを含み、データ集合DS(T)={xi, yj, zk, ... | x,y,zが変数であり、i,j,kがバージョン番号である}と表記することができる。データベースシステムにおける各トランザクションには、トランザクションの書き込み集合とトランザクションの読み取り集合の2つのトランザクションデータ集合があり、意味は次の通りである。
書き込み集合DSW(T)は、トランザクションTによって書き込まれる新しいデータバージョンを記憶するために使用される。
読み取り集合DSR(T)は、トランザクションTによって読み取られたデータバージョンを記憶するために使用される。
バージョン読み取り集合:少なくとも2つのトランザクションで構成される集合であり、ある変数バージョンを読み取る全てのトランザクションを表し、バージョン読み取り集合TS(xi)={Tu, Tv, Ts, ... | u,v,sがトランザクションIDである}と表記することができ、バージョン読み取り集合は、コミット済みトランザクションを含んでもよいし、非コミットトランザクションを含んでもよく、トランザクションIDは、トランザクション識別子(Identification)である。
本出願の実施例によって提供されるトランザクション処理方法は、データ状態一貫性モデル(「データ状態モデル」と略称する)に基づいて実行され、本出願によって提供されるデータ状態一貫性モデルは、データベーストランザクション処理技術の範囲内で初めて、包括的かつ系統的に提案されたものであり、当該モデルは、様々なデータ異常の本質を明示し、様々なデータ異常の説明及び表現を統一し、データ異常及び同時トランザクションの間の関連関係を解釈し、また、より多くの新しい未知のデータ異常を発見することができ、データベースシステムの一貫性をよりよく保証することができる。
なお、データ状態一貫性モデルには、2つの基本ルールが含まれ、第一に、ダーティー書き込みデータ異常を禁止する、即ち、同じ変数に同時に書き込むことを禁止することであり、ロッキング方式を使用して、書き込みと書き込みの競合を禁止することができ、第二に、ダーティー読み取りデータ異常を禁止することであり、コミット済み読み取りのルールを採用することにより、ダーティー読み取り異常の発生を禁止し、即ち、読み取られたデータが必ずコミットされた後のデータであることを保証する。
上記のデータ状態一貫性モデルでは、トランザクションとトランザクション操作の変数バージョンとの間の関係を、グラフィカル表現として描画することができ、以下、データ状態一貫性モデルに関するいくつかのグラフィカルな概念を定義する。
1、ノード:
各変数バージョンは、1つのノードであり、1つの変数は、少なくとも2つのバージョンを含むことができるため、グラフィカル表現において、同じ変数の少なくとも2つのバージョンは、古いものから新しいものへの順序で縦方向に配列され、即ち、グラフィカル表現において、同じ変数の少なくとも2つのバージョンは、縦方向の列であり、上部に位置するバージョンが最も古く、下部に位置するバージョンが最も新しい。
2、垂直辺:
同じ変数の2つの隣接するバージョンの間に存在する垂直な辺は、「垂直辺」と呼ばれる。垂直辺は、同じ変数におけるバージョンの遷移を表し、更新操作(例えばデータ操作言語(Data Manipulation Language、DML)の更新(UPDATE)ステートメント)は、データ状態を変化させることができ、これにより、一つの垂直辺を生成する。図2は、本出願の実施例による垂直辺の概略図であり、図2に示すように、t0時点で、変数バージョンx0が存在し、t1時点で、トランザクションT1は変数バージョンx0を変数バージョンx1に更新し、W(x1)と表記し、変数バージョンx0と変数バージョンx1との間の垂直セグメント200は、「垂直辺」である。
なお、垂直辺は、「変数のあるバージョンから別のバージョンへの更新」という意味を含むので、1つのトランザクションについて、その垂直辺の上端に接続された変数バージョンは、現在のトランザクションの読み取り集合に追加すべきである(実際に当該変数バージョンに対して読み取り操作が実行されたかどうかに関わらない)。また、バージョンの更新は、同時トランザクションではなく、単一トランザクションのみによって実行できる。このようにして、書き込みの同時実行を禁止して、ダーティー書き込みデータ異常の発生を回避することができる。また、垂直辺と垂直辺がオーバーラップできず、垂直辺は、2つの隣接するバージョンの間の辺であり、これにより、更新欠落データ異常の発生を回避することができる。
3、斜辺:
2つの異なる変数のバージョンの間に存在する辺は、「斜辺」と呼ばれる。斜辺は、2つの変数の間の一貫性状態を表し、斜辺は、書き込み書き込み斜辺(「WW斜辺」又は「天辺」とも呼ばれる)、読み取り書き込み斜辺(「RW斜辺」とも呼ばれる)、読み取り読み取り斜辺(「RR斜辺」又は「読み取り専用斜辺」とも呼ばれる)に分けることができ、それらの意味は次の通りである。
1)天辺:同一のトランザクションが2つ以上の異なる変数を変更した場合、これらの変数は、2つの間で1つの天辺を構成する。言い換えれば、トランザクションの書き込み集合において、任意の2つの変数の間に必ず1つの天辺が存在し、天辺の両端は、それぞれ2つのノードの上端に接続されている。図3は、本出願の実施例による天辺の概略図であり、図3に示すように、t0時点で、変数バージョンx0及び変数バージョンy0が存在し、t1時点で、トランザクションT1は、変数バージョンx0を変数バージョンx1に更新し、変数バージョンy0を変数バージョンy1に修正し、W(x1)及びW(y1)と表記し、変数バージョンx1と変数バージョンy1との上頂点の間の接続線300は、「天辺」である。
なお、いくつかの実施例では、1つのトランザクションが1つの変数のみを変更した場合、当該トランザクションの垂直辺の終点は、天点と称することができ、天点は、天辺の特別な形であり、天辺の両端点が重なり合うことに相当し、図2を例として、トランザクションT1が1つの変数バージョンx0のみを変更し、その垂直辺の終点は、変数バージョンx1であるため、図2における変数バージョンx1は1つの天点である。また、1つの垂直辺は、天点を越えて存在することができず、ある垂直辺が天点を越える場合は、2つの同時トランザクションが同時に同じ変数に書き込むことを意味し、書き込み書き込み競合が発生し、即ち、ダーティー書き込みデータ異常が発生し、基本ルールに従って、ダーティー書き込みデータ異常を禁止する必要があるため、垂直辺は、天点を越えることができない。
2)読み取り・書き込み斜辺:あるトランザクションが任意の2つの異なる変数の間で、前後に読み取り、書き込み操作が存在する場合、当該トランザクションによって読み取られた変数のバージョンと書き込まれた変数のバージョンの間は、一つの読み取り・書き込み斜辺を構成することができる。読み取り・書き込み斜辺の読み取り端は、ノードの下端に接続され、書き込み端は、ノードの上端に接続される。図4は、本出願の実施例による読み取り・書き込み斜辺の概略図であり、図4に示すように、t0時点で、変数バージョンx0及び変数バージョンy0が存在し、t1時点で、トランザクションT1は、変数バージョンx0を変数バージョンx1に更新し、変数バージョンy0を読み取り、W(x1)及びR(y0)と表記し、変数バージョンy0の下頂点と変数バージョンx1の上頂点との間の接続線400は、「読み取り・書き込み斜辺」である。
3)読み取り専用斜辺:同一のトランザクションが、2つ以上の異なる変数を読み取る場合、これらの変数は、2つの間で読み取り専用斜辺を構成することができる。言い換えれば、トランザクションの読み取り集合において、任意の2つの変数の間に必ず1つの読み取り専用斜辺が存在する。読み取り専用斜辺の両端はそれぞれ、2つのノードの下端に接続され、即ち、変数バージョンがコミット済み状態にある場合にのみ、トランザクションにより読み取ることができ、この場合、コミット済み読み取りルールを実行する。図5は、本出願の実施例による読み取り専用斜辺の概略図であり、図5に示すように、t0時点で、変数バージョンx0及び変数バージョンy0が存在し、その後、あるトランザクションは、変数バージョンx0を変数バージョンx1に更新し、t1時点で、トランザクションT1はそれぞれ、変数バージョンx1及び変数バージョンy0を読み取り、R(x1)及びR(y0)と表記し、変数バージョンy0の下頂点と変数バージョンx1の下頂点との間の点線500は、「読み取り専用斜辺」である。
4、一貫性状態辺:
一貫性状態辺は、少なくとも1つの斜辺及び/又は垂直辺を端から端まで接続することによって形成され、少なくとも2つの変数の間の一貫性状態を説明するために使用される。例えば、図3の変数バージョンx0と変数バージョンx1との間に形成された垂直辺、変数バージョンx1と変数バージョンy1との間に形成された天辺、変数バージョンy0と変数バージョンy1との間に形成された垂直辺のように、これらの3つの辺は一緒に、1つの一貫性状態辺を構成し、また、例えば、図4の変数バージョンx0と変数バージョンx1との間に形成された垂直辺、変数バージョンy0と変数バージョンx1との間に形成された読み取り書き込み斜辺のように、これら2つの辺は一緒に、1つの一貫性状態辺を構成し、また、例えば、図5の変数バージョンy0と変数バージョンx1との間に形成された読み取り専用斜辺のように、当該読み取り専用斜辺は、それ自体で1つの一貫性状態辺を構成することができる。
一貫性状態辺は、少なくとも2つのトランザクションの斜辺及び/又は垂直辺に係る可能性があり、即ち、一貫性状態辺にあるノードの間はデータ一貫性を保持するが、これらのノードは、必ずしも単一のトランザクションによって操作されるとは限らず、少なくとも2つの同時トランザクションに係る可能性がある。例えば、図5の変数バージョンx0と変数バージョンx1との間に形成された垂直辺及び変数バージョンy0と変数バージョンx1との間に形成された読み取り専用斜辺は一緒に一貫性状態辺を構成することができるが、垂直辺は、あるトランザクションが更新操作を実行することによって生成され、読み取り専用斜辺は、別のトランザクションが読み取り操作を実行することによって生成され、両者は異なるトランザクションに対応するが、一緒に1つの一貫性状態辺を構成することができる。
いくつかの実施例では、垂直辺は、一貫性状態辺によって無視できるので、垂直辺は、他の斜辺と一緒に動的辺交差を構成することがないが(動的辺交差は、データ異常があることを意味する)、ある特定の場合、垂直辺は、一貫性状態辺の構成部分であり、この場合、垂直辺は、一貫性状態辺によって無視できない。
一例では、依然として図5を例として、変数バージョンx0と変数バージョンx1との間に形成された垂直辺は、一貫性状態辺のうち最外層の辺とし、無視でき、変数バージョンy0と変数バージョンx1との間に形成された読み取り専用斜辺は、一貫性状態辺とすることができる。
別の例では、図6は、本出願の実施例による一貫性状態辺の原理図であり、図6を参照し、トランザクションT1は変数バージョンz0を読み取り、変数バージョンx1を書き込み、「R(z0) W(x1)」と表記し、トランザクションT2は、変数バージョンy0を読み取り、変数バージョンz1を書き込み、「R(y0) W(z1)」と表記し、600に示すように、変数バージョンx0と変数バージョンx1との間に形成された垂直辺、変数バージョンz0と変数バージョンx1との間に形成されたRW斜辺、変数バージョンz0と変数バージョンz1との間に形成された垂直辺、変数バージョンy0と変数バージョンz1との間に形成されたRW斜辺は、一緒に一貫性状態辺を構成することができ、これは、2つのトランザクションT1及びT2からなる一貫性状態辺であり、変数バージョンx0と変数バージョンx1との間に形成された垂直辺は、一貫性状態辺の最外層の辺とし、省略でき、変数バージョンz0と変数バージョンz1との間に形成された垂直辺は、一貫性状態辺の内層の辺とし、省略できず、これは、内層の垂直辺が他の斜辺を接続する役割を果たすため、他の斜辺と一緒に動的辺交差を構成する可能性があるからであり、このような場合、垂直辺は省略できない。
一貫性状態辺は、トランザクションがコミットされたかどうかに従って、2種類に分けられ、以下にそれぞれ説明する。
1)静的辺:静的一貫性状態辺を指し、静的辺におけるノードは、コミット済みトランザクションによって生成され、コミット済みトランザクションの関連点(ある変数の状態)の間の辺は、1つ以上のRR斜辺からなる一貫性状態辺であり、静的辺とも呼ばれる。静的辺は、履歴時点でデータ状態が変化した後、各変数バージョンの間の一貫性関係を反映し、履歴状態データは、トランザクションがコミットされた後に形成され、読み取ることしかできず、改竄することができない。履歴状態データを読み取る場合、静的辺は、読み取られた変数の間が同じ一貫性状態にあることを保証することができる。
図7は、本出願の実施例による静的辺の概略図であり、図7に示すように、3つの変数の初期状態はそれぞれr11、r21、r31であり、時間の経過とともに(図7の上から下へは時間の増加を表す)、異なるトランザクションは、変数の状態を変更し、変数の状態は変化し、例えば、T1トランザクションがr11をr12に変更し、この場合、r12、r21及びr31の間の点線は、静的辺701を構成し、T2トランザクションは、r21及びr31をそれぞれr22及びr32に変更し、この場合、r22、r32及びr12の間の接続線は、静的辺702を構成し、T3トランザクションは、r12及びr32をそれぞれr13及びr33に変更し、この場合、r13、r33及びr22の間の点線は、静的辺703を構成する。t1とt2時点の間の任意の時点で一貫性が維持される変数バージョンを読み取る場合、r22、r32の変更はまだコミットされていないため、このとき、一貫性を維持できるのは、r12、r21及びr31の間の点線の静的辺701しかないので、読み取られた変数バージョンは、r12、r21及びr31である。
2)動的辺:動的一貫性状態辺を指し、動的辺は、同時トランザクション集合のうち一部のトランザクションが一緒に変数を読み取り・書き込みすることによって構成される辺であり、同時トランザクション集合のうち少なくとも1つのトランザクションは、コミットされていない。動的辺は、少なくとも1つのトランザクションによって構成されてもよく、少なくとも2つのトランザクションによって構成されてもよく、少なくとも2つの同時トランザクションをマージした後に、1つの動的辺を構成することができる(同時トランザクションマージ条件について後述し、ここで説明しない)。動的辺は、同時トランザクションがデータ状態に与える影響を反映する。
静的辺及び動的辺は、時制データベースにおける全状態データの取得方式及び技術を協同的に反映し、さらに、データ状態の形成方式及び技術、即ち、現在状態データ及び同時トランザクションにデータ異常がなく、あるトランザクションがコミットできるかどうかを反映し、全状態データは、履歴状態データ及び現在状態データを含み、履歴状態データは読み取り専用である。
5、同時トランザクション:
データ状態一貫性モデルでは、各完成済みトランザクションは、論理クロックに従って順序付けられ、即ち、トランザクションのコミットタイムスタンプに従ってグローバルに順序付けられる。図7に示すように、時点t0~t3は、論理クロックでシーケンスでき、古い時点は、t0から始まり、t0、t1、t2、t3などの順序で徐々に増加する。
グローバル的秩序が保証される場合、同時トランザクションとは、同時実行される2つ以上のトランザクションがトランザクションの実行期間に同じデータ項目に対して読み取り・書き込み操作を実行することであり、2つのトランザクションを例として説明し、2つのトランザクションが同じ変数に対して同じ時間内に読み取り・書き込み操作を実行した場合、2つのトランザクションが同時に実行されると見なすことができる。トランザクションT1及びトランザクションT2があると仮定すると、2つのトランザクションがts(T1)<tc(T2)且つts(T2)<tc(T1)を満たし、同じ変数に対して読み取り・書き込み操作を実行した場合、即ち、T1のトランザクション開始時点tsがT2のトランザクションコミット時点tcよりも小さく、且つ、T2のトランザクション開始時点tsがT1のトランザクションコミット時点tcよりも小さく、両者が同じ変数に対して読み取り・書き込み操作を実行した場合、T1及びT2が相互に同時トランザクションであると見なすことができる。
いくつかの実施例では、上記のトランザクションの開始時点は、2つの異なる意味があり、その1つは、トランザクション起動時点であり、もう1つは、トランザクションの最初の読み取り操作又は書き込み操作の開始時点であり、両方の意味はいずれも、同時トランザクションを判定する条件として使用することができ、本出願の実施例は、トランザクション開始時点の具体的な意味を制限しない。
即ち、上記のトランザクション開始時点には、2つの定義方式があり、その1つは、トランザクション開始時点がトランザクション起動時点であり、もう1つは、トランザクション開始時点が最初の読み取り操作又は書き込み操作の開始時点であり、2つの定義方式のうち1つを、同時トランザクションを判定する条件として選択することができ、本出願の実施例は、トランザクション開始時点の定義方式の選択を制限しない。
同じ期間内の一連の同時トランザクションは、1つの同時トランザクション集合TSを構成することができ、同時トランザクション集合TS={T1,T2,…,Tn}、n≧2であり、n個のトランザクションのそれぞれについて、当該同時トランザクション集合には、少なくとも1つのそれと同時に実行されるトランザクションがあり、即ち、各トランザクションは、当該同時トランザクション集合において「2つのトランザクションが同時に実行される」状況があり、TSにおける各要素(即ち、トランザクション)は、2つのトランザクションの同時実行を満たす少なくとも1つの要素を見つけることができ、同時トランザクション集合は、同時トランザクションと略称でき、1つの同時トランザクション集合には、少なくとも1つの「動的一貫性状態辺」(即ち、動的辺)が存在する。
トランザクションコミットアルゴリズムは、本質的に、ターゲットトランザクションと同時トランザクションとの間には動的辺交差状況があるかどうかを検証するためのものであり、動的辺交差がない場合、データ異常がないと見なされ、ターゲットトランザクションはコミットすることができ、そうではない場合、データ異常があると見なし、データベースシステムの分離レベルに応じて、現在生じたデータ異常が現在の分離レベルで発生が禁止されたかどうかを判断し、これにより、ターゲットトランザクションがコミット階段に入るのかロールバック階段に入るのかを決定する。つまり、ターゲットトランザクションによって生成されるデータ異常が本出願の実施例で規定された分離レベルで発生が禁止されたかどうかを判断し、ターゲットトランザクションがコミット階段に入るのかロールバック階段に入るのかを決定する。
6、動的辺交差:
動的辺交差の定義は、次の通りであり、2つの同時トランザクション操作が2つの異なる変数を操作し、各トランザクションがそれぞれ異なる変数の異なる状態を操作し、2つの動的辺が異なる状態の間で互いに交差する場合を、動的辺交差と呼ぶ。上記の2つの異なる変数について、例えばx、y、またはx1、x2のような2つの異なる物理変数を意味してもよく、もちろん、例えば{x}、{y1、z0}のような2つの異なる論理変数を意味してもよく、{x}及び{y1、z0}はいずれも論理変数であり、少なくとも2つの変数の組み合わせを表す。
本質的に、動的辺は、グラフィカルには、行列図(データ状態行列)上のトランザクションの操作の異なる変数バージョン間におけるセグメントであり、集合の観点から、トランザクションの読み取り集合及び書き込み集合である。従って、動的辺交差は、本質的に、2つの同時トランザクションTu及びTvの間の読み取り・書き込み集合が特定の条件を満たすかどうかであり、動的辺交差の検出について、本出願の実施例では2つの検出方式を提供し、以下にそれぞれ説明する。
方式一:
初期化プロセス中、動的辺交差値(Dynamic Line Intersection、DLI)の初期値を0に設定し、変数状態値(Variable State、VS)の初期値を0に設定する。当該動的辺交差値は、トランザクションTuとトランザクションTvがデータ状態行列において操作する異なるデータ項目の間のセグメント交差状況を表し、当該変数状態値は、トランザクションTuとトランザクションTvが異なるデータ状態にある変数を操作する状況を表す。
さらに、トランザクションTuの読み取り集合及びトランザクションTvの書き込み集合の間に共通集合があり、かつ、両者の共通集合が空集合ではない場合、DLI=DLI++に設定し、即ち、DLIを、既存の値に1を加算して得られた値に設定し(このような操作は一般に「DLIがインクリメントされる」と呼ばれる)、両者の共通集合に、異なるデータ状態を持つ非空要素がある場合、VS=VS++に設定し、即ち、VSを、既存の値に1を加算して得られた値に設定し(VSがインクリメントされる)、つまり、両者の共通集合には、少なくとも2つのデータ状態に対応する同一の非空要素がある場合、VS=VS++に設定する。
トランザクションTuの書き込み集合及びトランザクションTvの読み取り集合の間に共通集合があり、且つ、両者の共通集合が空集合ではない場合、DLI=DLI++に設定し、即ち、DLIを、既存の値に1を加算して得られた値に設定し(DLIがインクリメントされる)、両者の共通集合に異なるデータ状態を持つ非空要素がある場合、VS=VS++に設定し、即ち、VSを、既存の値に1を加算して得られた値に設定し(VSがインクリメントされる)、つまり、両者の共通集合には、少なくとも2つのデータ状態に対応する同一の非空要素がある場合、VS=VS++に設定する。
トランザクションTuの書き込み集合及びトランザクションTvの書き込み集合には共通集合がない(又は、両者の共通集合が空集合である)場合、基本ルールにおける書き込み書き込み競合の発生を禁止する条件を満たすことを保証でき、即ち、ダーティー書き込みデータ異常が禁止される。動的辺交差値DLIが2以上であり、且つ、VSが1以上である場合、動的辺交差がある、即ち、データ異常があると見なされる。動的辺交差の判定条件を満たした上で、変数状態値VSに基づいてデータ異常タイプを判断することができ、VS=1の場合、データ異常タイプは、読み取り異常であり、1つの変数の非繰り返し読み取り異常、2つの変数の読み取り半順序異常、3つ以上の変数の階段式異常を含み、VS=2の場合、データ異常タイプは、書き込み異常であり、2つの変数の書き込み半順序異常、3个以上の鋸波式異常を含む。
方式二:
初期化プロセスで、各トランザクションにそれぞれ1つのupperと呼ばれるブーリアンを割り当て、upper値をfalseに初期化する。当該ブーリアンは、トランザクションで構成される動的辺のデータ状態行列における垂直位置関係を表し、任意の2つの同時トランザクションTu及びトランザクションTvを例として、Tu.upper=trueの場合、トランザクションTuがある変数において構成する動的辺が別のトランザクションTvよりも新しいことを示し、即ち、同一の変数について、トランザクションTuは当該変数においてトランザクションTvよりも新しい変数バージョンを操作したことを示す。
さらに、トランザクションTuの読み取り集合及びトランザクションTvの書き込み集合に共通集合がある場合、共通集合における各変数xについて、トランザクションTuによって読み取られた変数xのバージョン≧トランザクションTvによって書き込まれた変数xのバージョン、例えば、トランザクションTuが変数バージョンx2を読み取り、トランザクションTvが変数バージョンx1を書き込む場合、Tu.upper=trueに設定し、そうではない場合、トランザクションTuによって読み取られた変数xのバージョン<トランザクションTvによって書き込まれた変数xのバージョン、例えばトランザクションTuが変数バージョンx1を読み取り、トランザクションTvが変数バージョンx2を書き込みむ場合、Tv.upper=trueに設定する。当該ルールは、Tuの書き込み集合とTvの読み取り集合を比較する場合、トランザクションTu及びトランザクションTvのupper値に同様に値を割り当てることができる。
トランザクションTuの書き込み集合及びトランザクションTvの読み取り集合には共通集合がある場合、共通集合における各変数xについて、トランザクションTuによって読み取られた変数xのバージョン>トランザクションTvによって読み取られた変数xのバージョン、例えば、トランザクションTuが変数バージョンx2を読み取り、トランザクションTvが変数バージョンx1を読み取る場合、Tu.upper=trueに設定し、トランザクションTuによって読み取られた変数xのバージョン<トランザクションTvによって読み取られた変数xのバージョン、例えばトランザクションTuが変数バージョンx1を読み取り、トランザクションTvが変数バージョンx2を読み取る場合、Tv.upper=trueに設定し、トランザクションTuによって読み取られた変数xのバージョン=トランザクションTvによって読み取られた変数xのバージョン、例えばトランザクションTu及びトランザクションTvがいずれも変数バージョンx1を読み取る場合、何の操作も行わない。
トランザクションTuの書き込み集合及びトランザクションTvの書き込み集合に共通集合がない(又は、両者の共通集合が空集合である)場合、基本ルールにおける書き込み書き込み競合の発生を禁止する条件を満たすことを保証でき、即ち、ダーティー書き込みデータ異常が禁止される。上記のルールに従って、トランザクションTuの書き込み集合及びトランザクションTvの読み取り集合を比較し、トランザクションTuの読み取り集合及びトランザクションTvの書き込み集合を比較し、トランザクションTuの読み取り集合及びトランザクションTvの読み取り集合を比較した後、Tu.upper=Tv.upper=trueの場合、動的辺交差がある、即ち、データ異常があると見なすことができる。
動的辺交差がデータ異常を構成する分析は、次の通りであり、動的辺は、あるトランザクションで構成され、当該トランザクションが正常にコミットできる場合、当該トランザクションによって形成される動的辺は、一貫性状態であり、2つの動的辺のそれぞれは、1つの一貫性状態辺を保持しており、交差とは、2つの動的辺が互いに相手の一貫性状態辺を跨いで、異なる状態のデータをそれぞれ操作(読み取り・書き込み)することを意味するので、必ずデータ異常があり、動的辺交差が発生した同時トランザクション集合における少なくとも1つのトランザクションはロールバックする必要がある。そのため、データ異常の発生原因は本質的に、同時トランザクションが、同じデータ状態ではないデータを操作することであり、即ち、データ異常を引き起こす。
動的辺交差では、少なくとも1つの動的辺は、1つの非コミットトランザクションを含み、なお、コミット済みトランザクションも、同時トランザクションに属する可能性がある。
同時トランザクション集合では、2つの同じ変数に少なくとも2つの動的辺が存在する場合、2つの動的辺を例として、配列組み合わせに応じて、各辺は、RR斜辺、RW斜辺、WR斜辺の3つの可能がある(WW斜辺は、書き込み書き込み競合を禁止する基本ルールによって禁止されるので、読み取り及び書き込みの4つの可能な組み合わせのうち3つしか選択できない)ため、合計
(即ち、9つ)の組み合わせがある。動的辺であるため、各操作ペアはいずれも、異なる変数をターゲットにし、例えば、RW斜辺は、変数X及びYをターゲットにする場合、展開式が「R
1(X
0) W
1(Y
1)」である。例えばRW-RW組み合わせなどの組み合わせペアでは、トランザクションT
1の最初のRWペアが変数X及びYを含むと仮定すると、トランザクションT
2の2番目のRWペアは、必ず変数Y及びXをターゲットにし、これは、(静的辺ではなく)動的辺を構成するには、異なるデータオブジェクト(即ち、操作オブジェクト)の異なる状態を跨る必要があるためであり、最初のRWペアの展開式が「R
1(X
0) W
1(Y
1)」である場合、2番目のRWペアの展開式は「R
2(Y
0) W
2(X
1)」しかなく、RW-RW組み合わせの完全な操作シーケンスは、R
1(X
0) R
2(Y
0) W
1(Y
1) W
2(X
1)である。但し、操作シーケンスは1つだけではなく、ここで、これを例として説明し、それ以外、動的辺交差を構成できる複数の操作シーケンスを含み、様々な組み合わせについて後で詳述する。
上記の9つの組み合わせのうちWR-WR、WR-RR、WR-RWの3つの関係について、最初の「WR」操作ペアの展開式は「W1(X1) R2(X1)」であり、コミット済み読み取りルールでは、その展開式は、「W1(X1) C1 R2(X1)」であってもよく、書き込みトランザクションが既にコミットされて終了したことを示す。そのため、当該関係は、その後の任意の組み合わせ(RR、RW、WRの1つ)におけるあるトランザクションと同じトランザクションになることができなく、従って、これらの3つの組み合わせは、動的辺交差を構成することができない。Cは、トランザクションTのコミット操作を表し、例えば、C1は、トランザクションT1のコミット操作を表す。
さらに分析すると、9つの組み合わせのうちRW-RW、RR-RR、RW-RR、RW-WR、RR-WR、RR-RW関係は、動的辺交差を構成することができる。これらのモードの間の関係は、次の表3に示し、RW-RW、RW-WRは、基本モードを構成し、残りの4つのモードは、これらの2つの基本モードから発展したものであり、1レベル拡張モードと呼ばれる。
1レベル拡張モードは、本質的に、基本モードであり、1レベル拡張モードを基に、読み取り操作の前に、他の同時コミット済みトランザクションの書き込み操作を拡張し、トランザクションのマージによって1つの基本モードに変換できるため、1レベル拡張モード及び基本モードを識別する。これは、複雑な同時トランザクション操作シーケンスを識別するための理論基礎を提供し、基本モードを識別することは、1レベル拡張モードを識別するための理論基礎を提供し、これらの2つの基礎は「モード等価原理」と呼ばれる。
モード等価原理により、1レベル拡張モードで拡張された書き込み操作は、同じ変数の2つの異なるトランザクションの読み取り操作の間の任意の操作位置に現れることができ、これは、「モード拡張等価原理」と呼ばれる。表3の2番目の書き込み半順序モード「R1(X0) R2(Y0) W1(Y1) W3(X1) C3 R2(X1)」、トランザクションT3の書き込み操作及びコミット操作「W3(X1) C3」は、「R1(X0)」及び「R2(X1)」の間の任意の位置に現れることができ、例えば、上記の表3の2番目の書き込み半順序モードの等価の形式は、「R1(X0) W3(X1) R2(Y0) W1(Y1) R2(X1)」、「R1(X0) R2(Y0) W3(X1) W1(Y1) R2(X1)」を含んでもよい。
モード等価原理及びモード拡張等価原理により、2つの変数に基づく任意の操作シーケンスを表し、表3で説明された基本モード又は1レベル拡張モード(もちろん、1レベル拡張モードも本質的に基本モードである)のいずれかがある場合、必ずデータ異常があり、さもなければ、データ異常がない。
以下、上記の6つのモード(2つの基本モード及び4つの1レベル拡張モードを含む)のそれぞれの操作シーケンスの可能な実現方式について説明する。
1)2つの変数においてR1(X0) R2(Y0) W1(Y1) W2(X1)というRW-RW関係を構成し、RW-RW操作シーケンスでは、読み取り操作と読み取り操作は、相互に位置を交換可能であり、書き込み操作と書き込み操作は、相互に位置を交換可能である。この動的辺交差は、データ異常を直接構成し、従来の書き込み半順序異常に対応する。
2)2つの変数においてR1(X0) R2(Y0) W1(Y1) R2(X1)というRW-RR関係を構成し、RW-RR操作シーケンスでは、最初の2つの読み取り操作と読み取り操作は位置を相互に交換可能であり、最後の2つの書き込み操作及び読み取り操作は、同じ変数に係わらない場合、位置を相互に交換可能である。具体的に、変数バージョンX1は、必ず別のトランザクションの書き込みによって生じるため、R1(X0)とR2(X1)との間にW3(X1)を実行するトランザクションT3が必ず1つ存在する。これらの3つのトランザクションT1~T3は、同時トランザクションであり、書き込み半順序異常を構成する。
3)2つの変数においてR1(X0) R2(Y0) W2(X1) R1(Y1)というRR-RW関係を構成し、RR-RW操作シーケンスでは、最初の2つの読み取り操作及び読み取り操作は位置を相互に交換可能である。具体的に、変数バージョンY1は必ず別のトランザクションの書き込みによって生じるため、R2(Y0)の後、R1(Y1)の前にW3(Y1)を実行するトランザクションT3は必ず1つが存在する。これらの3つのトランザクションT1~T3は同時トランザクションである。トランザクションT1及びトランザクションT3を1つの論理トランザクション{T1,T3}にマージすると、そのモードはRW-RWになるため、論理トランザクション{T1,T3}とトランザクションT2との間は従来の書き込み半順序異常を構成し、即ち、{T1,T3}∩T2=従来の書き込み半順序異常であり、トランザクションT2及びトランザクションT3を1つの論理トランザクション{T2,T3}にマージする場合、そのモードがRW-WRになるため、論理トランザクション{T2,T3}とトランザクションT1との間は、従来の読み取り半順序異常を構成し、即ち、{T2,T3}∩T1=従来の読み取り半順序異常である。
4)2つの変数においてR1(X0) W2(X1) W2(Y1) R1(Y1)というRW-WR関係を構成する。この一連の操作シーケンスRW-WRは、従来の読み取り半順序異常を構成する。コミット済み読み取りルールでは、当該操作シーケンスが実際に「R1(X0) W2(X1) W2(Y1) C2 R1(Y1)」である場合にのみ、R1(Y1)が正常に実行されることが保証される。
5)2つの変数においてR1(X0) W2(Y1) R2(X1) R1(Y1)というRR-WR関係を構成し、RR-WR操作シーケンスでは、最初の2つの読み取り操作と書き込み操作は位置を相互に交換可能であり、最後の2つの読み取り操作と読み取り操作も、位置を相互に交換可能である。具体的に、変数バージョンX1は必ず別のトランザクションの書き込みによって生じるため、R1(X0)の後、R2(X1)の前にW3(X1)を実行するトランザクションT3が必ず1つ存在する。これらの3つのトランザクションT1~T3は、同時トランザクションであり、従来の読み取り半順序異常を構成する。
6)2つの変数においてR1(X0) R2(Y0) R1(Y1) R2(X1)というRR-RR関係を構成し、RR-RR操作シーケンスでは、最初の2つの読み取り操作と読み取り操作は、位置を相互に交換可能であり、最後の2つの読み取り操作と読み取り操作は、位置を相互に交換可能である。具体的に、変数バージョンX1及び変数バージョンY1は必ず別のトランザクションの書き込みによって生じるため、R1(X0) R2(Y0)の後、R1(Y1) R2(X1)の前にW3(Y1) W3(X1)を実行するトランザクションT3が1つあるか、又は、W3(Y1)及びW4(X1)をそれぞれ実行する2つのトランザクションがある可能性がある。これらの3つ又は4つのトランザクション(T1~T3又はT1~T4)は、同時トランザクションであり、従来の読み取り半順序異常に対応する。
動的辺交差が発生する場合に、少なくとも1つの動的辺における非コミットトランザクションは、ロールバックする必要があり、これにより、データ異常の発生原因を解決し、データベースシステムにおけるデータ状態一貫性を保持することができる。
7、データ状態履歴:
1つのデータオブジェクトは、Xで表し、X値の変化は、1つの履歴シーケンスを構成でき、変数の観点から、変数バージョンの遷移は、1つの履歴シーケンスを構成する。変数Xの履歴シーケンス(Data History)は次のようになる。
Data History=DH=X0,X1,... ,Xi,Xi+1,... ,X
ここで、Xiは、変数バージョンと呼ばれ、0≦i≦mであり、mは、変数Xの最大バージョン番号である。
X0は、データの初期バージョンであり、データオブジェクトXが存在することを示し、値は、X0である。
Xi及びXi+1は、隣接する変数バージョンであり、Xiは、Xi+1のbefore-image(ビフォアイメージ)と呼ばれる。
バージョン遷移とは、書き込み操作が発生すると、変数バージョンXiを変数バージョンXi+1に遷移することを意味する。
読み取り操作又は書き込み操作が発生する場合、必ず、データ状態の履歴シーケンスには、それに対応するbefore-imageが存在する。
一例では、W1(X0-X1)を例として、X0-X1は、トランザクションT1においてbefore-imageがX0であり、書き込み操作によって生成される新バージョンがX1であることを示し、同じトランザクションの連続した複数回の書き込み(即ち、少なくとも2回の連続した書き込み)は、少なくとも2つの変数バージョンを構成しなく、即ち、before-imageが同じである場合少なくとも2つの変数バージョンを構成しない。
一例では、R2(X2)を例として、トランザクションT2において、before-imageは、X2であることを示す。
8、データ状態行列:
水平方向:n個の変数は、左から右へ水平に並べ、それぞれX、Y、Z……と呼ばれ、又は、a1、a2、a3……で表される。
垂直方向:単一変数のデータ状態履歴シーケンスである。
水平方向及び垂直方向からなる、n個のデータ、最大m個のデータ状態で構成されるデータバージョンによって、データ状態行列と呼ばれるn*m的行列を構成する。図7に示す静的辺グラフは、データ状態行列の一部である。
同時トランザクションの間に形成された斜辺は、形式的にデータ状態行列における異なる変数の変数バージョンの間の接続線であり、当該データ状態行列の一部でもある。同時トランザクションにおける各同時トランザクションによって形成される動的辺は、動的で、正当な状態を保持できるかどうかがまだ検証されていない一貫性状態辺であり、トランザクションが正常にコミットされた場合、当該動的辺は正当であり、動的辺も静的辺になる。
データ状態行列には、変数バージョンを操作している1つ以上の同時トランザクションの集合があるので、1つ以上の動的辺を形成することができる。ある同時トランザクションの集合では、1つの動的辺しかない場合、当該動的辺によって表されるトランザクションは必ずコミットでき、これは、単一の動的辺が一貫性状態に違反しない、即ち、一貫性状態辺を跨らない、即ち、動的辺交差がないためであり、動的辺交差を構成する2つの動的辺がある場合、別の動的辺によって構成される一貫性データ状態への動的な損傷を回避するように、少なくとも1つの動的辺に対応するトランザクションはロールバックされる必要がある。
本質的に、データ状態行列は、同時トランザクションの操作及びライフスペースであり、履歴トランザクションがこのスペースで沈殿し(動的辺が静的辺に変換され)、競合のある又は競合のない同時トランザクションがこのスペースで発生する(現在存在する動的辺)。
9、動的辺マージ:
2つの同時トランザクションについて、各トランザクションの一貫性状態辺(即ち、動的辺)はデータ異常(動的辺交差)があるか、又はマージできる(即ち、データ異常がない)。即ち、2つの同時トランザクションに動的辺交差がある場合、必ずデータ異常があり、そうではない場合、これらの2つのトランザクションの動的辺は必ずマージできる。
2つのトランザクションのマージについて、3つの次元のマージ、即ち、トランザクションマージ、変数マージ及びデータ状態マージに分けることができ、以下、それぞれ説明する。
1)トランザクションマージ:同時トランザクション集合では、トランザクションT1({T1}と表記する)及びトランザクションT2({T2}と表記する)は、1つの動的辺を構成することができ、トランザクションT1及びトランザクションT2は、1つの論理トランザクション({T1、T2}と表記する)にマージでき、トランザクションT1及びトランザクションT2のマージとは、それぞれトランザクションT1及びトランザクションT2の読み取り・書き込み集合をマージすることであり、トランザクションT1の読み取り集合及びトランザクションT2の読み取り集合のマージ、トランザクションT1の書き込み集合及びトランザクションT2の書き込み集合のマージを意味する。トランザクションをマージする際の重要な条件は、マージされたトランザクションの間に動的辺交差がないことであり、2つのトランザクションに動的辺交差がある場合、マージできない。動的辺マージは形式的に、同時トランザクションの間を1つの論理トランザクションにマージすることであり、本質的に、同時トランザクションの読み取り・書き込み集合をそれぞれマージすることである。
2)変数マージ:トランザクションのマージで、マージされたトランザクションの読み取り集合に変数バージョンXi及びYjが含まれ、マージされた書き込み集合に変数バージョンX(i+1)及びY(j+1)が含まれる場合、さらに変数マージを実行することで、変数X及びYを1つの論理変数{X,Y}にマージすることができ、即ち、マージされたトランザクションの読み取り集合には変数バージョン{Xi,Yj}が含まれ、マージされたトランザクションの書き込み集合には変数バージョン{X(i+1),Y(j+1)}が含まれる。
3)データ状態マージ:トランザクションのマージで、Xi及びX(i+1)などのある変数の少なくとも2つの状態に係る場合、変数が縦方向にマージされた場合、{X(i,i+1)}に変わる。
動的辺マージ定義:それぞれ2つのトランザクションに属する2つの動的辺について、動的辺交差がない場合、前述のトランザクションマージルールに従って、2つのトランザクションが1つの論理トランザクションにマージし、トランザクションがマージされた後、2つのトランザクションの読み取り集合及び書き込み集合は、変数マージルールに従うが、同じ変数について、異なる変数バージョン(即ち、異なる状態のデータバージョン)は、マージされなく、即ち、データ状態のマージは実行されない。
これに基づいて、同時操作シーケンスを判断するために、複雑な同時操作シーケンスから基本操作シーケンスへの簡略化方法を形式的に解釈するための縮退ルールを提案しており、上記の表3では、拡張された1レベル拡張モードを基本モードに簡略化する場合、縮退ルールを採用する。以下では、1レベル拡張モードを基本モードにマージすることを例として、2つの異なる縮退ルールについて説明する。
いくつかの実施例では、1レベル拡張モードが基本モードにマージされるときに、「W3(Y1) C3 R1(Y1)」という形式となり、その縮退ルールは、次の通りであり、同じ状態の変数の場合、書き込み操作を残し(読み取り操作を除去し)、トランザクション番号(トランザクション識別子であってもよい)は、読み取りトランザクションのトランザクション番号を残し(書き込み操作のトランザクション番号を除去し)、これは、トランザクションT1及びトランザクションT3の間の2つの動的辺のマージに相当する。表3における番号が2、3、6であるモードは全て、この縮退ルールに準拠する。番号が3及び4であるRR-RWモードは、異なる縮退ルールを採用しているため、最終的に簡略化された後、異なるデータ異常に対応し、具体的に、前述のルールを使用してマージする場合、異常を、読み取り半順序(番号4)ではなく、書き込み半順序(番号3)と見なす。
いくつかの実施例では、1レベル拡張モードが基本的なモードにマージされるときに、「R2(Y0) W3(Y1)」という形式となり、その縮退ルールは、次の通りであり、同じ変数の場合、書き込み操作を残し(読み取り操作を除去し)、トランザクション番号は、読み取りトランザクションのトランザクション番号を残し(書き込み操作のトランザクション番号を除去し)、変数状態は、最も新しい変数状態を残し、これは、トランザクションT2及びトランザクションT3の間の2つの動的辺がマージされることに相当する。表3における番号が7である2つの1レベル拡張モードが簡略化されるときに、この縮退ルールに準拠し、もちろん、番号4のRR-RWモードは、この縮退ルールを採用しているため、読み取り半順序異常と見なす。
上記の説明では、データ状態一貫性モデルを提供し、上記の様々な制約条件を満たす同時トランザクションは、データ状態一貫性モデルに準拠する。
上記のデータ状態一貫性モデルに基づいて、コミット済み読み取りルールに従って、データ異常を次のように定義することができる。
1、異常点:
ある操作(読み取り、書き込み、コミット、ロールバック)が発生し、動的辺交差が形成される場合、異常が形成され、異常形成点と呼ばれ、異常点と略称される。異常点の形成は、下記の2つのタイプを含む。
1)読み取り・書き込み操作レベル:読み取り又は書き込み操作が発生した場合、異常が形成され、読み取り・書き込み操作レベル異常点と呼ばれ、操作レベル異常点と略称される。
2)トランザクションレベル:操作レベルの異常ではなく、トランザクションがコミット又はロールバックされる場合、異常が形成され、トランザクションレベル異常点と呼ばれ、トランザクションレベル異常点と略称される。
これらの2つの異なるタイプの異常点に対応する異常は、それぞれ操作レベル異常及びトランザクションレベル異常と呼ばれる。
また、これらの2つの異なるタイプの異常点は、トランザクションの同時実行性にも影響し、下記の同時実行性の紹介で詳述する。
2、同時実行性:
2つのトランザクションがts(T1)<tc(T2)且つts(T2)<tc(T1)を満たす場合、2つのトランザクションの並行、又は並行トランザクションと呼ばれる。
2つのトランザクションが並行した上で、2つのトランザクションが少なくとも同じデータオブジェクトを操作した場合、トランザクション同時実行、又は同時トランザクションと呼ばれる。
2つの同時トランザクションの読み取り・書き込み集合(即ち、読み取り集合及び書き込み集合)の共通集合が空集合ではなく、共通操作のデータオブジェクト(実際にデータのあるバージョンオブジェクト)を取得し、これらのデータオブジェクトの各トランザクションにおける対応する最初の操作及び最後の操作は、1つの区間を構成することができ、当該区間は、競合領域と呼ばれ、第1の異常区間とも呼ばれる。競合領域の上限(最大値点)からトランザクションレベル異常点までの間の区間は、第2の異常区間と呼ばれる。
競合領域/第1の異常区間に異常が形成され、即ち、操作レベル異常が形成され、操作レベル異常に対応するトランザクションライフサイクルが短く、他のトランザクションとの同時実行性が低い。この場合、同時実行性一度と呼ばれ、一度と略称される。ここでのライフサイクルが短いのは、ユーザーのトランザクションセマンティクスによって当該トランザクションのライフサイクルが短くなることではなく、異常が既に発生して当該トランザクションが強制的にロールバックされるリストがあるため、トランザクションのライフサイクルが短くなる。
トランザクションレベル異常に対応するトランザクションは、第2の異常区間で存続することができ(トランザクションの存続期間が長く)、他のトランザクションとの同時実行性が高い。この場合は、同時実行性二度と呼ばれ、二度と略称される。一度の同時実行性は、二度の同時実行性よりも小さい。
3、異常分類:
(3.1)データ異常に関する変数の数に従って、データ異常を単一変数異常及び多変数異常に分けることができる。単一変数異常とは、1つの変数のみに関するデータ異常であり、多変数異常とは、2个以上の変数に関するデータ異常である。
(3.2)データ異常に関する変数が同じデータノードデバイス(子ノードとも呼ばれる)に記憶されるかどうかによって、データ異常を分散異常及びローカル異常に分けることができる。
A、分散異常:多変数異常に関する全ての変数が一つの子ノードに記憶されていなければ、当該異常は、分散異常と呼ばれ、分散異常は、必ず多変数異常である。
B、ローカル異常:単一異常であり、当該異常は、ローカル異常と呼ばれる(単一変数異常は必ずローカル異常である)。幻像読み取り異常は、特殊であり、少なくとも2つの変数に関するが、述語を単位として、読み取られたデータのバッチは、「1つの」変数と見なすことができ、述語が新しく追加されたデータは、述語に依存し、幻像読み取り異常も、ローカル異常に属する。分散異常ではないデータ異常は、ローカル異常である。なお、1つの多変数異常も、同じ子ノードで発生する場合がある(即ち、関する全ての変数が1つの子ノードに記憶される)、この場合、多変数異常は、ローカル異常でもある。
(3.3)同時トランザクションの読み取り・書き込み操作は、データ状態行列に存在する変数バージョン及び異常が発生するタイミングなどの要素を直接対象とするかどうかによって、データ異常を広義異常と狭義異常に分けることができる。本出願の実施例で提案されるデータ状態行列によって検出可能な異常は、狭義異常に属する。
(3.3.1)狭義異常:エンティティデータ異常、仮想データ異常及び制約異常を含む。
A、エンティティデータ異常(エンティティデータ類異常とも呼ばれる):データ状態行列に基づいて、同時トランザクションの読み取り・書き込み操作がデータ状態行列に存在する変数バージョンを直接対象とすることによって引き起こされる異常は、エンティティ類データ異常と呼ばれる。例えば、ダーティー書き込み、ダーティー読み取り、中間読み取り、非繰り返し読み取り、更新欠落、読み取り半順序、読み取り・書き込み半順序、書き込み半順序、階段式などの異常は全てエンティティデータ異常に属する。このような異常の特徴は、同時トランザクション読み取り・書き込み操作のデータオブジェクトが既に操作シーケンスに存在することであり、述語を介して関連データオブジェクトを包含することではない。
B、仮想データ異常(仮想類データ異常とも呼ばれる):データ状態行列に基づいて、同時トランザクションの読み取り・書き込み操作が述語を介して関連データオブジェクトを包含することによって引き起こされ、且つ、操作が発生した時に異常の操作セマンティクスが明らかである異常は、仮想類データ異常と呼ばれる。例えば、幻像読み取り異常は、第2回の述語読み取り操作が発生した場合、幻像読み取り異常を構成することができ、操作レベルセマンティクス異常に属する。なお、上記の操作レベルセマンティクス異常は、仮想データ異常に属する。
C、制約異常:トランザクションコミットノードで、データベースデータの一貫性状態は、予め定義されたデータ制約に違反し、制約異常と呼ばれる。例えば、述語書き込み半順序、書き込み半順序、鋸波式などの異常であり、このタイプの異常の操作セマンティクスは、操作が発生したときに不明確であり、結果が形成された後、予め定義されたセマンティクスに基づいて結果を検証することができ、結果レベルセマンティクス異常に属する。なお、上記の結果レベルセマンティクス異常は、制約異常に属する。このタイプの異常は、ユーザーが定義した制約に関連するので、本出願の実施例では、制約異常を、データ状態一貫性モデルの考慮範囲内に含めない。
(3.3.2)広義異常:狭義異常で説明された異常以外に、半分コミット済み読み取り異常を含む。
半分コミット済み読み取り異常:分散シナリオで発生する異常であり、各ノードデバイスでの分散トランザクションのコミット時間が一致しないため発生し、同時実行読み取りトランザクションがデータにアクセスするときに、一部のノードデバイスは既にコミット済みであり、一部のノードデバイスはまだコミットしていないため、読み取りデータが一致しなくなる。本出願の実施例における異常の議論は、スタンドアロンシナリオに焦点を合わせているので、本出願の実施例における半分コミット済み読み取り異常をデータ状態一貫性モデル的考量範囲内に含めない。
4、データ異常タイプ:
本出願の実施例では、上記のデータ状態一貫性モデルに従って、12種類のデータ異常を定義し、ダーティー書き込みデータ異常、ダーティー読み取りデータ異常、中間読み取りデータ異常、非繰り返し読み取りデータ異常、幻像読み取りデータ異常、更新欠落データ異常、読み取り半順序データ異常、ステップデータ異常、書き込み半順序データ異常、述語書き込み半順序データ異常及び鋸波式データ異常を含み、以下で詳述する。
1)ダーティー書き込み(Dirty Write)データ異常:
定義:操作シーケンスがw1[x1]...w2[x2]...のようなデータ異常であり、ダーティー書き込みデータ異常は、操作レベル異常に属する。
但し、ダーティー書き込みデータ異常の操作シーケンスの定義は、w1[x]...w2[x]...{(c1又はa1)と(c2又はa2)が任意の順序であってもよい((c1 or a1) and (c2 or a2) in any order)}にすることができなく、そのうち、順序ペア(a2、c1)又は(a2、a1)の組み合わせは、データの不一致を引き起こさない。しかし、書き込み操作及びロールバック操作の実行により、CPU(Central Processing Unit、中央プロセッサー)リソースが消費されるため、書き込み操作を実行した後ロールバック操作を実行することよりも、定義で発生することを直接禁止するほうがよい。
任意のトランザクションTu(u≧1)について、cuとは、コミットトランザクションTuを示し、auとは、ロールバックトランザクションTuを示し、例えばc1とは、コミットトランザクションT1を示し、a2とは、ロールバックトランザクションT2を示し、以下で再度説明しない。
2)ダーティー読み取り(Dirty Read)データ異常:
定義:操作シーケンスがw1[x1]...r2[x1]...{a1及びc2(a1 and c2)}のようなデータ異常であり、ダーティー読み取りデータ異常は、トランザクションレベルの異常に属する。
しかし、ダーティー読み取りデータ異常の操作シーケンスの定義は、w1[x1]...r2[x1]...{a1 and c2が任意の順序であってもよい(a1 and c2 in either order)}にすることができない。これは、c2が完了し、c1が発生した場合、トランザクションT1のコミットが許可される場合でもトランザクションT1のロールバックが許可される場合でも、データ異常を引き起こすためである。
ダーティー読み取りデータ異常の定義では、a1がc1になった場合、データ異常はないため、a1にするしかない。c2がa2になった場合、異常がないため、c2にするしかない。a1が先に発生した場合、異常を排除するためにc2発生もロールバックする必要がある。トランザクションのコミット又はロールバック操作が実行される場合にのみ、データ異常があるかどうかを効果的に識別することができるため、ダーティー読み取りデータ異常は、トランザクションレベル異常である。
3)中間読み取り(Intermediate Reads)データ異常:
定義:操作シーケンスがw1(x1)...r2(x1)...w1(x2)... {c1及びc2(c1 and c2)}のようなデータ異常であり、中間読み取りデータ異常は、トランザクションレベル異常に属する。
しかし、中間読み取りデータ異常の操作シーケンスの定義は、w1(x1)...r2(x1)...w1(x2)...{c1とc2が任意の順序であってもよい(c1 and c2 in either order)}にすることができなく、これは、c2が完了して、c1が発生した場合、トランザクションT1のコミットが許可される場合でもトランザクションT1のロールバックが許可される場合でも、データ異常を引き起こすためである。
中間読み取りデータ異常の定義では、c1がa1になった場合、当該異常は、ダーティー読み取りであるため、c1にするしかない。c2がa2になった場合、異常がないため、c2にするしかない。
4)非繰り返し読み取り(Fuzzy or Non-Repeatable Read)データ異常:
定義:操作シーケンスがr1[x0]...w2[x1]...c2...r1[x1]のようなデータ異常であり、非繰り返し読み取りデータ異常は、操作レベル異常に属する。
しかし、非繰り返し読み取りデータ異常の操作シーケンスの定義は、r1[x0]...w2[x1]...c2...r1[x1]... c1にすることができない。これは、トランザクションT2が既にコミットされ、トランザクションT1はc1が発生しても、異常を排除するために、最終結果はトランザクションT2のロールバックになるためである。
5)幻像読み取り(Phantom)データ異常:
定義:操作シーケンスがr1[P]...w2[x in P]...c2...r1[P]のようなデータ異常であり、幻像読み取りデータ異常は、操作レベル異常に属する。
しかし、幻像読み取りデータ異常の操作シーケンスの定義は、r1[P]...w2[x in P]...c2...r1[P]...c1にすることができなく、これは、トランザクションT2が既にコミットされ、トランザクションT1はc1が発生しても、異常を排除するために、最終結果はトランザクションT1のロールバックなるためである。
6)更新欠落(Lost Update)データ異常:
定義:操作シーケンスがr1[x0]...w2[x1]...c2...w1[x2]又はrc1[x0]...w2[x1]...c2... w1[x2]のようなデータ異常であり、更新欠落データ異常は、操作レベル異常に属する。
しかし、更新欠落データ異常の操作シーケンスの定義は、r1[x0]...w2[x1]...c2...w1[x2]又は rc1[x0]...w2[x1]...c2...w1[x2]...c1にすることができなく、これは、トランザクションT2が既にコミットされ、トランザクションT1はc1が発生しても、異常を排除するために最終結果はトランザクションT1のロールバックになるためである。
7)読み取り半順序(Read Skew)データ異常:
定義:操作シーケンスがr1[x0]...w2[x1]...w2[y1]...c2...r1[y1]のようなデータ異常であり、読み取り半順序データ異常は操作レベル異常に属する。
しかし、読み取り半順序データ異常の操作シーケンスの定義は、r1[x0]...w2[x1]...w2[y1]...c2... r1[y1]...(c1)にすることができなく、トランザクションT1は実際にロールバックするしかなく、別の選択がない。
いくつかの実施例では、コミット済み読み取りルールが定義されていない場合、読み取り半順序の定義は、r1[x0]...w2[x1]...w2[y1]... r1[y1]...{c1とc2が任意の順序であってもよい(c1 and c2 in either order)}に変更することができる。
8)読み取り・書き込み半順序(Read and Write Skew)データ異常:
定義:操作シーケンスがr1[x0]...w2[x1]...w2[y1]...c2...w1[y2]のようなデータ異常であり、読み取り・書き込み半順序データ異常は、操作レベル異常に属する。
しかし、読み取り・書き込み半順序データ異常の操作シーケンスの定義は、r1[x0]...w2[x1]...w2[y1]...c2... w1[y2]...(c1)にすることができなく、トランザクションT1は実際にロールバックするしかなく、別の選択がない。
いくつかの実施例では、コミット済み読み取りルールが定義されていない場合、読み取り・書き込み半順序データ異常の定義は、r1[x0]...w2[x1]...w2[y1]... w1[y2]...{c1及びc2が任意の順序であってもよい(c1 and c2 in either order)}に変更することができる。
9)ステップ(Step Read Skew)データ異常:
定義:操作シーケンスがr1[x0]...w2[x1]...w2[y1]...c2...w3[y2]...w3[z1]...c3...r1[z1]のようなデータ異常であり、ステップデータ異常は、階段式データ異常とも呼ばれ、操作レベル異常に属する。
しかし、ステップデータ異常の操作シーケンスの定義は、r1[x0]...w2[x1]...w2[y1]...c2... w3[y2]...w3[z1]...c3...r1[z1]...c1にすることができなく、原因の1つは、r1[z1]が一度実行されると、動的辺交差が直ちに形成されるためであり、もう1つは、当該トランザクションを正常にコミットできる可能性がなく、ロールバックを選択する以外、異常を解決する方法がないため、c1が定義に出現しても無意味である。
「w2[y1]...c2...w3[y2]」は、1つのステップであり、当該ステップモードは、任意の少なくとも2つのx及びz以外の変数及びトランザクションに拡張又は変換することができる。例えば、さらに、1つの変数Bと1つのトランザクションT4(トランザクション状況を表4に示す)に拡張し、さらに、3つの変数B、D、E及び3つのトランザクションT4、T5、T6(トランザクション状況を表5に示す)に拡張するなどする。
なお、ステップデータ異常は、3つ以上の変数を含み、拡張形態は少なくとも2つのトランザクションが同じ変数を書き込み、そのうちの1つのトランザクションがコミットされていることを含む。
10)書き込み半順序(Write Skew)データ異常:
定義:操作シーケンスがr1[x0]...r2[y0]...w1[y1]...w2[x1]のようなデータ異常であり、書き込み半順序データ異常は、操作レベル異常に属する。
但し、書き込み半順序データ異常の操作シーケンスの定義は、r1[x0]...r2[y0]...w1[y1]...w2[x1]...{c1とc2が任意の順序であってもよい(c1 and c2 in either order) }にすることができなく、定義における2番目の書き込み操作が完了したら、異常が形成され、トランザクションT1又はトランザクションT2のいずれかをロールバックするように選択することができる。書き込み半順序データ異常は、変数x及びyの間に制約の定義を必要とせず、動的辺交差によっても識別できる。
11)述語書き込み半順序(Predicate Write Skew)データ異常:
定義:操作シーケンスがr1[P]...r2[P]...w1[y1 in P]...w2[x1 in P]...{c1とc2が任意の順序であってもよい(c1 and c2 in either order)}のようなデータ異常であり、述語書き込み半順序データ異常は、トランザクションレベル異常に属する。2番目のトランザクションがコミットされたときに、述語書き込み半順序データ異常が発生し、異常の排除は、コミットされたトランザクションをロールバックすることによって実行するしかない。
但し、述語書き込み半順序データ異常の操作シーケンスの定義は、r1[P]...r2[P]...w1[y1 in P]... w2[x1 in P]にすることができない。異常識別の効率を向上させるために、トランザクションがコミットされるときに、ユーザーによって明示的に定義された制約条件により検証することができる。
当該述語書き込み半順序データ異常は、拡張能力をさらに備え、その拡張形式は、ru[P]...wu[v1 in P]であり、0から任意の少なくとも2つに拡張することができる。当該述語書き込み半順序データ異常は、書き込み半順序異常から鋸波式異常への拡張方式に類似する拡張能力を備え、即ち、当該述語書き込み半順序データ異常の拡張方式は、鋸波式データ異常の拡張に類似し、鋸波式データ異常は次項で詳述する。
当該述語書き込み半順序データ異常は、動的辺交差によって識別することができず、整合性制約によって識別する必要があり、例えば、r1[P]は、xオブジェクトを含まず、w2[x1 in P]は、xオブジェクトを含むため、同じトランザクションの垂直辺及び斜辺接続を形成することができなく、即ち、動的辺がないため、トランザクションレベル異常として強制的に定義される。
12)鋸波式(Sawtooth Write Skew)データ異常:
定義:操作シーケンスがr1[x0]...r2[y0]...r3[z0]...w1[y1]...w2[z1]...w3[x1]のようなデータ異常であり、鋸波式データ異常は、操作レベル異常に属する。
但し、鋸波式データ異常の操作シーケンスの定義は、r1[x0]...r2[y0]...r3[z0]... w1[y1]...w2[z1]...w3[x1]...{c1、c2とc3が任意の順序であってもよい(c1 and c2 and c3 in any order)}にすることができなく、書き込み操作が発生したときに異常を構成する。鋸波式データ異常は、3つ以上の変数を含む。
図8は、本出願の実施例による鋸波式異常の原理図であり、図8を参照し、トランザクション操作シーケンスによって形成された3つの変数の鋸波式データ異常を示す。トランザクションT1は変数バージョンz0を読み取り、変数バージョンx1を書き込み、「R(z0) W(x1)」と表記し、トランザクションT2は変数バージョンy0を読み取り、変数バージョンz1を書き込み、「R(y0) W(z1)」と表記し、トランザクションT3は、変数バージョンx0を読み取り、変数バージョンy1を書き込み、「R(x0) W(y1)」と表記し、トランザクションT1~T3の一貫性状態辺は、800に示すようであり、3つの変数の鋸波式データ異常を基に、任意の少なくとも2つの変数の鋸波式データ異常に拡張することもできる。
拡張方式は801に示すようである。ブロック802内の変数及びトランザクションの関係は、任意の回数コピーされた後、コピーされたコンテンツを当該ブロック802内に入れることにより、変数の数及びトランザクションの数の拡張を達成することができ、ブロック802内の操作モードは、Ru(k0) Wu(b1)として抽象化することができ、当該モードは、1つの鋸歯であり、k0は、x0又は任意の他の変数であってもよいが、最終的に拡張された鋸歯は、読み取り操作によってx0に接続され、トランザクションT3は、b0を読む必要がある。本質的に、図8における変数yに関連する部分も1つの鋸歯であるが、鋸波として書き込み半順序の有効な部分と区別される(少なくとも3つの変数を含む)ため、鋸波式異常の拡張方式について説明するときに言及すべきではない。
なお、上記の操作モードRu(k0) Wu(b1)は、Ru(k0) W(b1) Ru(b1)というモードに変形してもよく、拡張時に、鋸波型のデータ異常は、0から任意の少なくとも2つの鋸歯に拡張することができる。
明らかに、書き込み半順序データ異常及び鋸波式データ異常は、本質的に、同じ種類の異常(書き込み異常)であるが、数学的形式で説明すると、変数の数が異なる相違によって、2つの変数に関する書き込み異常を書き込み半順序異常と呼び、3つ以上の変数に関する書き込み異常を鋸波式異常と呼び、従来のデータ異常の定義との区別にも役立ち、従来の定義では、書き込み半順序異常のみが説明され、変数は2つだけあり、且つこのタイプの例の拡張性が考慮されていない。本出願の実施例では、その備えた無限の拡張能力が考慮されている。読み取り半順序データ異常とステップデータ異常との間の関係は、書き込み半順序データ異常と鋸波式データ異常との間の関係と同様であり、ここで再度説明しない。
上記のデータ異常タイプの詳細な定義に基づいて、本出願の実施例では、データベースシステムに対して新しい分離レベルを定義し、分離レベルの定義は、以下の原則に従い、即ち、同時実行性が高いものから低いものへのプロセスに従って、そのデータの一貫性は、弱いものから強いものへ変化し、許可されるデータ異常は、最多からゼロに変化し、具体的に、非コミット読み取り書き込み、コミット済み読み取り書き込み、スナップショット読み取り履歴、再読み込み可能読み取り及び直列化可能という5つの分離レベルを含み、これらの5つの分離レベルとデータ異常との間の関係は、以下の表6に示す。
1、非コミット読み取り・書き込み(Read/Write Uncommitted、RWU)レベル:コミットされていないトランザクションの中間状態について、読み取り可能で書き込み可能であり、読み取り可能によりダーティー読み取りが発生する可能性があり、書き込み可能によりダーティー書き込みが発生する可能性がある。このRWU分離レベル及び従来の「非コミット読み取り」レベルとの相違は、RWU分離レベルが同時書き込み操作をブロックしないことである。即ち、従来の非コミット読み取りは、ダーティー書き込み異常の発生を許可せず、RWU分離レベルは、ダーティー書き込み異常の発生を許可する。
2、コミット済み読み取り・書き込み(Read/Write Committed、RWC)レベル:コミット済み状態のデータのみ、読み取り可能で書き込み可能であり、読み取り可能は、ダーティー読み取り異常を回避し、即ち、トランザクション実行中のデータ状態を読み取ることができなく、書き込み可能は、ダーティー書き込み異常を回避し、即ち、トランザクション実行中のデータ状態を書き込み/上書きできない。このRWC分離レベル及びRWU分離レベルの相違は、RWC分離レベルで同時書き込み操作が禁止されることである。
3、スナップショット読み取り履歴(Snapshot History、SH):スナップショット読み取り履歴は、履歴の任意の時点(当該時点が、システムの最新の時点である可能性があるが、将来のある時点ではない)に基づいて、履歴内のコミットされたデータを読み取ることができ、即ち、データ状態行列から静的辺を見つけることができ、当該静的辺は、履歴のある時点でのデータの一貫性状態を表すため、読み取りデータの一貫性を保持することができる。スナップショット読み取り履歴とコミット済み読み取り・書き込みの相違は、スナップショット読み取り履歴では更新欠落異常、読み取り半順序異常、読み取り・書き込み半順序異常及び階段式異常が禁止されることである。スナップショット読み取り履歴とJim Greyが提供する従来の「スナップショット」レベルの相違は、この定義におけるスナップショット読み取り履歴レベルでは幻像読み取り異常と非繰り返し読み取り異常の発生が許可されることであり、これは、スナップショット技術が本質的に静的辺技術であるためであり、静的辺は常に、既成事実、即ち「不変の履歴」を表し、幻像読み取り異常及び非繰り返し読み取り異常に対応する操作シーケンスには、2つの履歴の2回読み取り操作があり、これらは類似した操作であり、分離するのではなく1つのカテゴリに分類すべきである。
4、再読み込み可能読み取り(Repeatable Read、RR):述語のない読み取り操作、即ち、トランザクション内の任意の2回の読み取り操作によって読み取られたデータオブジェクトは常に同じである(他のトランザクションによって変更されていないため、システムの同時実行性が低下する)。RR分離レベルは、SH分離レベルに基づくレベルであり、両者の相違は、RR分離レベルでは述語付けセマンティクスに関連するデータ異常を除く他の異常が禁止されることであり、即ち、SH分離レベルと比較して、RR分離レベルでは、非繰り返し読み取り異常、幻像読み取り異常、書き込み半順序異常及び鋸波式異常も禁止されている。
5、直列化可能(Serializable、S):データ異常は発生しない。エンティティデータオブジェクトで発生する異常、抽象セマンティクスで発生する異常のいずれも禁止されている。S分離レベルは、最も高いデータ一貫性レベルである。
なお、Jim Greyなどによって表2では定義されたカーソル安定性(Cursor Stability)分離レベルは、本出願の実施例によって提供される分離レベルにない。当該カーソル安定性レベルが異なる分離レベルを実現する特定のロッキング技術に基づいて定義されるため、特定の実現技術を分離レベル理論に統合することは適切ではない。本出願の実施例によって提供される分離レベル体系は、完全に既知の異常と同時実行性との関係に基づいて定義される。許可されるデータ異常のタイプが多いほど、システムの同時実行性は高くなるが、データ一貫性の強度が低くなる。許可されるデータ異常のタイプが少ないほど、システムの同時実行性が低くなるが、データ一貫性の強度が高くなる。これにより、分離レベルのデータ一貫性の強度は、RWU<RWC<SH<RR<Sという関係がある。
上記のデータ異常の定義、動的辺交差の定義及び分離レベルの定義を提供することに基づいて、図9は、本出願の実施例によるトランザクション処理方法のフローチャートである。図9を参照し、当該実施例は、データベースシステムにおけるいずれかのノードデバイスに適用され、スタンドアロンデータベースシステムの場合、当該ノードデバイスはスタンドアロン装置であってもよく、分散データベースシステムの場合、当該ノードデバイスは、調整ノードデバイス又はデータノードデバイスであってもよく、当該実施例は、次のステップを含む。
901、ノードデバイスは、ターゲットトランザクションの読み取り・書き込み操作が実行されることに応答して、当該ターゲットトランザクションの少なくとも1つの同時トランザクションを取得し、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションは、トランザクションの実行中に同じデータ項目に対して読み取り・書き込み操作を実行する。
上記の少なくとも1つの同時トランザクションとは、ターゲットトランザクションとトランザクションの実行中に同じデータ項目に対して読み取り・書き込み操作を実行するトランザクションである。当該ターゲットトランザクションは、グローバルトランザクションであってもよく、ローカルトランザクションであってもよく、当該グローバルトランザクションとは、ノード間の操作に係るトランザクションであり、グローバルトランザクションは、分散トランザクションとも呼ばれ、ローカルトランザクションとは、単一のノード操作のみに係るトランザクションであり、ローカルトランザクションは、Local Transactionsとも呼ばれ、本出願の実施例は、ターゲットトランザクションのタイプを具体的に限定しない。
上記のプロセスでは、ノードデバイスは、ターゲットトランザクションの実行を開始するときに、当該ターゲットトランザクションの読み取り集合及び書き込み集合を空集合に初期化することができ、任意選択で、ターゲットトランザクションは、端末によって開始でき、このとき、端末とノードデバイスは、ターゲットトランザクションを処理するためのセッションを確立し、端末は、ターゲットトランザクションの実行要求をノードデバイスに送信し、ノードデバイスは、ターゲットトランザクションの実行要求に応答して、当該ターゲットトランザクションの実行を開始し、即ち、ターゲットトランザクションは、ノードデバイスによって実行できる。いくつかの実施例では、端末とノードデバイスがセッションを確立したことがある場合、両者の間に新しいセッションを確立する必要がなく、既に確立されたセッションを再利用すればよい。
読み取り・書き込み集合の初期化中に、ノードデバイスは、データベースシステムの起動時に、オペレーティングシステムへメモリ空間を申請し、当該メモリ空間は、少なくとも1つのトランザクションの読み取り・書き込み集合(読み取り集合及び書き込み集合を含む)を維持するために使用され、ターゲットトランザクションの実行が開始されるときに、ノードデバイスは、当該メモリ空間からメモリを申請し、当該メモリは、当該ターゲットトランザクションの読み取り・書き込み集合(読み取り集合及び書き込み集合を含む)を管理するために使用され、これにより、ノードデバイス上でターゲットトランザクションの読み取り・書き込み集合の作成が完了し、また、作成された読み取り集合及び書き込み集合を空集合に初期化する。
読み取り・書き込み集合の初期化が完了した後、ノードデバイスは、ターゲットトランザクションの実行ステートメントに従って、当該ターゲットトランザクションが変数の更新操作に関するかどうか、即ち、当該ターゲットトランザクションに変数の更新操作があるかどうかを決定し、当該ターゲットトランザクションがいれずかの変数を更新することに応答して、ノードデバイスは、当該変数を当該ターゲットトランザクションの書き込み集合に追加し、当該変数にバージョン番号を割り当てる。例えば、あるトランザクションTが変数xを更新するときに、変数xをトランザクションTの書き込み集合に追加し、変数xにバージョン番号を割り当てる。例示的に、あるトランザクションが変数x0に対して書き込み操作を実行するときに、変数x1をトランザクションT的書き込み集合に追加し、変数xのバージョン番号は1である。異なるトランザクションによる同じ変数の書き込み操作のバージョン番号は整数でインクリメントされる。これにより、新しく発生する読み取り操作も変数のバージョン番号を取得することができる。即ち、データベースシステムは、変数ごとにインクリメントされるバージョン番号を維持する。また、ノードデバイスは、当該ターゲットトランザクションがいずれかの変数を読み取ることに応答して、読み取られたデータは、コミット済み読み取りルールを満たす最新のデータである。
ターゲットトランザクションの読み取り集合及び書き込み集合は、トランザクション操作の進行に伴ってリアルタイムで維持される。読み取り操作が発生すると、読み取られたデータは、読み取り集合に入り、書き込み操作が発生すると、読み取られたデータは、書き込み集合に入る。同じトランザクションが同じ変数バージョンを複数回書き込むと、少なくとも2つの異なる新しいバージョンがあり、書き込み集合において、最も新しいバージョンで古い変数バージョンを置き換え、上記の初期化プロセス及び維持ポリシーは、読み取り書き込み階段トランザクションの読み取り・書き込み集合の形成アルゴリズムと称することができる。
上記の読み取り・書き込み集合の維持ポリシーでは、ターゲットトランザクションの各操作(当該操作が読み取り操作であってもよいし書き込み操作であってもよい)について、当該操作が発生するときに、準備段階に入り、ノードデバイスは、臨界領域に入り、ターゲットトランザクションの読み取り集合及び書き込み集合をトラバースして、ターゲットトランザクションの少なくとも1つの同時トランザクション(例えば全ての同時トランザクション)のトランザクション識別子を取得し、当該少なくとも1つの同時トランザクションのトランザクション識別子を1つのリンクリストTSに保存する。
同時トランザクションを取得するプロセスでは、メモリにおける各データ項目に、本データ項目の読み取り・書き込みを行ったがコミットされていないトランザクションのトランザクション識別子(アクティブなトランザクション識別子と略称される)を記載することができ、各データ項目に記載されたアクティブなトランザクション識別子は1つであってもよく、少なくとも2つであってもよく、空であってもよい。ノードデバイスは、読み取り集合及び書き込み集合における各データ項目に記載された各アクティブなトランザクション識別子を取得するだけで、当該少なくとも1つの同時トランザクションのトランザクション識別子を取得することができる。
上記のプロセスでは、ターゲットトランザクションの各操作が発生したときに準備作業を開始し、ターゲットトランザクションの準備段階に入ることに相当し、準備段階は、トランザクションTがコミット可能かどうかのトランザクション同時アクセス制御異常検証前の準備作業を行い、即ち、準備段階で、トランザクションTがコミットされるかどうかを判定するための準備として、トランザクション同時アクセス制御異常検証前の準備作業を完了し、ノードデバイスは、臨界領域において少なくとも1つの同時トランザクションのトランザクション識別子を見つけた後、臨界領域から退出する。
902、ノードデバイスは、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションの読み取り・書き込み集合に基づいて、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションとの間にデータ異常があるかどうかを判定する。
上記のプロセスでは、当該少なくとも1つの同時トランザクションのうちいずれかの同時トランザクションについて、ノードデバイスは、当該いずれかの同時トランザクションと当該ターゲットトランザクションの読み取り・書き込み集合に基づいて、当該いずれかの同時トランザクションと当該ターゲットトランザクションとの間のターゲット検出結果を取得し、当該いずれかの同時トランザクションのターゲット検出結果が、データ異常があることに応答して、当該いずれかの同時トランザクションと当該ターゲットトランザクションとの間にデータ異常があると決定し、さもなければ、当該少なくとも1つの同時トランザクションのうち当該いずれかの同時トランザクションの次の同時トランザクションに対して、当該少なくとも1つの同時トランザクションのターゲット検出結果が全て、データ異常がないことになるまで、ターゲット検出結果を取得するステップを実行し、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションとの間にデータ異常がないと決定する。ノードデバイスが動的辺交差検出の原理を利用してデータの一貫性検出を実行するため、その一貫性検出アルゴリズムは、動的辺交差とマージアルゴリズムと称することができる。
即ち、ノードデバイスは、少なくとも1つの同時トランザクションのうちL番目の同時トランザクションに対して、L番目の同時トランザクションとターゲットトランザクションの読み取り・書き込み集合に基づいて、L番目の同時トランザクションとターゲットトランザクションとの間のターゲット検出結果を取得し、Lは、正の整数である。ターゲット検出結果がデータ異常がないことに応答して、少なくとも1つの同時トランザクションのうちL+1番目のトランザクションに対して、少なくとも1つの同時トランザクションのターゲット検出結果が全て、データ異常がないことになるまで、ターゲット検出結果を取得するステップを実行し、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常がないと決定する。ノードデバイスは、さらにターゲット検出結果が、データ異常があることに応答して、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常があると決定する。
つまり、少なくとも1つの同時トランザクションにおいて、ターゲット検出結果がデータ異常がある同時トランザクションが存在する場合、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常があると決定し、全ての同時トランザクションのターゲット検出結果が、データ異常がない場合、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常がないと決定する。
ターゲットトランザクションの各操作が発生すると、少なくとも1つの同時トランザクションを取得するステップを実行し、各同時トランザクションに対して動的辺交差とマージアルゴリズムを実行することができる。現在検証段階に入っている判定対象となるターゲットトランザクションをTと仮定すると、ターゲットトランザクションTは、最初に物理トランザクションであり、動的辺交差とマージアルゴリズムによる検証の後、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常がないと決定した場合、マージされた論理トランザクションになる。
検証段階では、2つの異なる動的辺交差とマージアルゴリズムを提供し、第1は、各トランザクションの動的辺交差値DLI及び変数状態値VSに基づいて異常検出を行う方法であり、第2は、各トランザクションのブール型(upper)に基づいて異常検出を行う方法である。
第1の異常検出方式では、ノードデバイスは、DLI及びVSに初期値を配置する必要があり、両者の初期値を0、即ち、DLI=0、VS=0にに配置することができ、次に、以下のループ操作を実行し、リンクリストTSから最初のトランザクションを取り出してTLとして設定し、TLに対してDLI及びVSに基づく異常検出方法を実行し、動的辺交差がある場合、異常発生を報告し、ターゲット検出結果を、データ異常があると決定し、ループを終了し、同時トランザクションとターゲットトランザクションとの間にデータ異常があると決定する。さもなければ、動的辺交差がない場合、TLとターゲットトランザクションTに対して動的辺マージを実行して、新しいトランザクションT-newを取得し、T-newをターゲットトランザクションTに割り当て、リンクリストTSから2番目のトランザクションを取り出してTL+1として設定し、次のループを実行し(新しいT-newとTL+1との間に動的辺交差があるかどうかを判断し)、リンクリストが空になるまで、上記の操作を繰り返して実行し、ループを終了し、ループ終了時にも異常報告がなければ、最終的な異常検出結果を、データ異常がないとして取得し、Lが正の整数である。DLI及びVSに基づく上記の異常検出方法は、次の実施例で詳述し、ここで展開しない。
第2の異常検出方式では、ノードデバイスは、upperと呼ばれるブール型を各トランザクションに割り当て、初期化プロセスで、各トランザクションのupper値を、falseに初期化する。次に、以下のループ操作を実行し、リンクリストTSから最初のトランザクションを取り出してTLとして設定し、TLに対してupperに基づく異常検出方法を実行し、動的辺交差がある場合、異常発生を報告し、ターゲット検出結果を、データ異常があると決定し、ループを終了し、同時トランザクションとターゲットトランザクションとの間にデータ異常があると決定する。さもなければ、動的辺交差がない場合、TLとターゲットトランザクションTに対して動的辺マージを実行して、新しいトランザクションT-newを取得し、T-newをターゲットトランザクションTに割り当て、リンクリストTSから2番目のトランザクションを取り出してTL+1として設定し、次のループを実行し(新しいT-newとTL+1との間に動的辺交差があるかどうかを判断し)、リンクリストが空になるまで、上記の操作を繰り返して実行し、ループを終了し、ループ終了時にも異常報告がなければ、同時トランザクションとターゲットトランザクションとの間にデータ異常がないと決定する。upperに基づく上記の異常検出方法について、次の実施例で詳述し、ここで展開しない。
903、ノードデバイスは、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションとの間にデータ異常がないことに応答して、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションの読み取り・書き込み集合をマージして、当該ターゲットトランザクションをコミットする。
上記のプロセスでは、ターゲットトランザクションがローカルトランザクションである場合、少なくとも1つの同時トランザクションとターゲットトランザクションとの間に在データ異常がない、即ち、ループ終了時にも異常報告がない場合、当該ターゲットトランザクションを直接コミットすることができる。ターゲットトランザクションが分散トランザクションである場合、当該ノードデバイスは、本ノードデバイスの異常検出結果を調整ノードデバイスに報告する必要があり、調整ノードデバイスは、各ノードデバイスから報告された異常検出結果に基づいて、ターゲットトランザクションをコミットするかどうかをグローバルに判断し、全てのノードデバイスから報告された異常検出結果が、データ異常がないことである場合、調整ノードデバイスは、対応するコミット命令を各ノードデバイスに送信し、ノードデバイスは、コミット命令を受信した後ターゲットトランザクションをコミットし、ターゲットトランザクションに対してデータ配置を実行する。さもなければ、いずれかのノードデバイスから報告された異常検出結果が、データ異常があることであれば、調整ノードデバイスは、対応するロールバック命令を各ノードデバイスに送信し、ノードデバイスは、ロールバック命令を受信した後、ターゲットトランザクションをロールバックする。各ノードデバイスの異常検出結果は、当該ノードデバイス上の少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常があるかどうかを示すために使用される。
本出願の実施例によって提供される方法によれば、ターゲットトランザクションの読み取り・書き込み操作が実行されることに応答して、当該ターゲットトランザクションの少なくとも1つの同時トランザクションを取得し、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションの読み取り・書き込み集合に基づいて、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションとの間にデータ異常があるかどうかを決定し、データ異常がない場合、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションの読み取り・書き込み集合をマージして、当該ターゲットトランザクションをコミットし、この方法は、ターゲットトランザクションの各操作が実行されるときにデータベースシステム内の様々なデータ異常を全面的に検出し、データ状態の一貫性を保証することができ、データ状態の一貫性を保証する上で、このようなトランザクション処理メカニズムは、ロッキング技術に完全に依存することも、依存性グラフ技術に完全に依存することもなく、システムの同時実行性の制限を回避し、トランザクション処理の効率を向上させることができる。
上記の全ての選択可能な技術案は、任意の組み合わせを使用して本開示の選択可能な実施例を形成することができ、ここでは説明を繰り返さない。
以下では、データ状態一貫性向けの動的辺交差とマージアルゴリズム(Dynamic Line Intersection - Merge、DLI-M)を詳細に紹介し、DLI-Mアルゴリズムは、データ状態一貫性モデルに基づいてデータ異常を識別して、同時トランザクションがデータ一貫性を満たすかどうかを判断し、DLI-Mアルゴリズムは、述語付け幻像読み取り、述語書き込み半順序データ異常を排除する解决方式がなく、即ち、直列化可能(S)分離レベルのみが実現される。
DLI-Mアルゴリズムは、読み取り書き込み段階でのトランザクション読み取り・書き込み集合形成アルゴリズム、準備段階アルゴリズム及び一貫性検証アルゴリズム(動的辺交差とマージアルゴリズム)を含み、一貫性検証アルゴリズムでは、DLI及びVSに基づく異常検出方法及びupperに基づく異常検出方法をそれぞれ提供し、2つの異常検出方法は、いずれもデータ異常に対する識別及び報告を実現することができ、以下、それぞれ説明する。
1、読み取り書き込み段階でのトランザクション読み取り・書き込み集合形成アルゴリズム
ターゲットトランザクションの実行が開始されるときに、ターゲットトランザクションの読み取り集合及び書き込み集合を空集合に初期化する。
ターゲットトランザクションが変数xを更新するときに、変数xをターゲットトランザクションの書き込み集合に追加し、バージョン番号を変数xに割り当てる。異なるトランザクションによる同じ変数への書き込み操作のバージョン番号は、整数でインクリメントされる。これにより、新しく発生する読み取り操作は、変数のバージョン番号を取得することができ、即ち、変数ごとにインクリメントされるバージョン番号が維持される。
ターゲットトランザクションの読み取り集合及び書き込み集合は、トランザクション操作の実行につれてリアルタイムで維持される。読み取り操作が発生すると、読み取られたデータは、読み取り集合に入り、書き込み操作が発生すると、読み取られたデータは書き込み集合に入る。同じトランザクションが同じ変数バージョンを複数回書き込むと、少なくとも2つの異なる新しいバージョンがあり、書き込み集合において、最も新しいバージョンで古い変数バージョンを置き換える。
また、読み取りプロセスで読み取られたデータは、コミット済み読み取りルールを満たす最新のデータである。
上記のトランザクション読み取り・書き込み集合形成アルゴリズムは、上記のステップ901で説明した読み取り書き込み段階でのステップと類似しており、ここでは再度説明しない。
2、各操作が発生するときに、準備段階アルゴリズムを実行する
ターゲットトランザクションTの各操作(読み取り又は書き込み)が発生したときに、準備段階に入り、準備作業を開始し、準備段階は、ターゲットトランザクションTがコミット可能かどうかのトランザクション同時アクセス制御異常検証前の準備作業を行う。
準備段階では、ノードデバイスは、臨界領域に入り、ターゲットトランザクションTの読み取り集合及び書き込み集合をトラバースし、ターゲットトランザクションTの全ての同時トランザクションのトランザクション識別子を見つけて、リンクリストTS内に入れて記憶し、見つけた後に臨界領域から退出する。メモリには、各データ項目に、本データ項目の読み取り書き込みを行ったがコミットされていないトランザクションのトランザクション識別子が記憶されている。
上記の準備段階アルゴリズムは、上記のステップ901で説明した準備段階のステップに類似しており、ここで再度説明しない。
3、各操作が発生したときに、一貫性検証アルゴリズム(即ち、動的辺交差とマージアルゴリズム)を実行する
ターゲットトランザクションの少なくとも1つの同時トランザクションのうちL番目の同時トランザクションについて、ノードデバイスは、当該L番目の同時トランザクションと当該ターゲットトランザクションの読み取り・書き込み集合に基づいて、当該L番目の同時トランザクションと当該ターゲットトランザクションの間のターゲット検出結果を取得することができ、Lは、正の整数である。ターゲット検出結果が、データ異常がないことに応答して、少なくとも1つの同時トランザクションのうちL+1番目のトランザクションに対して、少なくとも1つの同時トランザクションのターゲット検出結果が全て、データ異常がないと決定されるまで、ターゲット検出結果を取得するステップを実行し、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常がないと決定し、さもなければ、当該ターゲット検出結果が、データ異常があることに応答して、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常があると決定する。
言い換えれば、ノードデバイスは、リンクリストTSから最初のトランザクションを取り出してTLとして設定し、TLに対して動的辺交差とマージアルゴリズムを実行し、動的辺交差がある場合、異常発生を報告し、ターゲット検出結果が、データ異常があると決定し、ループを終了し、同時トランザクションとターゲットトランザクションとの間にデータ異常があると決定する。さもなければ、動的辺交差がないときに、TLとターゲットトランザクションTに対して動的辺マージを実行して、新しいトランザクションT-newを取得し、T-newをターゲットトランザクションTに割り当て、リンクリストTSから2番目のトランザクションを取り出してTL+1として設定し、次のループを実行し(新しいT-newとTL+1との間に動的辺交差があるかどうかを判断し)、リンクリストが空になるまで上記の操作を繰り返して実行し、ループを終了し、ループ終了時にも異常報告がない場合、同時トランザクションとターゲットトランザクションとの間にデータ異常がないと決定する。
本出願の実施例では、動的辺交差とマージアルゴリズムは、2つの異なるタイプを含み、第1は、DLI及びVSに基づく異常検出方法であり、第2は、upperに基づく異常検出方法であり、以下でそれぞれ説明する。
(一)DLI及びVSに基づく異常検出方法
図10は、本出願の実施例によるターゲット検出結果を取得するフローチャートであり、図10を参照し、ノードデバイスが如何に一貫性検証アルゴリズムに基づいてターゲット検出結果を取得するかを示し、ここで、あるループプロセスについて説明する。
1001、少なくとも1つの同時トランザクションのうちいずれかの同時トランザクションについて、ノードデバイスは、第1の集合S1、第2の集合S2及び第3の集合S3を取得し、S1は、ターゲットトランザクションの読み取り集合と当該いずれかの同時トランザクションの書き込み集合との共通集合であり、S2は、ターゲットトランザクションの書き込み集合と当該いずれかの同時トランザクションの読み取り集合との共通集合であり、S3は、ターゲットトランザクションの書き込み集合と当該いずれかの同時トランザクションの書き込み集合との共通集合である。
つまり、少なくとも1つの同時トランザクションのうちL番目の同時トランザクションについて、ノードデバイスは、第1の集合S1、第2の集合S2及び第3の集合S3を取得し、S1は、ターゲットトランザクションの読み取り集合と当該L番目の同時トランザクションの書き込み集合との間の共通集合であり、S2は、ターゲットトランザクションの書き込み集合と当該L番目の同時トランザクションの読み取り集合との間の共通集合であり、S3は、ターゲットトランザクションの書き込み集合と当該L番目の同時トランザクションの書き込み集合との間の共通集合である。
上記のプロセスでは、ノードデバイスは、検証段階に入るときに、現在検証段階に入っている判断対象となるターゲットトランザクションをTと仮定すると、ターゲットトランザクションTの最初の初期値は、物理トランザクションであり、動的辺マージを介して論理トランザクションになる。ノードデバイスは、動的辺交差値DLI及び変数状態値VSに初期値を配置し、両者の初期値を0、即ち、DLI=0、VS=0に配置することができる。
DLI及びVSの初期化が完了した後、ノードデバイスは、リンクリストTSにおける各同時トランザクションループに対して、ターゲット検出結果を取得する操作を実行し、いずれかのターゲット検出結果が、データ異常がある(即ち、少なくとも1つのターゲット検出結果が、データ異常がある)場合、ループを終了し、少なくとも1つの同時トランザクションとターゲットトランザクションとの間の異常検出結果を、データ異常があると決定し、さもなければ、リンクリストTSが空になり、全てのターゲット検出結果がデータ異常がないまで、リンクリストTSにおける次の同時トランザクションのループを実行し続け、ループを終了し、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常がないと決定する。
上記のステップ1001は、いずれかの同時トランザクションTLに対して実行するループ操作の最初のステップであり、このとき、ノードデバイスは、ターゲットトランザクションT及び当該いずれかの同時トランザクションTLの読み取り・書き込み集合に基づいて、ターゲットトランザクションTの読み取り集合と当該いずれかの同時トランザクションTLの書き込み集合との間の共通集合を第1の集合S1として決定し、第1の集合S1は、「S1 = DSR(T) ∩ DSW(TL)」として表すことができ、ターゲットトランザクションTの書き込み集合と当該いずれかの同時トランザクションTLの読み取り集合との間の共通集合を第2の集合S2として決定し、第2の集合S2は、「S2 = DSR(TL) ∩ DSW(T)」として表すことができ、ターゲットトランザクションTの書き込み集合と当該いずれかの同時トランザクションTLの書き込み集合との間の共通集合を第3の集合S3として決定し、第3の集合S3は、「S3 = DSW(T) ∩ DSW(TL)」として表すことができる。
任意選択で、S1、S2、S3を取得するときに、ハッシュテーブルを使用してTLとTのそれぞれの読み取り・書き込み集合を記憶することができるため、線形時間複雑度でそれらの共通集合及び和集合を取得することができる。
なお、S1、S2、S3の間の和集合が空集合である場合、即ち、S1∪S2∪S3が空集合である(簡略化された計算:
、即ちS1、S2、S3が空集合である)場合、T
LとターゲットトランザクションTが同時トランザクションではないことを意味し、ノードデバイスは、T
LをリンクリストTSの末尾に再追加する必要がある。さもなければ、S1、S2、S3の間の和集合が空集合ではない場合、T
LとターゲットトランザクションTが同時トランザクションであることを意味し、この場合、下記のステップ1002-1003を実行して異常検出を行い、異常が発見された場合、ターゲットトランザクションTをロールバックする。
1002、ノードデバイスは、当該第3の集合S3が空集合ではないことに応答して、当該ターゲットトランザクションと当該いずれかの同時トランザクションのコミット状況、及び第1の集合S1と第3の集合S3に基づいて、当該いずれかの同時トランザクションと当該ターゲットトランザクションとの間のターゲット検出結果を取得する。
即ち、ノードデバイスは、S3が空集合ではないことに応答して、ターゲットトランザクションとL番目の同時トランザクションのコミット状況、及び第1の集合S1と第3の集合S3に基づいて、L番目の同時トランザクションとターゲットトランザクションとの間のターゲット検出結果を取得する。
いくつかの実施例では、当該いずれかの同時トランザクションTLがコミットされておらず、且つ、当該ターゲットトランザクションTのターゲットパラメータが1の場合、当該ターゲット検出結果を、データ異常があり、且つ、データ異常タイプがダーティー書き込み異常であると決定し、即ち、L番目の同時トランザクションがコミットされておらず、且つ、ターゲットトランザクションのターゲットパラメータが1の場合、ターゲット検出結果を、データ異常があり、且つ、データ異常タイプがダーティー書き込み異常であると決定する。当該ターゲットパラメータT.no_committedは、当該ターゲットトランザクションの読み取り・書き込み集合に対応するコミット済みトランザクションの数を表す。ループプロセスでは、前回の同時トランザクションとターゲットトランザクションとの間のターゲット検出結果が、データ異常がないことである場合、今回のループを実行する前、前回の同時トランザクションとターゲットトランザクションに対して動的辺マージを実行し、動的辺マージ後に得られた新しいトランザクションをターゲットトランザクションに割り当てる必要があり、動的辺マージは本質的に、2つのトランザクションの読み取り・書き込み集合をマージすることであるため、いずれかのループでは、ターゲットトランザクションの読み取り・書き込み集合は、マージされた読み取り・書き込み集合である可能性があり、ターゲットトランザクションの読み取り・書き込み集合には、あるコミットされたトランザクションの読み取り・書き込み集合の要素があるため、ターゲットパラメータT.no_committedは、読み取り・書き込み集合に含まれる他のコミット済みトランザクションの要素に対応するコミット済みトランザクションの数を表し、即ち、当該ターゲットパラメータは、当該ターゲットトランザクションの読み取り・書き込み集合の要素に対応するコミット済みトランザクションの数を表す。
いくつかの実施例では、当該いずれかの同時トランザクションTLがコミットされ、且つ、当該第1の集合S1と当該第3の集合S3との間の共通集合が空集合ではない場合、当該ターゲット検出結果を、データ異常があり、且つ、データ異常タイプが更新欠落異常であると決定する。即ち、L番目の同時トランザクションがコミットされ、且つ、第1の集合と第3の集合との間の共通集合が空集合ではない場合、ターゲット検出結果を、データ異常があり、且つ、データ異常タイプが更新欠落異常であると決定する。
即ち、
であり、以下の条件のいずれかを満たす場合、ノードデバイスは、ターゲット検出結果を、データ異常があると決定し、同時トランザクションとターゲットトランザクションとの間の異常検出結果を、データ異常があると決定し、書き込み書き込み異常の発生を報告し、ループを終了する。1)当該いずれかの同時トランザクションT
Lがコミットされておらず、且つ、当該ターゲットトランザクションTのターゲットパラメータT.no_committed=1である場合、書き込み書き込み競合を構成し、データ異常タイプは、ダーティー書き込み異常である。2)当該いずれかの同時トランザクションT
Lがコミットされており、且つ、S1∩S3が空集合ではない場合、データ異常タイプは、更新欠落異常である。
の場合、下記のステップ1003を実行する。
1003、ノードデバイスは、当該第3の集合S3が空集合であり、かつ、当該第1の集合S1及び当該第2の集合S2のうち少なくとも1つが空集合ではないことに応答して、当該第1の集合S1及び当該第2の集合S2に基づいて、当該ターゲット検出結果を取得する。
いくつかの実施例では、ノードデバイスは、第1の集合及び第2の集合に基づいて、L番目の同時トランザクションとターゲットトランザクションとの間の動的辺交差値及び変数状態値を取得してもよく、動的辺交差値は、L番目の同時トランザクションとターゲットトランザクションがデータ状態行列において操作する異なるデータ項目の間のセグメント交差状況を表し、変数状態値は、L番目の同時トランザクションとターゲットトランザクションが異なるデータ状態になるまで操作する変数状況を表し、動的辺交差値及び変数状態に基づいて、ターゲット検出結果を取得する。
いくつかの実施例では、ノードデバイスは、第1の集合及び第2の集合に基づいて、L番目の同時トランザクションとターゲットトランザクションとの間の動的辺交差値及び変数状態値を取得する前に、さらに当該第1の集合と当該第2の集合に基づいて、L番目の同時トランザクションとターゲットトランザクションとの間の動的辺交差値DLI及び変数状態値VSを更新し、その後、更新された動的辺交差値DLI及び更新された変数状態値VSに基づいて、当該ターゲット検出結果を取得してもよい。
に基づいて、
の少なくとも1つが満たされる場合、ノードデバイスは、次の更新ルールに従ってDLI及びVSを更新する。
1)ノードデバイスは、当該第1の集合S1が空集合ではないことに応答して、動的辺交差値DLIを、既存の値に1を加算して得られた値に更新し、即ち、S1が空ではない場合、DLI=DLI++であり、当該第1の集合S1に、異なるデータ状態を持つ変数があることに応答して、変数状態値VSを、既存の値に1を加算して得られた値に更新し、即ち、S1には、異なるデータ状態を持つ非空要素がある場合、VS=VS++である。
2)ノードデバイスは、当該第2の集合S2が空集合ではないことに応答して、動的辺交差値DLIを、既存の値に1を加算して得られた値に更新し、即ち、S2が空ではない場合、DLI=DLI++であり、当該第2の集合S2に、異なるデータ状態を持つ変数があることに応答して、変数状態値VSを、既存の値に1を加算して得られた値に更新し、即ち、S2に、異なるデータ状態を持つ非空要素がある場合、VS=VS++である。
いくつかの実施例では、DLI及びVSを更新した後、ノードデバイスは、次の方式によって当該ターゲット検出結果を取得し、即ち、ノードデバイスは、当該動的辺交差値DLIが2以上である場合、当該ターゲット検出結果を、データ異常があるとして取得し、当該更新後の変数状態値VSに基づいて、データ異常タイプを決定し、当該動的辺交差値DLIが2よりも小さいことに応答して、当該ターゲット検出結果を、データ異常がないとして取得する。
いくつかの実施例では、ノードデバイスは、更新されたVSに基づいてデータ異常タイプを決定するときに、当該更新された変数状態値が1であることに応答して、当該データ異常タイプが読み取り異常、即ち、VS=1であると決定し、読み取り異常を報告し、読み取り異常は、1つの変数の非繰り返し読み取り異常、2つの変数の読み取り半順序異常、3个以上の変数のステップデータ異常を含む。当該更新された変数状態値VSが2以上であることに応答して、当該データ異常タイプが書き込み異常、即ち、VS≧2であると決定し、書き込み異常を報告し、書き込み異常は、2つの変数の書き込み半順序異常、3个以上の変数の鋸波式異常を含む。
上記のプロセスでは、DLI≧2の場合は、ターゲットトランザクションT及びTLが動的辺交差を構成することを意味し、異常発生を報告し、ターゲット検出結果及び異常検出結果を、データ異常があると決定し、ループを終了する(VS=1の場合、データ異常タイプが読み取り異常であり、VS≧2の場合、データ異常タイプが書き込み異常である)。さもなければ、異常はなく、TL及びターゲットトランザクションTに対して動的辺マージを実行して、得られた新しいトランザクションをT-newとして設定し、T-newをターゲットトランザクションT(T=T-new)に割り当て、リンクリストTSから2番目のトランザクションを取り出してTL+1と設定し、次のループを実行する(新しいT-newとTL+1との間に動的辺交差があるかどうかを判定する)。
上記の動的辺マージのプロセスでは、ノードデバイスは、当該いずれかの同時トランザクションTLの読み取り集合をターゲットトランザクションTの読み取り集合にマージし、当該いずれかの同時トランザクションTLの書き込み集合をターゲットトランザクションTの書き込み集合にマージし、また、トランザクションTLがコミットされていない場合、T-newのターゲットパラメータを1だけインクリメントさせ、即ち、T-new.no_committed++(インクリメント)にし、マージして得られた新しいトランザクションに、あるコミットされたトランザクションの読み取り・書き込み集合の要素があることを表す。
さらに、ループが終了しても異常報告がない場合、ターゲットトランザクションがコミット可能であることを表す。任意選択で、分離レベルパラメータ=S、即ち、分離レベルが直列化可能レベルである場合、直列化可能レベルを満たすことができ、さもなければ、システムは、いくつかのタイプのデータ異常の発生を許可する場合、設定された分離レベルを満たすことができる。
(二)upperに基づく異常検出方法
図11は、本出願の実施例によるターゲット検出結果を取得するフローチャートであり、ノードデバイスが如何に一貫性検証アルゴリズムに基づいてターゲット検出結果を取得するかを示し、ここで、あるループプロセスについて説明する。
1101、少なくとも1つの同時トランザクションのうちいずれかの同時トランザクションについて、ノードデバイスは、第1の集合S1、第2の集合S2、第3の集合S3及び第4の集合S4を取得し、S1は、ターゲットトランザクションの読み取り集合と当該いずれかの同時トランザクションの書き込み集合の間の共通集合であり、S2は、ターゲットトランザクションの書き込み集合と当該いずれかの同時トランザクションの読み取り集合の間の共通集合であり、S3は、ターゲットトランザクションの書き込み集合と当該いずれかの同時トランザクションの書き込み集合の間の共通集合であり、S4は、ターゲットトランザクションの読み取り集合と当該いずれかの同時トランザクションの読み取り集合の間の共通集合である。
即ち、少なくとも1つの同時トランザクションのうちL番目の同時トランザクションについて、ノードデバイスは、第1の集合S1、第2の集合S2、第3の集合S3及び第4の集合S4を取得し、S1は、ターゲットトランザクションの読み取り集合と当該L番目の同時トランザクションの書き込み集合との間の共通集合であり、S2は、ターゲットトランザクションの書き込み集合と当該L番目の同時トランザクションの読み取り集合との間の共通集合であり、S3は、ターゲットトランザクションの書き込み集合と当該L番目の同時トランザクションの書き込み集合との間の共通集合であり、S4は、ターゲットトランザクションの読み取り集合と当該L番目の同時トランザクションの読み取り集合との間の共通集合である。
上記のプロセスでは、ノードデバイスは、検証段階に入るときに、現在検証段階に入っている判断対象となるターゲットトランザクションをTと仮定すると、ターゲットトランザクションTは、最初の初期値が物理トランザクションであり、動的辺マージを経て論理トランザクションになる。
さらに、ノードデバイスは、ターゲットトランザクションTと当該いずれかの同時トランザクションTLのブール型upperに初期値を配置し、両者の初期値をfalse、即ち、T.upper=false、TL.upper=falseに配置することができる。当該ブール型upperは、トランザクションによって形成される動的辺のデータ状態行列における垂直位置関係を表し、任意の2つの同時トランザクションTu及びTvを例として、Tu.upper=trueの場合、トランザクションTuによってある変数に形成される動的辺は、別のトランザクションTvよりも新しく、即ち、同じ変数について、トランザクションTuは、当該変数に対してトランザクションTvよりも新しい変数バージョンを操作したことを示す。
2つのトランザクションのupper値の初期化が完了した後、ノードデバイスは、リンクリストTSにおける各同時トランザクションに対して、ターゲット検出結果を取得する操作をループで実行し、いずれかのターゲット検出結果が、データ異常があると、ループを終了し、同時トランザクションとターゲットトランザクションとの間の異常検出結果を、データ異常があると決定する。さもなければ、リンクリストTSが空になり、全てのターゲット検出結果が、データ異常がないまで、リンクリストTSにおける次の同時トランザクションに対してループを実行し続け、ループを終了し、同時トランザクションとターゲットトランザクションとの間の異常検出結果を、データ異常がないと決定する。
上記のステップ1101は、いずれかの同時トランザクションTLに対して実行されるループ操作の最初のステップであり、このとき、ノードデバイスは、ターゲットトランザクションTと当該いずれかの同時トランザクションTLの読み取り・書き込み集合に基づいて、ターゲットトランザクションTの読み取り集合と当該いずれかの同時トランザクションTLの書き込み集合との間の共通集合を、第1の集合S1として決定し、第1の集合S1は、「S1 = DSR(T) ∩ DSW(TL)」として表すことができ、ターゲットトランザクションTの書き込み集合と当該いずれかの同時トランザクションTLの読み取り集合との間の共通集合を第2の集合S2として決定し、第2の集合S2は、「S2 = DSR(TL) ∩ DSW(T)」として表すことができ、ターゲットトランザクションTの書き込み集合と当該いずれかの同時トランザクションTLの書き込み集合との間の共通集合を、第3の集合S3として決定し、第3の集合S3は、「S3 = DSW(T) ∩ DSW(TL)」と表すことができ、ターゲットトランザクションTの読み取り集合と当該いずれかの同時トランザクションTLの読み取り集合との間の共通集合を、第4の集合S4として決定し、第4の集合S4は、「S4 = DSR(TL) ∩ DSR(T)」として表すことができる。
任意選択で、S1、S2、S3、S4を取得するときに、ハッシュテーブルを使用してTL及びTのそれぞれの読み取り・書き込み集合を記憶することができるので、線形時間複雑度内でそれらの共通集合及び和集合を得ることができる。
なお、S1、S2、S3、S4の間の和集合が空集合、即ち、S1∪S2∪S3∪S4が空集合である(簡略化された計算:
、即ちS1、S2、S3、S4がいずれも空集合である)場合、T
LとターゲットトランザクションTとは同時トランザクションではなく、ノードデバイスは、T
LをリンクリストTSの末尾に再度追加する必要があることを意味する。さもなければ、S1、S2、S3、S4の間の和集合が空集合ではない場合、T
LとターゲットトランザクションTとは同時トランザクションであることを意味し、このとき、下記のステップ1102-1103を実行して異常検出を行い、異常が見つかった場合、ターゲットトランザクションTをロールバックする。
1102、ノードデバイスは、S3が空集合ではないことに応答して、当該ターゲットトランザクションと当該いずれかの同時トランザクションのコミット状況、及び第1の集合S1と第3の集合S3に基づいて、当該いずれかの同時トランザクションと当該ターゲットトランザクションとの間のターゲット検出結果を取得する。
即ち、ノードデバイスは、S3が空集合ではないことに応答して、ターゲットトランザクションとL番目の同時トランザクションのコミット状況、及び第1の集合と第3の集合に基づいて、当該L番目の同時トランザクションと当該ターゲットトランザクションとの間のターゲット検出結果を取得する。上記のステップ1102は、上記のステップ1002に類似しており、ここで再度説明しない。
1103、ノードデバイスは、S3が空集合であり、且つ、S1、S2及びS4の少なくとも1つが空集合ではないことに応答して、S1、S2及びS4に基づいて当該ターゲット検出結果を取得する。
いくつかの実施例では、ノードデバイスは、S1、S2及びS4に基づいて、当該L番目の同時トランザクションのブール型(TL.upper)と当該ターゲットトランザクションTのブール型(T.upper)を取得することができ、当該ブール型は、対応するトランザクションによって形成される動的辺のデータ状態行列における垂直位置関係を表し、当該ブール型の初期値は、偽(false)であり、TL.upper及びT.upperが全て真であることに応答して、ターゲット検出結果を、データ異常があると決定し、TL.upper及びT.upperのうち少なくとも1つのブール型がfalseであることに応答して、ターゲット検出結果を、データ異常がないと決定する。
いくつかの実施例では、ノードデバイスは、S1、S2及びS4に基づいてTL.upperとT.upperを取得する前に、S1、S2及びS4に基づいて、当該いずれかの同時トランザクションTLのブール型TL.upperと当該ターゲットトランザクションTのブール型T.upperを更新し、その後、更新されたTL.upperと更新されたT.upperに基づいて、当該ターゲット検出結果を取得することができる。
に基づいて、
の少なくとも1つが満たされる場合、ノードデバイスは、次の更新ルールに従ってT
L.upper及びT.upperを更新する。
1)ノードデバイスは、S1が空集合ではないことに応答して、S1における変数について、ターゲットトランザクションの読み取り集合における当該変数のバージョン番号が当該L番目の同時トランザクションの書き込み集合における当該変数のバージョン番号異常である場合、当該ターゲットトランザクションのブール型を真に更新し、ターゲットトランザクションの読み取り集合における当該変数のバージョン番号が当該L番目の同時トランザクションの書き込み集合における当該変数のバージョン番号よりも小さい場合、当該L番目の同時トランザクションのブール型を真に更新する。
即ち、S1における各変数xについて、当該ターゲットトランザクションTの読み取り変数xのバージョン≧当該いずれかの同時トランザクションTLの書き込み変数xのバージョン、例えば、当該ターゲットトランザクションTが変数バージョンx2を読み取り、当該いずれかの同時トランザクションTLが変数バージョンx1を書き込む場合、T.upper=trueに設定し、さもなければ、当該ターゲットトランザクションTの読み取り変数xのバージョン<当該いずれかの同時トランザクションTLの書き込み変数xのバージョン、例えば、当該ターゲットトランザクションTが変数バージョンx1を読み取り、当該いずれかの同時トランザクションTLが変数バージョンx2を書き込む場合、TL.upper=trueに設定する。
2)ノードデバイスは、S2が空集合ではないことに応答して、S2における変数について、ターゲットトランザクションの書き込み集合における当該変数のバージョン番号が、当該L番目の同時トランザクションの読み取り集合における当該変数のバージョン番号よりも大きい場合、当該ターゲットトランザクションのブール型を真に更新し、ターゲットトランザクションの書き込み集合における当該変数のバージョン番号が当該L番目の同時トランザクションの読み取り集合における当該変数のバージョン番号以下である場合、当該L番目の同時トランザクション的ブール型を真に更新する。
即ち、S2における各変数xについて、当該ターゲットトランザクションTの書き込み変数xのバージョン>当該いずれかの同時トランザクションTLの読み取り変数xのバージョン、例えば当該ターゲットトランザクションTが変数バージョンx2を書き込み、当該いずれかの同時トランザクションTLが変数バージョンx1を読み取る場合、T.upper=trueに設定し、さもなければ、当該ターゲットトランザクションTの書き込み変数xのバージョン≦当該いずれかの同時トランザクションTLの読み取り変数xのバージョン、例えば当該ターゲットトランザクションTが変数バージョンx1を書き込み、当該いずれかの同時トランザクションTLが変数バージョンx2を読み取る場合、TL.upper=trueに設定する。
3)ノードデバイスは、S4が空集合ではないことに応答して、S4における変数について、ターゲットトランザクションの読み取り集合における当該変数のバージョン番号が、当該L番目の同時トランザクションの読み取り集合における当該変数のバージョン番号よりも大きい場合、当該ターゲットトランザクションのブール型を真に更新し、ターゲットトランザクションの読み取り集合における当該変数のバージョン番号が当該L番目の同時トランザクションの読み取り集合における当該変数のバージョン番号よりも小さい場合、当該L番目の同時トランザクションのブール型を真に更新する。
即ち、S4における各変数xについて、当該ターゲットトランザクションTの読み取り変数xのバージョン>当該いずれかの同時トランザクションTLの読み取り変数xのバージョン、例えば当該ターゲットトランザクションTが変数バージョンx2を読み取り、当該いずれかの同時トランザクションTLが変数バージョンx1を読み取る場合、T.upper=trueに設定し、当該ターゲットトランザクションTの読み取り変数xのバージョン<当該いずれかの同時トランザクションTLの読み取り変数xのバージョン、例えば当該ターゲットトランザクションTが変数バージョンx1を読み取り、当該いずれかの同時トランザクションTLが変数バージョンx2を読み取る場合、TL.upper=trueに設定し、当該ターゲットトランザクションTの読み取り変数xのバージョン=当該いずれかの同時トランザクションTLによって読み取り変数xのバージョン、例えば当該ターゲットトランザクションT及び当該いずれかの同時トランザクションTLがいずれも、変数バージョンx1を読み取った場合、何も行わない。
S3が空集合である場合、基本ルールにおける書き込み書き込み競合の発生を禁止する条件を満たすことを保証することができ、即ち、ダーティー書き込みデータ異常が禁止される。上記のルール1)-3)では、それぞれ、当該ターゲットトランザクションTの読み取り集合と当該いずれかの同時トランザクションTLの書き込み集合との比較(S1における要素の分析)、当該ターゲットトランザクションTの書き込み集合と当該いずれかの同時トランザクションTLの読み取り集合の比較(S2における要素の分析)、当該ターゲットトランザクションTの読み取り集合と当該いずれかの同時トランザクションTLの読み取り集合の比較(S4における要素の分析)を行った後、それぞれ、当該ターゲットトランザクションTのブール型T.upper及び当該いずれかの同時トランザクションTLのブール型TL.upperを更新し、更新が完了した後、T.upper=TL.upper=trueという条件を満たすと、動的辺交差がある、即ち、データ異常があると見なし、この場合、当該ターゲット検出結果を、データ異常があるとして取得し、さもなければ、当該ターゲット検出結果を、データ異常がないとして取得する。
上記のプロセスでは、最終的なT.upper=TL.upper=trueである場合、当該ターゲットトランザクションTと当該いずれかの同時トランザクションTLが動的辺交差を構成することを意味し、異常発生を報告し、ターゲット検出結果を、データ異常があると決定し、さらに、同時トランザクションとターゲットトランザクションとの間の異常検出結果を、データ異常があると決定し、ループを終了し、さもなければ、異常がなく、当該いずれかの同時トランザクションTLと当該ターゲットトランザクションTに対して動的辺マージを実行して、得られた新しいトランザクションをT-newとして設定し、T-newをターゲットトランザクションT(T=T-new)に割り当て、リンクリストTSから2番目のトランザクションを取り出してTL+1として設定し、次のループを実行する(新しいT-newとTL+1との間に動的辺交差があるかどうかを判断する)。
上記の動的辺マージのプロセスでは、ノードデバイスは、当該いずれかの同時トランザクションTLの読み取り集合を当該ターゲットトランザクションTの読み取り集合にマージし、当該いずれかの同時トランザクションTLの書き込み集合を当該ターゲットトランザクションTの書き込み集合にマージすることができ、当該いずれかの同時トランザクションTLがコミットされていない場合、T-newのターゲットパラメータを1だけインクリメントし、即ち、T-new.no_committed++(1だけインクリメントする)に設定し、マージされた新しいトランザクションにコミットされたトランザクションの読み取り・書き込み集合の要素があることを表す。
さらに、ループが終了しても異常報告がない場合、当該ターゲットトランザクションがコミット可能であることを表す。任意選択で、分離レベルパラメータ=S、即ち、分離レベルが直列化可能レベルである場合、直列化可能レベルを満たすことができ、さもなければ、システムは、特定のタイプのデータ異常の発生を許可する場合、設定された分離レベルを満たすことができる。
本出願の実施例によって提供される動的辺交差とマージアルゴリズム(DLI-M)は、複数回の集合に対する演算を利用し、これらの演算について、ハッシュテーブルを集合のデータ構成として使用することができ、これにより、線形時間複雑度内でそれらの共通集合及び和集合を取得することができ、時間複雑度は、O(m+n)である。DLI-Mアルゴリズムは、ループごとに、5回の集合の和集合計算と共通集合計算を行うことで、同時トランザクションの間にデータ異常があるかどうかを識別することができる。ループの回数は最大で同時トランザクションの個数kに達するので、アルゴリズムの複雑度の合計は、O(k*(m+n))になる。最悪の場合、各トランザクションには1つ又は2つの同時トランザクションしかなく、ループはk-1回実行されてから、マージ可能な同時トランザクションを見つけ、複雑度は、O(k2*(m+n))になる。しかし、実際の状況では、通常、トランザクションの動的辺マージが進むにつれて、残りのトランザクション数が減少するため、複雑度は、O(k*lgk*(m+n))になり、kは、1よりも大きい正の整数である。
上記の全ての選択可能な技術案は、任意の組み合わせを使用して本開示の選択可能な実施例を形成することができ、ここでは繰り返さない。
本出願の実施例では、上記のDLI-Mアルゴリズムに基づいて、スナップショット技術を使用して、静的辺と動的辺の概念を融合して、データベースシステムの様々な分離レベルを実現することができ、このアルゴリズムは、スナップショットに基づくデータ状態一貫性動的辺交差とマージアルゴリズム(Snapshot-based DLI-M、SDLI-M)と呼ばれ、当該SDLI-Mアルゴリズムは、楽観的同時実行制御アルゴリズム(Optimistic Concurrency Control、OCC)との結合又は分離を考慮することができる。また、本実施例におけるSDLI-Mアルゴリズムはさらに、上記の実施例におけるDLI-Mアルゴリズムのいくつかの詳細を最適化することができ、これにより、DLI-Mアルゴリズムの改善を実現し、以下で詳述する。
1、読み取り書き込み階段でのトランザクション読み取り・書き込み集合形成アルゴリズム
ターゲットトランザクションの実行を開始するときに、ターゲットトランザクションの読み取り集合及び書き込み集合を空集合に初期化する。
ターゲットトランザクションが変数xを更新するときに、変数xをターゲットトランザクションの書き込み集合に追加し、変数xにバージョン番号を割り当てる。異なるトランザクションによる同じ変数への書き込み操作のバージョン番号は、整数でインクリメントする。新しく発生する読み取り操作でも、変数のバージョン番号を取得することができ、即ち、変数ごとにインクリメントされるバージョン番号を維持する。
ターゲットトランザクションの読み取り集合及び書き込み集合は、トランザクション操作が進行するにつれてリアルタイムで維持される。読み取り操作が発生したときに、読み取られたデータは、読み取り集合に入り、書き込み操作が発生したときに、読み取られたデータは、書き込み集合に入る。同じトランザクションが同じ変数バージョンを複数回書き込む場合、少なくとも2つの異なる新しいバージョンがあり、書き込み集合において古い変数バージョンを最新のバージョンに置き換える。
上記の初期化プロセス及び読み取り・書き込み集合の維持戦略は、DLI-Mアルゴリズムと類似しており、ここで再度説明しない。
SDLI-MアルゴリズムとDLI-Mアルゴリズムとの相違は、SDLI-Mアルゴリズムによって読み取りプロセスで読み取られたデータが、DLI-Mアルゴリズムにおける「コミット済み読み取りルールを満たす最新のデータ」ではなく、スナップショットSt時点からの最も近く、最も適切な静的辺上の関連データであることであり、データの一貫性状態を満たすことができる。
具体的に、データ読み取りプロセスではデータ項目の可視性判断アルゴリズムに従い、即ち、タイムスタンプに基づいて、1つのスナップショットSnapshot Set=Ss={St}を確立し、Stは、1つの時点である。各データ項目の基本データ構成では、当該データ項目を生成するトランザクションのトランザクション番号tid及び当該データ項目を生成するトランザクションのコミットタイムスタンプtcが記憶されている(当該データバージョンがコミットされていない場合、tc=NULLである)。データ項目のtcがNULLではなく、tc<Stの場合、当該バージョンは、スナップショットによって読み取られ、即ち、当該データ項目は、ターゲットトランザクションに対して可視できるターゲットデータ項目であるが、全てのバージョンの間に、最新のバージョンから最も古いバージョンまでの間のバージョンチェーン(即ち、履歴シーケンス)があり、バージョンを読み取るときに最新バージョンから開始する。
なお、スナップショット時点St、トランザクション識別子tid、コミットタイムスタンプtcは全て、同じデータタイプに属し、それらが全て同じ数値型論理タイムスタンプ値であるか、又はHLC(ハイブリッド論理クロック)に類似したタイムスタンプ値であり、半順序で大きさを比較すればよい。この可視性判断アルゴリズムは、トランザクションによって読み取られたデータがSt時点からの最も近く、最も適切な静的辺上の関連データであることを保証し、即ち、読み取られたデータがデータの一貫性状態を満たすことを保証する。
2、データ読み取り段階
いくつかの実施例では、SDLI-Mアルゴリズムのデータ読み取り段階では、ノードデバイスは、ターゲットトランザクションの読み取り操作に対して、当該読み取り操作のスナップショットを決定することができ、当該読み取り操作の読み取り条件及び当該読み取り操作のスナップショットに基づいて、当該ターゲットトランザクションに対して可視であるターゲットデータ項目を決定し、当該ターゲットデータ項目を当該ターゲットトランザクションの読み取り集合に追加する。
任意選択で、当該読み取り操作のスナップショットを決定するときに、データベースシステムの分離レベルが再読み込み可能読み取りRRよりも低いことに応答して、ノードデバイスは、当該読み取り操作を実行するときにスナップショットを1回取得することができ、データベースシステムの分離レベルが再読み込み可能読み取り以上であることに応答して、ノードデバイスは、当該ターゲットトランザクションの最初の読み取り操作のスナップショットを当該読み取り操作のスナップショットとして決定することができる。即ち、データを読み取るときに、分離レベルパラメータ<RRの(分離レベルがRRよりも低い)場合、読み取り操作が実行されるたびに、スナップショットを1回取得し、この場合、毎回の読み取りが新しいスナップショットを有すれば、幻像読み取り異常の発生を許可し、さもなければ、分離レベルパラメータ≧RRの(分離レベルがRR以上である)場合、読み取り操作が最初に実行されるときにのみスナップショットを取得し、後続の毎回の読み取り操作は、最初に取得されたスナップショットを使用してデータを読み取り、この場合、最初のスナップショットを使用するだけで、幻像読み取り異常及び非繰り返し読み取り異常の発生を回避することができ、1つの変数の非繰り返し読み取り異常は、このデータ読み取り段階で既に識別されるので、動的辺交差とマージアルゴリズムに入って識別する必要がない。なお、この場合、異常を検出してトランザクションをロールバックするのではなく、あるタイプのデータ異常を回避する。これにより、異常を報告してトランザクションを終了するステップがない。
いくつかの実施例では、可視性判断アルゴリズムでは、ノードデバイスは、データベースシステムの分離レベルがコミット済み読み取り・書き込みRWC以上であることに応答して、当該読み取り条件を満し且つコミットタイムスタンプtcが当該読み取り操作のスナップショットStよりも小さい最大バージョンをターゲットデータ項目として決定し、データベースシステムの分離レベルがコミット済み読み取り・書き込みRWCよりも低いことに応答して、当該読み取り条件を満たすデータ項目にコミットされていないバージョンがある場合、最大のコミットされていないバージョンをターゲットデータ項目として決定する。
即ち、分離レベルパラメータ≧RWCの場合、上記の「読み取り書き込み段階でのトランザクション読み取り・書き込み集合形成アルゴリズム」に係る可視性判断アルゴリズムと一致しており、ここで再度説明しないが、分離レベルパラメータ<RWCの場合、最新のコミットされていないバージョンが読み取られるように、前述の可視性判断アルゴリズムを修正することで、RWUレベルが実現される。
いくつかの実施例では、OCCフレームワークを採用すれば、分離レベルパラメータ>RRの場合、各トランザクションにおける2番目の読み取り操作に対して、先に、読み取り集合及び書き込み集合から、読み取り対象となるオブジェクトがあるかどうかを検証し、存在する場合、さらに読み取り・書き込み集合から取得し、さもなければ、下層の記憶層から取得する必要がある。
3、各操作が発生するときに、準備段階アルゴリズムを実行する
ターゲットトランザクションTの各操作(読み取り又は書き込み)が発生するときに、準備段階に入って準備作業を開始し、準備段階は、ターゲットトランザクションTがコミット可能であるかどうかのトランザクション同時アクセス制御異常検証前の準備作業を行う。
準備段階では、ノードデバイスは、臨界領域に入り、ターゲットトランザクションTの読み取り集合及び書き込み集合をトラバースし、ターゲットトランザクションTの全ての同時トランザクションのトランザクション識別子を見つけ、1つのリンクリストTS内に入れて記憶し、見つけた後臨界領域から退出する。メモリでは、各データ項目に、本データ項目の読み取り・書き込みを行ったがコミットされていないトランザクションのトランザクション識別子が格納される。
上記の準備段階アルゴリズムは、上記のDLI-Mアルゴリズムで紹介した準備段階アルゴリズムと類似しており、ここで再度説明しない。
いくつかの実施例では、SDLI-MアルゴリズムがOCCアルゴリズムと結合するときに、準備段階のアルゴリズムは、OCCの検証段階に対応する。
いくつかの実施例では、SDLI-Mアルゴリズムは、DLI-Mアルゴリズムについて以下のように改善することができ、既存のリンクリストoldTSが空ではない場合、ターゲットトランザクションをTSに直接追加し(即ち、TS=oldTS+T)、ターゲットトランザクションの読み取り集合及び書き込み集合がトラバースされず、読み取り・書き込み集合に対するトラバースの論理を減少することができ、トランザクション処理効率を向上させることができる。
4、各操作が発生するときに、一貫性検証アルゴリズムを実行する(即ち、改善された動的辺交差とマージアルゴリズム)
いくつかの実施例では、SDLI-MアルゴリズムがOCCアルゴリズムと結合するときに、一貫性検証アルゴリズムは、OCCの検証段階に対応し、操作ごとに1回実行されるのではなく、OCCの検証段階で実行される。
SDLI-Mアルゴリズムにおける改善された動的辺交差とマージアルゴリズムは、DLI-Mアルゴリズムにおける動的辺交差とマージアルゴリズムに類似しており、ここで、類似するステップについて詳細に説明しない。改善された動的辺交差とマージアルゴリズムは、依然として2つの異なるタイプを含み、1つは、改善されたDLI及びVSに基づく異常検出方法であり、もう1つは、改善されたupperに基づく異常検出方法であり、以下で分類して説明する。
(一)改善されたDLI及びVSに基づく異常検出方法
(4.1)現在検証段階に入っている判断対象となるターゲットトランザクションは、Tであり、このトランザクションTの初期値は、物理トランザクションであり、動的辺マージされた後、論理トランザクションになる。
(4.2)DLI及びVSを初期化する。即ち、変数に属するいくつかの初期値を設定し、DLI=0、VS=0に設定する。
(4.3)リンクリストTSから最初のトランザクションを取り出してTLとして設定し、リンクリストが空になるまで、下記の操作をループで実行する。
(4.3.1)第1の集合S1 = DSR(T) ∩ DSW(TL)を取得し、S1は、ターゲットトランザクションTの読み取り集合と同時トランザクションTLの書き込み集合との間の共通集合である。S1が空ではない場合、DLI=DLI++であり、S1に、異なるデータ状態を持つ非空要素がある場合、VS=VS++である。
(4.3.2)第2の集合S2 = DSR(TL) ∩ DSW(T)を取得し、S2は、ターゲットトランザクションTの書き込み集合と同時トランザクションTLの読み取り集合との間の共通集合である。S1が空ではない場合、DLI=DLI++であり、S2に、異なるデータ状態を持つ非空要素がある場合、VS=VS++である。
(4.3.3)第3の集合S3 = DSW(T) ∩ DSW(TL)を取得し、S3は、ターゲットトランザクションTの書き込み集合と同時トランザクションTLの書き込み集合との間の共通集合である。
(4.3.4)S1∪S2∪S3が空集合である(簡略化された計算:
)場合、T
LとTは同時トランザクションではないことを意味し、T
LをリンクリストTSの末尾に再追加する。
(4.3.5)さもなければ、S1∪S2∪S3 は、空集合ではない場合、S1、S2、S3の少なくとも1つの集合が空集合ではないことを意味し、このとき、TLとTは、同時トランザクションであり、異常検出を行い、異常が発見されると、異常を報告してターゲットトランザクションTをロールバックする必要がある。異常検出プロセスは下記のルールに従う。
(4.3.5.1)
の場合、以下の2つの条件のいずれかを満たす場合、ノードデバイスは、書き込み書き込み異常の発生を報告し、ループを終了する。
条件1、分離レベルパラメータ!=RWUであり(RWUレベルではダーティー書き込み異常を禁止しない)、TLのコミットが完了しておらず、且つ、T.no_committed=1の場合、書き込み書き込み競合があり、データ異常タイプはダーティー書き込み異常である。
条件2、分離レベルパラメータ≧SHであり(SHレベルでは更新欠落の発生を禁止するため、SH以上の分離レベルは異常を報告する)、TLが既にコミットされ、且つ、S1∩S3が空集合ではない場合、データ異常を報告し、データ異常タイプは、更新欠落異常である。
(4.3.5.2)さもなければ、
の条件で、
の場合、次の3つのケースに分けて説明できる。
ケース1、ターゲットトランザクションTとTLが動的辺交差を構成する場合、異常の発生を報告し、ループを終了する。いくつかの実施例では、DLI≧2の場合、ターゲットトランザクションTとTLとの間が動的辺交差を構成するとみなし、この場合、ノードデバイスは、分離レベルに応じて、異常の発生を報告してループを終了するかどうかを決定し、VSに基づいてデータ異常タイプを決定する。
任意選択で、分離レベルパラメータ≧SH(読み取り半順序異常及び階段式異常を禁止する)、且つ、VS=1の場合、異常の発生を報告してループを終了し、この場合、データ異常タイプは、読み取り異常であり、2つの変数の読み取り半順序異常、3つ以上の変数の階段式異常を含む(1つ変数の非繰り返し読み取り異常は既にデータ読み取り階段で識別され、異常検出階段では再度識別する必要がない)。
任意選択で、分離レベルパラメータ≧RR(書き込み半順序異常及び鋸波式異常を禁止する)、且つ、VS≧2の場合、異常の発生を報告してループを終了し、この場合、データ異常タイプは、書き込み異常であり、2つの変数の書き込み半順序異常、3つ以上の変数の鋸波式異常を含む。
ケース2、さもなければ、ターゲットトランザクションTとTLが動的辺交差を構成しておらず、分離レベルパラメータ=Sの場合、ノードデバイスは、整合性制約があるかどうかをチェックする必要があり、本トランザクションによって読み取り・書き込みされたデータが整合性制約に違反した場合、異常の発生を報告してループを終了し、整合性制約によってDLI-Mアルゴリズムでは解決できない述語書き込み半順序異常を検出することができる。
即ち、DLI及びVSに基づいて動的辺交差がないことを検出した後、元は、当該同時トランザクションTLとターゲットトランザクションTとの間のターゲット検出結果は、「データ異常がない」ように設定されるが、直列化可能Sレベルでは述語書き込み半順序異常を識別する必要もある(動的辺交差とマージアルゴリズムでは識別できない)ため、ノードデバイスは、データベースシステムの分離レベルが直列化可能Sであることに応答して、L番目の同時トランザクションTLと当該ターゲットトランザクションTに対して整合性制約検出を実行し、当該同時トランザクションTLと当該ターゲットトランザクションTとの間が整合性制約に違反する場合、当該ターゲット検出結果を、データ異常があり且つデータ異常タイプが述語書き込み半順序異常であるように調整する。整合性制約の検出プロセスは、次の実施例で詳述する。
ケース3、さもなければ、ターゲットトランザクションTとTLが動的辺交差を構成しておらず、且つ、整合性制約を満たしている場合、何の異常もなく、ターゲットトランザクションT及びTLに対して動的辺マージを実行し、新しいトランザクションをT-newとして設定する。
動的辺マージのプロセスでは、ノードデバイスは、同時トランザクションTLの読み取り集合をターゲットトランザクションTの読み取り集合にマージし、同時トランザクションTLの書き込み集合をターゲットトランザクションTの書き込み集合にマージし、同時トランザクションTLがコミットされていない場合、T-newのターゲットパラメータT-new. no_committed++(1だけインクリメントされる)にし、マージされた新しいトランザクションに既にコミットされたあるトランザクションの読み取り・書き込み集合の構成要素があることを表し、T=T-newとし、T-newをTに割り当て、次回のループを実行する。
(4.3.6)ループが終了し、異常報告がない場合、ターゲットトランザクションTがコミット可能である。分離レベルパラメータ=Sの場合、直列化可能が保証される。
(4.3.7)SDLI-Mアルゴリズムにおいて、今回の異常検出のリンクリストTSを記録して、今回のトランザクションを削除して、次回に使用し、oldTS=TS-Tにし、oldTSのリアルタイム維持を実現する。任意選択で、TSに、多くのマージされた論理トランザクションが存在してもよく、これにより、TSの長さが短縮され、記憶空間が節約される一方で、後続の各操作の判断が高速化される。
いくつかの実施例では、ハッシュテーブルを集合のデータ構成として使用することによって、線形時間複雑度内で異なる集合の間の共通集合又は和集合を取得することができる。
(二)改善されたupperに基づく異常検出方法
(4.1)現在検証段階に入っている判断対象となるターゲットトランザクションは、Tであり、このトランザクションTの初期値は、物理トランザクションであり、動的辺マージされた後、論理トランザクションになる。
(4.2)リンクリストTSから最初のトランザクションを取り出してTLとして設定し、それぞれT.upper及びTL.upperを初期化し、即ち、変数に属するいくつかの初期値を設定し、T.upper=false、TL.upper=falseとして設定する。
(4.3)2つのトランザクションT、TLのupper値の初期化が完了した後、リンクリストが空になるまで、下記の操作をループで実行する。
(4.3.1)第1の集合S1 = DSR(T) ∩ DSW(TL)を取得し、S1は、ターゲットトランザクションTの読み取り集合と同時トランザクションTLの書き込み集合との間の共通集合である。S1における各変数xについて、ターゲットトランザクションTによって読み取られた変数xのバージョン≧同時トランザクションTLによって書き込まれた変数xのバージョンの場合、T.upper=trueに設定し、さもなければ、TL.upper=trueに設定する。
(4.3.2)第2の集合S2 = DSR(TL) ∩ DSW(T)を取得し、S2は、ターゲットトランザクションTの書き込み集合と同時トランザクションTLの読み取り集合との間の共通集合である。S2における各変数xについて、ターゲットトランザクションTによって書き込まれた変数xのバージョン>同時トランザクションTLによって読み取られた変数xのバージョンの場合、T.upper=trueに設定し、さもなければ、TL.upper=trueに設定する。
(4.3.3)第3の集合S3 = DSW(T) ∩ DSW(TL)を取得し、S3は、ターゲットトランザクションTの書き込み集合と同時トランザクションTLの書き込み集合との間の共通集合である。
(4.3.4)第4の集合S4 = DSR(TL) ∩ DSR(T)を取得し、S4は、ターゲットトランザクションTの読み取り集合と同時トランザクションTLの読み取り集合との間の共通集合である。S4における各変数xについて、ターゲットトランザクションTの読み取り変数xのバージョン>同時トランザクションTLの読み取り変数xのバージョンの場合、T.upper=trueに設定し、ターゲットトランザクションTの読み取り変数xのバージョン<同時トランザクションTLの読み取り変数xのバージョンの場合、TL.upper=trueに設定し、ターゲットトランザクションTの読み取り変数xのバージョン=同時トランザクションTLの読み取り変数xのバージョンの場合、何も行わない。
(4.3.5)S1∪S2∪S3∪S4が空集合である場合(簡略化された計算:
)、T
LとTが同時トランザクションではないことを意味し、T
LをリンクリストTSの末尾に再追加する。
(4.3.6)さもなければ、S1∪S2∪S3∪S4が空集合ではないことは、S1、S2、S3、S4の少なくとも1つの集合が空集合ではないことを意味し、このとき、TLとTは、同時トランザクションであり、異常検出を行い、異常が発見されると、異常を報告してターゲットトランザクションTをロールバックする必要がある。異常検出プロセスは、下記のルールに従う。
(4.3.6.1)
の場合、以下の2つの条件のいずれかが満たされた場合、ノードデバイスは、書き込み書き込み異常の発生を報告し、ループを終了する。
条件1、分離レベルパラメータ!=RWUであり(RWUレベルではダーティー書き込み異常を禁止しない)、TLのコミットが完了しておらず、T.no_committed=1である場合、書き込み書き込み競合があり、データ異常タイプは、ダーティー書き込み異常である。
条件2、分離レベルパラメータ≧SHであり(SHレベルが更新欠落の発生を禁止するため、SH以上の分離レベルはこの異常を報告する)、TLが既にコミットされ、S1∩S3が空集合ではない場合、データ異常を報告し、データ異常タイプは、更新欠落異常である。
(4.3.6.2)さもなければ、
の条件で、
の場合、次の3つのケースに分けて説明できる。
ケース1、ターゲットトランザクションTとTLが動的辺交差を構成する場合、異常の発生を報告し、ループを終了する。いくつかの実施例では、T.upper=TL.upper=trueの場合、ターゲットトランザクションTとTLとの間が動的辺交差を構成すると見なし、この場合、ノードデバイスは、異常の発生を報告してループを終了することができる。
ケース2、さもなければ、ターゲットトランザクションTとTLが動的辺交差を構成しておらず、分離レベルパラメータ=Sの場合、ノードデバイスは、整合性制約があるかどうかをチェックする必要があり、このトランザクションによって読み取り・書き込みされたデータが整合性制約に違反する場合、異常の発生を報告してループを終了し、整合性制約によって、DLI-Mアルゴリズムでは解决できない述語書き込み半順序異常を検出することができる。
即ち、いずれかの同時トランザクションTLについて、upper値に基づいて動的辺交差がないことを検出した後、元は当該いずれかの同時トランザクションTLとターゲットトランザクションTとの間のターゲット検出結果が「データ異常がない」ことに設定されるが、直列化可能Sレベルでは、述語書き込み半順序異常を識別する必要がある(動的辺交差とマージアルゴリズムでは識別できない)ため、ノードデバイスは、データベースシステムの分離レベルが直列化可能Sであることに応答して、当該いずれかの同時トランザクションTLと当該ターゲットトランザクションTに対して整合性制約検出を実行し、当該いずれかの同時トランザクションTLと当該ターゲットトランザクションTとの間が整合性制約に違反したことに応答して、当該ターゲット検出結果を、データ異常があり且つデータ異常タイプが述語書き込み半順序異常であるとして調整する。整合性制約の検出プロセスは、次の実施例で詳述する。
ケース3、さもなければ、ターゲットトランザクションTとTLが動的辺交差を構成しておらず、整合性制約を満たす場合、何の異常もなく、ターゲットトランザクションTとTLに対して動的辺マージを実行し、新しいトランザクションをT-newとして設定する。
動的辺マージのプロセスでは、ノードデバイスは、同時トランザクションTLの読み取り集合をターゲットトランザクションTの読み取り集合にマージし、同時トランザクションTLの書き込み集合をターゲットトランザクションTの書き込み集合にマージし、同時トランザクションTLがコミットされていない場合、T-newのターゲットパラメータT-new. no_committed++(1だけインクリメントする)にし、マージされた新しいトランザクションに既にコミットされたあるトランザクションの読み取り・書き込み集合の構成要素があることを表し、T=T-newとし、T-newをTに割り当て、次のループを実行する。
(4.3.7)ループが終了し、異常報告がない場合、ターゲットトランザクションTは、コミットできる。分離レベルパラメータ=Sの場合、直列化可能が保証される。
(4.3.8)SDLI-Mアルゴリズムでは、今回の異常検出のリンクリストTSを記録し、今回のトランザクションを削除して次回に使用し、oldTS=TS-Tにし、oldTSのリアルタイム維持を実現する。任意選択で、TSに、多くのマージされた論理トランザクションが存在してもよく、これにより、TSの長さが短縮され、記憶空間が節約される一方で、後続の各操作の判断が高速化される。
いくつかの実施例では、ハッシュテーブルを集合のデータ構成として使用することによって、線形時間複雑度内で異なる集合との間の共通集合又は和集合を取得することができる。
本出願の実施例で提供されるSDLI-Mアルゴリズムの効率は、上記の実施例におけるDLI-Mアルゴリズムの効率と同じであり、スタンドアロンデータベースシステムのトランザクション処理に適用できる。SDLI-Mアルゴリズムでは、ノードデバイスは、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常があることに応答して、データ異常タイプ及びデータベースシステムの分離レベルに基づいて、ターゲットトランザクションの実行結果を決定することができ、当該実行結果は、当該ターゲットトランザクションをコミットするか又はロールバックするかを表し、少なくとも2つの異なる分離レベルが実現される。
いくつかの実施例では、データ異常タイプがダーティー書き込み異常を含み、且つ、当該分離レベルが非コミット読み取り・書き込みRWUではないことに応答して、当該実行結果を、当該ターゲットトランザクションをロールバックすると決定し(4.3.5.1の条件1に対応し)、データ異常タイプが更新欠落異常を含み、且つ、当該分離レベルがスナップショット読み取り履歴SH以上であることに応答して、当該実行結果を、当該ターゲットトランザクションをロールバックすると決定し(4.3.5.1の条件2に対応する)、データ異常タイプが読み取り異常を含み、且つ、当該分離レベルがスナップショット読み取り履歴SH以上であることに応答して、当該実行結果を、当該ターゲットトランザクションをロールバックすると決定し(4.3.5.2のケース1にける分離レベルパラメータ≧SHの説明に対応する)、データ異常タイプが書き込み異常を含み、且つ、当該分離レベルが再読み込み可能読み取りRR以上であることに応答して、当該実行結果を、当該ターゲットトランザクションをロールバックすると決定し(4.3.5.2のケース1における分離レベルパラメータ≧RRの説明に対応する)、データ異常タイプが述語書き込み半順序異常を含み、且つ、当該分離レベルが直列化可能Sであることに応答して、当該実行結果を、当該ターゲットトランザクションをロールバックすると決定する(4.3.5.2のケース2に対応する)。
上記の全ての選択可能な技術案は、任意の組み合わせを使用して本開示の選択可能な実施例を形成することができ、ここで説明を繰り返さない。
上記の実施例で提供されるSDLI-Mアルゴリズムは、スタンドアロンデータベースシステムのトランザクション処理に適用することができ、本出願の実施例では、分散データベースシステム向けのスナップショットに基づくデータ状態一貫性動的辺交差とマージアルゴリズム(Disdtributed Snapshot-based DLI-M、DSDLI-M)を提供し、DSDLI-Mアルゴリズムを紹介する前に、まず、分散トランザクション-子トランザクションの間の分離レベルの関係について説明する。
分散データベースシステムでは、親トランザクションの分離レベルが子トランザクションの分離レベルよりも強い場合、子トランザクションの分離レベルが親トランザクションの分離レベルと一致するように強制され、即ち、親トランザクションの分離レベルは、システム全体の分離レベルを表す。親トランザクションの分離レベルが子トランザクションの分離レベルよりも弱い場合、単一変数のトランザクションについて、分散トランザクションを構成することができないため、親トランザクションの分離レベルが子トランザクションの分離レベルと一致するように強制され、即ち、子トランザクションの分離レベルは、システム全体の分離レベルを表す。多変数のトランザクションについて、分散異常を構成する可能性があるため、新しいレベルを定義する必要があり、弱いものから強いものまでF1、F2、F3、F4の4つのレベルに分類する。分散トランザクション-子トランザクションの間の分離レベルの関係を次の表7に示す。
ここで、「スナップショット履歴」は、スナップショット読み取り履歴SHレベルの略称であり、後述しない。以下で、新しく定義された分離レベルについてそれぞれ説明する。
1)F1-弱3レベル:親トランザクション非コミット読み取り・書き込み+子トランザクションスナップショット履歴(親RWU+子SH)は、子スナップショット履歴に従い、分散読み取り半順序、分散読み取り・書き込み半順序、分散階段式、分散書き込み半順序、分散述語書き込み半順序、分散鋸波などのデータ異常を全体的に許可する。
2)F1-弱2レベル:親トランザクション非コミット読み取り・書き込み+子トランザクション再読み込み可能読み取り(親RWU+子RR)は、子再読み込み可能読み取りに従い、分散読み取り半順序、分散読み取り・書き込み半順序、分散階段式、分散書き込み半順序、分散述語書き込み半順序、分散鋸波などのデータ異常を全体的に許可する。
3)F1-弱1レベル:親トランザクション非コミット読み取り・書き込み+子トランザクション直列化可能(親RWU+子S)は、子直列化可能に従い、分散読み取り半順序、分散読み取り・書き込み半順序、分散階段式、分散書き込み半順序、分散述語書き込み半順序、分散鋸波などのデータ異常を全体的に許可する。
4)F2-弱3レベル:親トランザクションコミット済み読み取り・書き込み+子トランザクションスナップショット履歴(親RWC+子SH)は、子スナップショット履歴に従い、分散読み取り半順序、分散読み取り・書き込み半順序、分散階段式、分散書き込み半順序、分散述語書き込み半順序、分散鋸波などのデータ異常を全体的に許可する。
5)F2-弱2レベル:親トランザクションコミット済み読み取り・書き込み+子トランザクション再読み込み可能読み取り(親RWC+子RR)は、子再読み込み可能読み取りに従い、分散読み取り半順序、分散読み取り・書き込み半順序、分散階段式、分散書き込み半順序、分散述語書き込み半順序、分散鋸波などのデータ異常を全体的に許可する。
6)F2-弱1レベル:親トランザクションコミット済み読み取り・書き込み+子トランザクション直列化可能(親RWC+子S)は、子直列化可能に従い、分散読み取り半順序、分散読み取り・書き込み半順序、分散階段式、分散書き込み半順序、分散述語書き込み半順序、分散鋸波などのデータ異常を全体的に許可する。
7)F3-弱2レベル:親トランザクションスナップショット履歴+子トランザクション再読み込み可能読み取り(親SH+子RR)は、子再読み込み可能読み取りに従い、分散読み取り半順序、分散読み取り・書き込み半順序、分散階段式、分散書き込み半順序、分散述語書き込み半順序、分散鋸波などのデータ異常を全体的に許可する。
8)F3-弱1レベル:親トランザクションスナップショット履歴+子トランザクション直列化可能(親SH+子S)は、子直列化可能に従い、分散読み取り半順序、分散読み取り・書き込み半順序、分散階段式、分散書き込み半順序、分散述語書き込み半順序、分散鋸波などのデータ異常を全体的に許可する。
9)F4-弱1レベル:親トランザクション再読み込み可能読み取り+子トランザクション直列化可能(親RR+子S)は、子直列化可能に従い、分散読み取り半順序、分散読み取り・書き込み半順序、分散階段式、分散書き込み半順序、分散述語書き込み半順序、分散鋸波などのデータ異常を全体的に許可する。
分散トランザクションの分離レベルは、次の2つの定義形式を有することができる。
第1は、2レベル分散トランザクション分離レベル:表7に定義されるように、親トランザクションと子トランザクションは、それぞれ分離レベルを定義することができるがトランザクション全体は、表7における分離レベルの定義に従う。
第2は、統合された分散トランザクション分離レベル:表7における太字の格子の定義のように、親トランザクションと子トランザクションはそれぞれ、分離レベルを定義できず、トランザクション全体は、表7の定義における太字の格子の定義に従う。
上記の第2の種類の分散トランザクション分離レベルについて、表6及び前述のルール(表7における太字のフォントが位置する格子の定義)に従って、表6と同等の表8を定義でき、但し、表8には、分散異常と分離レベルとの間の関係が示されている。
これは、スタンドアロンシステムでは、表6又は表8(この2つの表が本質的に完全に同じである)に従って分離レベルを設定する必要があることを表す。分散データベースシステムでは、表8、特に表8における分散型異常とマーキングされた欄に対応する異常(読み取り半順序、読み取り・書き込み半順序、階段式、書き込み半順序、述語書き込み半順序及び鋸波式データ異常を含む)に従って、分散データベースシステムでは、異なるレベルでそれおぞれ対応するデータ異常を解决する必要があり、分散データベースシステムの各子ノードは、異なるレベルでそれぞれ表8に対応する様々な分散異常を解決する。スナップショット履歴レベルのように、読み取り半順序は、単一ノードで解决する必要があり、分散データベースシステムでも解决する必要がある。
上記の分散トランザクションの分離レベルをを提供することに基づいて、上記の統合された分散トランザクション分離レベル(第2の種類の分散トランザクション分離レベル)に対して、本出願の実施例では、SDLI-Mアルゴリズムに基づいて、DSDLI-Mアルゴリズムをさらに提供し、グローバルスナップショット技術を使用して、分散トランザクション型データベースシステムに適用できる。これについて詳述する。
1、スナップショット点の構築方法、グローバルスナップショット点の構築方法
(1.1)HLCアルゴリズムを使用してグローバルのハイブリッド論理クロックを構築する。これは、各子ノード上のそれぞれの論理クロックがHLCによって因果関係の同期を維持し(グローバルインクリメント)、単一ノード上のローカルトランザクションのクロックがインクリメントできる(ローカルインクリメント)ことを意味する。HLCタイプのスタンプでは、トリプレット{pt、l、c}を使用してローカル物理クロック(トリプレット内の最初の要素であるpt)及びハイブリッド論理クロック(それぞれトリプレット内の2番目と3番目の要素であるl及びc)を表すことができる。
(1.2)トランザクションコーディネータでは、トランザクションの最初のSQLステートメントが実行されるときに、HLCアルゴリズムによってスナップショット点を割り当てる(本コーディネータ上の最新のHLC値をスナップショット点として取得する)。即ち、Snapshot Set=Ss={St}を取得し、Stは、グローバルHLCによって割り当てられた時間値である。
(1.3)分散トランザクションのSQLステートメントが実行されるときに、SQLステートメントが子ノード上で実行されるのに伴って、トランザクションコーディネータは、スナップショットStを各子ノードに配信する。
(1.4)各子ノードでは、HLCに基づくデータ項目の可視性判断アルゴリズムを実行する。
(1.4.1)コミット済み読み取りルールを満たす。
(1.4.2)データ項目のバージョンチェーンは、新しいものから古いものへと順番に記憶され、次の(1.4.3)のアルゴリズムを満たす最初の新しいデータ項目が見つかるまで、当該バージョンチェーンをトラバースする。
(1.4.3)(トランザクションコーディネータから渡された)所定のHLC値に従って、トリプレットが{10、10、0}であるlocal_HLCを仮定し、各子ノードのバージョンチェーンをトラバースして、local_HLC.l値(当該値が10)と同じデータバージョンを見つけ、その後、次のバージョンを読み取り、当該バージョンは、グローバル読み取り一貫性のあるバージョンである。
図12は、本出願の実施例によるHLCに基づいてグローバルスナップショットを確立する原理図であり、1200に示すように、太い実線は、論理クロックcの値が0であることに沿って、ノード0からノード1に達し、さらにノード3まで達し、トリプレットの変化はそれぞれ、ノード0{10、10、0}、ノード1{0、0、0}、ノード2{1、1、0}、ノード3{2、2、0}であり、これは、このような状態で、4つのノードが一貫した状態にある、即ち、論理クロックcの値が同じである最大バージョンの間で一貫性状態を満たすことを表す。図12において、実線矢印は、2つのノードの間でSend(送信)及びReceive(受信)イベントが発生したことを表し、同じノード上の少なくとも2つのトリプレット接続は、ローカルイベントの発生を表す。
(1.4.4)当該データ項目の可視性判断アルゴリズムでは、データバージョン上のコミットタイムスタンプtcのデータ構成がHLCと一致していることを要求し、即ち、コミットタイムスタンプtcもHLCアルゴリズムに基づいて割り当てられたタイムスタンプであることを要求する。
(1.5)1つのクラスタに少なくとも2つのトランザクションコーディネータが存在してもよく、トランザクションコーディネータは、調整ノードデバイスに対応し、子ノードは、データノードデバイスに対応し、トランザクションコーディネータが1つしかない場合、中心化されたトランザクション処理技術に対応し、トランザクションコーディネータが少なくとも2つ含まれる場合、脱中心化のトランザクション処理技術に対応する。
(1.6)トランザクションは、コミットされるときに、グローバルHLCからコミットタイムスタンプtcを取得し、その後、各子ノード上のトランザクションコミット識別子のタイムスタンプ値を修正する。
2、トランザクションマネージャ
1つのクラスタでは、トランザクションマネージャ(各物理ノードのデータベースインスタンス上に1つのトランザクションマネージャが存在する)は、トランザクションコーディネータの役割を果たす。トランザクションコーディネータ(調整ノードデバイス)は、親トランザクションと呼ばれる1つのトランザクションを開始する。異なる子ノード(データノードデバイス)上で実行されるトランザクションは、子トランザクションと呼ばれる。親子トランザクションの間は、グローバルトランザクション識別子tidによって識別を行い、各子トランザクションは、自身の子トランザクションの識別子ctidも持ち、子ノード上の1つのトランザクションの完全識別子は、{tid、ctid}である。
調整ノードデバイス上でターゲットトランザクションTの最初のSQLステートメントを実行するときに、ターゲットトランザクションTに対してスナップショットを作成し、調整ノードデバイスは、当該スナップショットをターゲットトランザクションTに関する各データノードデバイスに配信する。即ち、分散データベースシステムにおいて、HLC形式のスナップショットを使用することができ、当該HLC形式のスナップショットは、調整ノードデバイスによって配信される。
ターゲットトランザクションTがコミットされるときに、各データノードデバイスは、DLI-Mアルゴリズムを使用して、それぞれが本ノードにデータ異常があるかどうかを判断し、即ち、本ノードの異常検出結果を取得する。本ノードの異常検出結果が、データ異常があることである場合、ローカルの子トランザクションをロールバックし、次に、メッセージを送信して調整ノードデバイスの親トランザクションに通知し、親トランザクションにより、さらに他の関連するデータノードデバイスの子トランザクションに通知し、これにより、グローバルのトランザクションのロールバックを実行する。
本ノードの異常検出結果が、(単一ノードの)データ異常がないことである場合、他のデータノードデバイスにデータ異常があるかどうかを保証することができないため、調整ノードデバイスは、各データノードデバイスによって報告された関連情報をまとめて親トランザクションに報告する必要があり、親トランザクションは、グローバルデータ異常があるかどうかを調停し、グローバルデータ異常がある場合、メッセージを各データノードデバイスに送信し、各データノードデバイスは、グローバルロールバックを実行し、さもなければ、トランザクションのコミットが成功する。
3、データ読み取り段階
いくつかの実施例では、DSDLI-Mアルゴリズムのデータ読み取り段階では、分離レベルパラメータ<RRの場合(分離レベルがRRよりも低い)、読み取り操作が実行されるたびに、スナップショットを取得し、この場合、毎回の読み取りは、新しいスナップショットがあるので、幻像読み取り異常の発生を許可し、さもなければ、分離レベルパラメータ≧RR(分離レベルがRR以上)の場合、読み取り操作が最初に実行されるときにのみスナップショットを取得し、後続の毎回の読み取り操作は、最初に取得されたスナップショットを使用してデータを読み取り、この場合、最初のスナップショットのみが使用され、幻像読み取り異常及び非繰り返し読み取り異常の発生を回避することができ、1つの変数の非繰り返し読み取り異常は、このデータ読み取り段階で既に識別されるので、動的辺交差とマージアルゴリズムに入って識別する必要がない。なお、この場合、異常を検出してトランザクションをロールバックするのではなく、特定のタイプのデータ異常の発生を回避するため、異常を報告してトランザクションを終了するステップがない。
いくつかの実施例では、分離レベルパラメータ≧RWCの場合、上記の「読み取り書き込み段階のトランザクション読み取り・書き込み集合形成アルゴリズム」に係るHLCに基づく可視性判断アルゴリズムと一致し、ここで再度説明しない。但し、分離レベルパラメータ<RWCの場合、最新のコミットされていないバージョンが読み取られるように前述のHLCに基づく可視性判断アルゴリズムを修正することができ、RWUレベルを実現する。
いくつかの実施例では、OCCフレームワークが採用される場合、分離レベルパラメータ>RRの場合、各トランザクションにおける2番目の読み取り操作に対して、まず、読み取り集合及び書き込み集合から、読み取り対象となるオブジェクトがあるかどうかをチェックし、ある場合、さらに読み取り・書き込み集合から取得し、さもなければ、下層の記憶層から取得する必要がある。
ここで、DSDLI-M アルゴリズムのデータ読み取り段階は、前の実施例のSDLI-M アルゴリズムのデータ読み取り段階と類似しているので、ここで再度説明しない。
4、各操作が発生するときに、準備段階アルゴリズムを実行する
ターゲットトランザクションTの各操作(読み取り又は書き込み)が発生するときに、準備段階に入り、準備作業を開始し、準備段階は、ターゲットトランザクションTがコミット可能かどうかのトランザクション同時アクセス制御異常検証前の準備作業を行う。
準備段階では、ノードデバイスは、臨界領域に入り、ターゲットトランザクションTの読み取り集合及び書き込み集合をトラバースして、ターゲットトランザクションTの全ての同時トランザクションのトランザクション識別子を見つけ、1つのリンクリストTS内に入れて記憶し、見つけた後に臨界領域から退出する。メモリでは、各データ項目に、本データ項目の読み取り・書き込みを行ったがコミットされていないトランザクションのトランザクション識別子が格納されている。
いくつかの実施例では、DSDLI-MアルゴリズムとOCCアルゴリズムとを結合するときに、準備段階のアルゴリズムは、OCCの検証段階に対応する。
いくつかの実施例では、既存のリンクリストoldTSが空ではない場合、ターゲットトランザクションをTSに直接追加し(即ち、TS=oldTS+Tに設定する)、ターゲットトランザクションの読み取り集合及び書き込み集合がトラバースされず、これにより、読み取り・書き込み集合に対するトラバースの論理を減少することができ、トランザクション処理効率を向上させることができる。
上記の準備段階アルゴリズムは、上記のSDLI-Mアルゴリズムで紹介した準備段階アルゴリズムと類似しているので、ここで再度説明しない。
5、子ノードトランザクション検証アルゴリズム
DSDLI-Mアルゴリズムによって提供される子ノードトランザクション検証アルゴリズムは、SDLI-Mアルゴリズムによって提供される改善された動的辺交差とマージアルゴリズムと類似しているが、少し違いがある。
いくつかの実施例では、DSDLI-MアルゴリズムとOCCアルゴリズムとを結合するときに、子ノードトランザクション検証アルゴリズムは、OCCの検証段階に対応し、即ち、操作が発生したときに、調整ノードデバイスは、OCCの検証段階に入るまで待機するのではなく、直ちに検証を開始し、このプロセスは、「子ノード除去」プロセスと呼ばれ、このルールの目的は、子トランザクションの実行を高速化し、これにより、クラスタシステム的の全体的なトランザクション応答効率を向上させることである。
各データノードデバイス(子ノード)にとって、それ自体のリンクリストTSは、cTSと呼ばれ、子ノード上でリアルタイム維持を実行し、トランザクションは発生しなく、即ち、新しく発生した子トランザクション又はローカルトランザクションがcTSに入るように維持される。各子ノードcTSの維持方式は、スタンドアロンシステムで説明したTSの維持方式と同じである。
DSDLI-Mアルゴリズムでは、子ノードのトランザクション検証アルゴリズムは依然として2つの異なるタイプを含み、1つは、改善されたDLI及びVSに基づく異常検出方法であり、もう1つは、改善されたupperに基づく異常検出方法であり、以下で分類して説明する。
(一)子ノードでのDLI及びVSに基づくトランザクション検証方法
(5.1)各操作が発生するときに、操作レベルの変数に属するいくつかの初期値を設定し、DLI=0、VS=0に設定する。
(5.2)子ノード自体のリンクリストcTSから最初のトランザクションを取り出してTLとして設定し、リンクリストが空になるまで、下記の操作をループで実行する。
(5.2.1)第1の集合S1 = DSR(T) ∩ DSW(TL)を取得し、S1は、ターゲットトランザクション(親トランザクション)に対応する子トランザクションTの読み取り集合と同時トランザクションTLの書き込み集合との間の共通集合である。S1が空ではない場合、DLI=DLI++であり、S1に異なるデータ状態を持つ非空要素がある場合、VS=VS++である。
(5.2.2)第2の集合S2 = DSR(TL) ∩ DSW(T)を取得し、S2は、子トランザクションTの書き込み集合と同時トランザクションTLの読み取り集合との間の共通集合である。S1が空ではない場合、DLI=DLI++であり、S2に、異なるデータ状態を持つ非空要素がある場合、VS=VS++である。
(5.2.3)第3の集合S3 = DSW(T) ∩ DSW(TL)を取得し、S3は、子トランザクションTの書き込み集合と同時トランザクションTLの書き込み集合との間の共通集合である。
(5.2.4)S1∪S2∪S3が空集合である場合(簡略化された計算:
)、T
LとTが同時トランザクションではないことを表し、T
LをリンクリストcTSの末尾に再追加する。
(5.2.5)さもなければ、S1∪S2∪S3は、空集合ではなく、TLとTは同時トランザクションであり、異常検出を実行し、異常が発見されると、ローカルの子トランザクションTをロールバックし、ターゲットトランザクションのロールバックメッセージを直ちに親トランザクションに返す。異常検出プロセスは、下記のルールに従う。
(5.2.5.1)
の場合、以下の2つの条件のいずれかを満たす場合、子ノードは、書き込み書き込み異常の発生を報告して、ループを終了する。
条件1、分離レベルパラメータ!=RWUであり(RWUレベルでダーティー書き込み異常を禁止しない)、TLのコミットが完了しておらず、且つ、T.no_committed=1である場合、書き込み書き込み競合があり、データ異常タイプは、ダーティー書き込み異常である。
条件2、分離レベルパラメータ≧SHであり(SHレベルが更新欠落の発生を禁止するため、SH以上の分離レベルはこの異常を報告する)、TLは既にコミットされ、且つ、S1∩S3は空集合ではない場合、データ異常を報告し、データ異常タイプは更新欠落異常である。
(5.2.5.2)さもなければ、
の条件で、
の場合、次の3つのケースに分けて説明できる。
ケース1、子トランザクションTとTLが動的辺交差を構成する場合、異常の発生を報告し、ループを終了する。いくつかの実施例では、DLI≧2の場合、子トランザクションTとTLとの間が動的辺交差を構成すると見なし、この場合、ノードデバイスは、分離レベルに応じて、異常の発生を報告してループを終了するかどうかを決定することができる。
任意選択で、分離レベルパラメータ≧SH(読み取り半順序異常及び階段式異常を禁止する)、且つ、VS=1の場合、異常の発生を報告してループを終了し、この場合、データ異常タイプは、読み取り異常であり、2つの変数の読み取り半順序異常、3つ以上の変数的階段式異常を含む(1つの変数の非繰り返し読み取り異常は、既にデータ読み取り段階で識別されており、異常検出段階で繰り返して識別する必要がない)。
任意選択で、分離レベルパラメータ≧RR(書き込み半順序異常及び鋸波式異常を禁止する)、且つ、VS≧2の場合、異常の発生を報告してループを終了し、この場合、データ異常タイプは、書き込み異常であり、2つの変数の書き込み半順序異常、3つ以上の変数の鋸波式異常を含む。
ケース2、さもなければ、子トランザクションTとTLが動的辺交差を構成しておらず、分離レベルパラメータ=Sの場合、ノードデバイスは、整合性制約があるかどうかをチェックする必要があり、このトランザクションによって読み取り・書き込みされたデータが整合性制約に違反する場合、異常の発生を報告してループを終了し、整合性制約によって、DLI-Mアルゴリズムでは解決できない述語書き込み半順序異常を検出することができる。
ケース3、さもなければ、子トランザクションTとTLが動的辺交差を構成しておらず、整合性制約を満たす場合、何の異常もなく、子トランザクションTとTLに対して動的辺マージを実行し、新しいトランザクションをT-newとして設定する。
動的辺マージのプロセスでは、ノードデバイスは、同時トランザクションTLの読み取り集合を子トランザクションTの読み取り集合にマージし、同時トランザクションTLの書き込み集合を子トランザクションTの書き込み集合にマージし、同時トランザクションTLがコミットされていない場合、T-newのターゲットパラメータT-new. no_committed++(1だけインクリメントする)にし、マージされた新しいトランザクションに、コミットされたあるトランザクションの読み取り・書き込み集合の構成要素があることを表し、T=T-newとし、T-newをTに割り当て、次のループを実行する。
(5.2.6)ループが終了し、異常報告がない場合、子トランザクションTは、ローカルでコミットすることができる。子トランザクションTは、この子トランザクションTの依存関係、及びローカル異常情報(即ち、単一ノードの異常検出結果)がないことを親トランザクションに送信する。
(5.2.7)今回の異常検出のリンクリストcTSを記録し、今回のトランザクションを削除して次回に使用し、oldTS=cTS-Tにし、oldTSのリアルタイム維持を実現する。任意選択で、cTSに、多くのマージされた論理トランザクションが存在してもよく、これにより、cTSの長さが短縮され、記憶空間が節約される一方で、後続の各操作の判断が高速化される。
いくつかの実施例では、ハッシュテーブルを集合のデータ構成として使用することによって、線形時間複雑度内で異なる集合との間の共通集合又は和集合を取得することができる。
(二)子ノードでのupperに基づくトランザクション検証方法
(5.1)各操作が発生するときに子ノード自体のリンクリストcTSから最初のトランザクションを取り出してTLとして設定し、それぞれT.upper及びTL.upperを初期化し、つまり、変数に属するいくつかの初期値を設定し、T.upper=false、TL.upper=falseに設定する。
(5.2)2つのトランザクションT、TLのupper値の初期化が完了した後、リンクリストが空になるまで、下記の操作をループで実行する。
(5.2.1)第1の集合S1 = DSR(T) ∩ DSW(TL)を取得し、S1は、ターゲットトランザクション(親トランザクション)に対応する子トランザクションTの読み取り集合と同時トランザクションTLの書き込み集合との間の共通集合である。S1における各変数xについて、子トランザクションTの読み取り変数xのバージョン≧同時トランザクションTLの書き込み変数xのバージョンの場合、T.upper=trueに設定し、さもなければ、TL.upper=trueに設定する。
(5.2.2)第2の集合S2 = DSR(TL) ∩ DSW(T)を取得し、S2は、子トランザクションTの書き込み集合と同時トランザクションTLの読み取り集合との間の共通集合である。S2における各変数xについて、子トランザクションTの書き込み変数xのバージョン>同時トランザクションTLの読み取り変数xのバージョンの場合、T.upper=trueに設定し、さもなければ、TL.upper=trueに設定する。
(5.2.3)第3の集合S3 = DSW(T) ∩ DSW(TL)を取得し、S3は、子トランザクションTの書き込み集合と同時トランザクションTLの書き込み集合との間の共通集合である。
(5.2.4)第4の集合S4 = DSR(TL) ∩ DSR(T)を取得し、S4は、子トランザクションTの読み取り集合と同時トランザクションTLの読み取り集合との間の共通集合である。S4における各変数xについて、子トランザクションTの読み取り変数xのバージョン>同時トランザクションTLの読み取り変数xのバージョンの場合、T.upper=trueに設定し、子トランザクションTの読み取り変数xのバージョン<同時トランザクションTLの読み取り変数xのバージョンの場合、TL.upper=trueに設定し、子トランザクションTの読み取り変数xのバージョン=同時トランザクションTLの読み取り変数xのバージョンの場合、何も行わない。
(5.2.5)S1∪S2∪S3∪S4が空集合である場合(簡略化された計算:
)、T
LとTが同時トランザクションではないことを表し、T
LをcリンクリストTSの末尾に再追加する。
(5.2.6)さもなければ、S1∪S2∪S3∪S4が空集合ではなく、TLとTは、同時トランザクションであり、異常検出を実行し、異常が発見されると、ローカルの子トランザクションTをロールバックし、ターゲットトランザクションのロールバックメッセージを直ちに親トランザクションに返す。異常検出プロセスは、下記のルールに従う。
(5.2.6.1)
の場合、以下の条件のいずれかを満たす場合、ノードデバイスは、書き込み書き込み異常の発生を報告し、ループを終了する。
条件1、分離レベルパラメータ!=RWUであり(RWUレベルでダーティー書き込み異常を禁止しない)、TLのコミットが完了しておらず、且つ、T.no_committed=1である場合、書き込み書き込み競合があり、データ異常タイプは、ダーティー書き込み異常である。
条件2、分離レベルパラメータ≧SHであり(SHレベルは更新欠落の発生を禁止するため、SH以上の分離レベルはこの異常を報告する)、TLは既にコミットされ、S1∩S3が空集合ではない場合、データ異常を報告し、データ異常タイプは、更新欠落の異常である。
(5.2.6.2)さもなければ、
の条件で、
の場合、次の3つのケースに分けて説明できる。
ケース1、子トランザクションTとTLが動的辺交差を構成する場合、異常の発生を報告し、ループを終了する。いくつかの実施例では、T.upper=TL.upper=trueの場合、子トランザクションTとTLは動的辺交差を構成すると見なし、ノードデバイスは、異常の発生を報告してループを終了することができる。
ケース2、さもなければ、子トランザクションTとTLが動的辺交差を構成しておらず、分離レベルパラメータ=Sの場合、ノードデバイスは、整合性制約があるかどうかをチェックする必要があり、本トランザクションによって読み取り・書き込みされたデータが整合性制約に違反する場合、異常の発生を報告してループを終了し、整合性制約によって、DLI-Mアルゴリズムでは解决できない述語書き込み半順序異常を検出することができる。
ケース3、さもなければ、子トランザクションTとTLが動的辺交差を構成しておらず、且つ、整合性制約を満たす場合、何の異常もなく、子トランザクションT及びTLに対して動的辺マージを実行して、新しいトランザクションをT-newとして設定する。
動的辺マージのプロセスでは、ノードデバイスは、同時トランザクションTLの読み取り集合を子トランザクションTの読み取り集合にマージして、同時トランザクションTLの書き込み集合を子トランザクションTの書き込み集合にマージし、同時トランザクションTLがコミットされていない場合、T-newのターゲットパラメータT-new. no_committed++(1だけインクリメントされる)にし、マージされた新しいトランザクションにコミットされたあるトランザクションの読み取り・書き込み集合の構成要素があることを表し、T=T-newとし、T-newをTに割り当て、次のループを実行する。
(5.2.7)ループが終了し、異常報告がない場合、子トランザクションTは、ローカルでコミットすることができる。子トランザクションTは、この子トランザクションTの依存関係、及びローカル異常情報(即ち、単一ノードの異常検出結果)がないことを親トランザクションに送信する。
(5.2.8)今回の異常検出のリンクリストcTSを記録し、今回のトランザクションを削除して次回に使用し、oldTS=cTS-Tにし、oldTSのリアルタイム維持を実現する。任意選択で、cTSに、多くのマージされた論理トランザクションが存在してもよく、これにより、cTSの長さが短縮され、記憶空間が節約される一方で、後続の各操作の判断が高速化される。
いくつかの実施例では、ハッシュテーブルを集合のデータ構造として使用することで、異なる集合の間の共通集合又は和集合を線形時間複雑度で取得することができる。
親ノード(即ち、トランザクションコーディネータ、調整ノードデバイス)は、各子ノード(即ち、データノードデバイス)の依存関係及び異常検出結果をまとめた後、親ノードトランザクション検証アルゴリズムを呼び出してグローバル異常検出を実行し、これにより、ターゲットトランザクションを最終的にコミットするかそれともロールバックするかを判定し、本出願の実施例では、動的辺交差マージアルゴリズム及び依存関係検出アルゴリズムをそれぞれ含む2つの親ノードトランザクション検証アルゴリズムを提供し、動的辺交差マージアルゴリズムは、述語書き込み半順序異常以外の分散異常を検出することができ、依存関係検出アルゴリズムは、述語書き込み半順序異常を検出することができ、以下の6及び7の欄でそれぞれ説明する。
6、親ノードトランザクション検証アルゴリズム1(動的辺交差マージアルゴリズム)
分散トランザクションの分離レベル(表8)に基づいて、異なる分離レベルでは、分散トランザクションは、トランザクションコーディネータにおいて、それぞれ分散式の読み取り半順序、階段式、書き込み半順序、述語書き込み半順序、鋸波という5種類の異常も解決する必要がある。当該5種類の異常について、述語書き込み半順序異常以外、他の4種類の異常は、親トランザクション、即ち、コーディネータノードで、類似するDLI-Mアルゴリズムを使用することで解决できる。述語書き込み半順序異常(直列化可能Sレベルに対応する)は、親トランザクションの所在する調整ノードデバイスで整合性制約検証を実行することで解決する必要がある。
親トランザクション即ちコーディネータでは、DLI-Mアルゴリズムを構築するために必要な情報について、親トランザクションは、子トランザクションの読み取り集合及び書き込み集合、及びデータ項目/変数バージョンに記録された競合する同時トランザクション(少なくとも1つの同時トランザクション)のこれらの情報を収集し、そして、DLI-Mアルゴリズムを呼び出して、トランザクションのコミット段階で、異なる分離レベルの分散トランザクション検証を実現し、主に、分散トランザクションにおける読み取り半順序、階段式、書き込み半順序、鋸波異常を検証し、整合性制約チェックによって述語書き込み半順序異常を検証する。
7、親ノードトランザクション検証アルゴリズム2(依存関係検出アルゴリズム)
(7.1)子トランザクションが、ローカルノードにいずれのデータ異常もないと識別した場合、子トランザクションがメッセージを親トランザクションに返す前に、子トランザクションは、依存性グラフに基づいて、同時トランザクションの依存関係を構築し、依存関係を親トランザクションに返す必要がある。
図13は、本出願の実施例による2つのノード上の4つのトランザクションによって形成される分散トランザクションの読み取り異常の原理図であり、1300に示すように、2つの物理ノードNode1及びNode2では、それぞれ4つのトランザクションT1~T4が同時に実行される。Node1にT4→T1→T3からなる依存性グラフがあり、Node2にT3→T2→T4からなる依存性グラフがある。
図14は、本出願の実施例による2つのノード上の3つのトランザクションによって形成される分散トランザクション書き込み異常の原理図であり、1400に示すように、2つの物理ノードNode1及びNode2では、それぞれ3つのトランザクションT1~T3が同時に実行される。Node1にT3→T1→T2からなる依存性グラフがあり、Node2にT2→T3からなる依存性グラフがある。
(7.2)親トランザクションは、各子ノードから返された少なくとも2つの子トランザクションの依存性グラフに基づいて、グローバルの依存性グラフを構築し、グローバル依存性グラフにループが存在しない場合、分散トランザクション全体に依存ループが存在しなく、整合性制約にも違反しないので、直列化可能S分離レベルに該当する。
(7.3)さもなければ、整合性制約に違反すれば、再読み込み可能読み取りRR分離レベルに該当する。
(7.4)上記の(7.3)にループがある場合
(7.4.1)前述のように、図13に示す例では、親トランザクションは、Node1のT4→T1→T3依存性グラフ及びNode2のT3→T2→T4依存性グラフを収集し、マージして得られたグローバル依存性グラフはT4→T1→T3→T2→T4であり、このように、始まりと終わりはT4であり、そのため、グローバル依存性グラフにループがあるので、直列化不可能であり、また、T4トランザクションは、2つの読み取り操作によって構成され、読み取り半順序又は階段式異常が検出される。分離レベルパラメータ≧SH(分離レベルがスナップショット読み取り履歴SH以上)である場合、親トランザクション及全ての子トランザクションをロールバックし(即ち、ターゲットトランザクションをロールバックし)、異常を報告する。
(7.4.2)前述のように、図14に示す例では、親トランザクションは、Node1のT3→T1→T2依存性グラフ及びNode2のT2→T3依存性グラフを収集し、マージして得られたグローバル依存性グラフはT3→T1→T2→T3であり、このように、始まりと終わりはT3であり、グローバル依存性グラフにループがあり、直列化不可能であり、また、T3トランザクションはそれぞれ読み取り・書き込み操作によって構成されているため、書き込み半順序又は鋸波式異常が検出される。分離レベルパラメータ≧RR(分離レベルが再読み込み可能読み取りRR以上)である場合、親トランザクション及全ての子トランザクションをロールバックし(即ち、ターゲットトランザクションをロールバックし)、異常を報告する。
(7.4.3)依存関係検出アルゴリズムは、親子トランザクションの間で依存性グラフ関連情報を伝達するだけであり、読み取り・書き込み集合などは、親子トランザクション間で伝達されないため、大規模な結果集合トランザクションの直列化可能分離レベルの実現に、大きな利点がある。
本出願の実施例で提供されるDSDLI-Mアルゴリズムは、分散トランザクション型データベースシステムのトランザクション処理に適用することができる。DSDLI-Mアルゴリズムにおいて、子ノード及び親ノードが分離レベルを処理する技術によって、異なる分離レベル及び分散トランザクションの間の関連関係を描画し、分散トランザクションも多種の分離レベルの能力を備えるようにする。
上記の全ての選択可能な技術案は、任意の組み合わせを使用して本開示の選択可能な実施例を形成することができ、ここで説明を繰り返さない。
本出願の実施例では、データ状態一貫性モデルが改善され、データ状態一貫性モデルに基づいて、様々なデータ異常を形式化で定義し、データ異常の定義が標準化、数学化され、本出願の実施例で提供されるデータ異常の定義に基づいて、従来の分離レベル技術とは異なるスタンドアロントランザクション型データベースの新しい5レベルの分離レベル体系を提案し、分離レベルを確立するための標準を提案している。スタンドアロンシステムに適した2つの同時アクセス制御の基本的なアルゴリズム(DLI-Mアルゴリズム及びSDLI-Mアルゴリズム)を提案し、データ異常の定義及び分離レベルの定義と組み合わせて、アルゴリズムにおいて如何に異なる分離レベルを実現するかを与え、分散トランザクションの分離レベル及びスタンドアロンシステムの分離レベルの関連関係を提案し、分散トランザクションシステムの5レベルの分離レベル体系を定義し、分散分離レベル及び前述の基本アルゴリズムに基づいて、分散トランザクション処理に適した同時アクセス制御技術(DSDLI-Mアルゴリズム)を提案し、DSDLI-Mアルゴリズムは、トランザクション処理の各段階の具体的なプロセスを完全に記述し、親トランザクションの同時実行制御を実現するための少なくとも2つの異なるサブアルゴリズムを与える。
図15は、本出願の実施例によるトランザクション処理装置の構成概略図であり、図15を参照し、当該装置は、
ターゲットトランザクションの読み取り・書き込み操作が実行されることに応答して、ターゲットトランザクションの少なくとも1つの同時トランザクションを取得するための第1の取得モジュール1501であって、少なくとも1つの同時トランザクションとターゲットトランザクションがトランザクションの実行期間に同じデータ項目に対して読み取り・書き込み操作を実行する第1の取得モジュール1501と、
少なくとも1つの同時トランザクションとターゲットトランザクションの読み取り・書き込み集合に基づいて、少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常があるかどうかを判定するための第2の取得モジュール1502と、
少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常がないことに応答して、少なくとも1つの同時トランザクションとターゲットトランザクションの読み取り・書き込み集合をマージして、ターゲットトランザクションをコミットするためのマージコミットモジュール1503と、を含む。
本出願の実施例で提供される装置は、ターゲットトランザクションの読み取り・書き込み操作が実行されることに応答して、当該ターゲットトランザクションの少なくとも1つの同時トランザクションを取得し、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションの読み取り・書き込み集合に基づいて、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションとの間にデータ異常がないと決定した場合、当該少なくとも1つの同時トランザクションと当該ターゲットトランザクションの読み取り・書き込み集合をマージして、当該ターゲットトランザクションをコミットする。この方式は、ターゲットトランザクションの各操作が実行されるときにデータベースシステム内の様々なデータ異常を全面的に検出し、データ状態の一貫性を保証することができ、データ状態の一貫性を保証した上で、このようなトランザクション処理メカニズムは、ロッキング技術に完全に依存することも、依存性グラフ技術に完全に依存することもなく、システムの同時実行性の制限を回避し、トランザクション処理の効率を向上させることができる。
可能な実施形態では、図15の装置構成に基づいて、当該第2の取得モジュール1502は、
少なくとも1つの同時トランザクションのうちL番目の同時トランザクションについて、L番目の同時トランザクションとターゲットトランザクションの読み取り・書き込み集合に基づいて、L番目の同時トランザクションとターゲットトランザクションとの間のターゲット検出結果を取得するための取得サブモジュールであって、Lが正の整数である取得サブモジュールと、
ターゲット検出結果が、データ異常がないことであることに応答して、少なくとも1つの同時トランザクションのうちL+1番目のトランザクションに対して、少なくとも1つの同時トランザクションのターゲット検出結果が全て、データ異常がないと決定されるまで、ターゲット検出結果を取得するステップを実行し、少なくとも1つの同時トランザクションと前記ターゲットトランザクションとの間にデータ異常がないと決定するための決定サブモジュールと、を含む。
可能な実施形態では、図15の装置構成に基づいて、当該取得サブモジュールは、
第1の集合、第2の集合及び第3の集合を取得するための第1の取得ユニットであって、第1の集合が、ターゲットトランザクションの読み取り集合とL番目の同時トランザクションの書き込み集合との間の共通集合であり、第2の集合がターゲットトランザクションの書き込み集合とL番目の同時トランザクションの読み取り集合との間の共通集合、第3の集合がターゲットトランザクションの書き込み集合とL番目の同時トランザクションの書き込み集合との間の共通集合である第1の取得ユニットと、
第3の集合が空集合ではないことに応答して、ターゲットトランザクションとL番目の同時トランザクションのコミット状況、及び第1の集合と第3の集合に基づいてターゲット検出結果を取得するための第2の取得ユニットと、
第3の集合が空集合であり、かつ、第1の集合及び第2の集合のうち少なくとも1つが空集合ではないことに応答して、第1の集合及び第2の集合に基づいてターゲット検出結果を取得するための第3の取得ユニットと、を含む。
可能な実施形態では、図15の装置構成に基づいて、当該取得サブモジュールは、
第1の集合、第2の集合、第3の集合及び第4の集合を取得するための第1の取得ユニットであって、第1の集合がターゲットトランザクションの読み取り集合とL番目の同時トランザクションの書き込み集合との間の共通集合であり、第2の集合がターゲットトランザクションの書き込み集合とL番目の同時トランザクションの読み取り集合との間の共通集合であり、第3の集合がターゲットトランザクションの書き込み集合とL番目の同時トランザクションの書き込み集合との間の共通集合であり、第4の集合がターゲットトランザクションの読み取り集合とL番目の同時トランザクションの読み取り集合との間の共通集合である第1の取得ユニットと、
第3の集合が空集合ではないことに応答して、ターゲットトランザクションとL番目の同時トランザクションのコミット状況、及び第1の集合と第3の集合に基づいてターゲット検出結果を取得するための第2の取得ユニットと、
第3の集合が空集合であり、かつ、第1の集合、第2の集合及び第3の集合のうち少なくとも1つが空集合ではないことに応答して、第1の集合、第2の集合及び第4の集合に基づいてターゲット検出結果を取得するための第4の取得ユニットと、を含む。
可能な実施形態では、当該第2の取得ユニットは、
L番目の同時トランザクションがコミットされておらず、かつ、ターゲットトランザクションのターゲットパラメータが1の場合、ターゲット検出結果を、データ異常があり、かつ、データ異常タイプがダーティー書き込み異常であると決定し、ターゲットパラメータは、ターゲットトランザクションの読み取り・書き込み集合に対応するコミット済みトランザクションの数を表し、
L番目の同時トランザクションがコミット済みであり、かつ、第1の集合と第3の集合との間の共通集合が空集合ではない場合、ターゲット検出結果を、データ異常があり、データ異常タイプが更新欠落異常であると決定する。
可能な実施形態では、図15の装置構成に基づいて、当該第3の取得ユニットは、
第1の集合及び第2の集合に基づいて、L番目の同時トランザクションとターゲットトランザクションとの間の動的辺交差値及び変数状態値を取得するための第1の更新サブユニットであって、動的辺交差値は、L番目の同時トランザクションと前記ターゲットトランザクションがデータ状態行列において操作する異なるデータ項目の間の線分交差状況を表し、前記変数状態値は、前記L番目の同時トランザクションと前記ターゲットトランザクションが異なるデータ状態になるまで操作する変数状況を表す第1の更新サブユニットと、
動的辺交差値及び変数状態値に基づいて、ターゲット検出結果を取得するための第1の取得サブユニットと、を含む。
可能な実施形態では、当該第1の更新サブユニットは、
第1の集合及び第2の集合に基づいて、L番目の同時トランザクションとターゲットトランザクションとの間の動的辺交差値及び変数状態値を取得する前に、第1の集合が空集合ではないことに応答して、動的辺交差値を、既存の値に1を加算して得られた値に更新し、第1の集合に、異なるデータ状態を持つ変数があることに応答して、変数状態値を、既存の値に1を加算して得られた値に更新し、第2の集合が空集合ではないことに応答して、動的辺交差値を、既存の値に1を加算して得られた値に更新し、第2の集合に異なるデータ状態を持つ変数があることに応答して、変数状態値を、既存の値に1を加算して得られた値に更新する。
可能な実施形態では、図15の装置構成に基づいて、当該第1の取得サブユニットは、 動的辺交差値が2以上であることに応答して、ターゲット検出結果を、データ異常があると決定し、変数状態値に基づいて、データ異常タイプを決定するための決定サブサブユニットと、
動的辺交差値が2よりも小さいことに応答して、ターゲット検出結果を、データ異常がないと決定するための取得サブサブユニットと、含む。
可能な実施形態では、当該決定サブサブユニットは、
変数状態値が1であることに応答して、データ異常タイプが読み取り異常であると決定し、
変数状態値が2以上であることに応答して、データ異常タイプが書き込み異常であると決定する。
可能な実施形態では、図15の装置構成に基づいて、当該第4の取得ユニットは、
第1の集合、第2の集合及び第4の集合に基づいて、L番目の同時トランザクションのブール型及びターゲットトランザクションのブール型を取得するための第2の更新サブユニットであって、ブール型は、対応するトランザクションによって構成される動的辺のデータ状態行列における垂直位置関係を表し、ブール型の初期値が偽である第2の更新サブユニットと、
ターゲットトランザクションのブール型及びL番目の同時トランザクションのブール型がいずれも真であることに応答して、ターゲット検出結果を、データ異常があると決定し、ターゲットトランザクションのブール型及びL番目の同時トランザクションのブール型のうち少なくとも1つブール型が偽であることに応答して、ターゲット検出結果を、データ異常がないと決定するための第2の取得サブユニットと、を含む。
可能な実施形態では、当該第2の更新サブユニットは、
第1の集合、第2の集合及び第4の集合に基づいて、L番目の同時トランザクションのブール型及びターゲットトランザクションのブール型を取得する前に、
第1の集合が空集合ではないことに応答して、第1の集合における変数について、ターゲットトランザクションの読み取り集合における変数のバージョン番号が、L番目の同時トランザクションの書き込み集合における変数のバージョン番号以上である場合、ターゲットトランザクションのブール型を真に更新し、ターゲットトランザクションの読み取り集合における変数のバージョン番号がL番目の同時トランザクションの書き込み集合における変数のバージョン番号よりも小さい場合、L番目の同時トランザクションのブール型を真に更新し、
第2の集合が空集合ではないことに応答して、第2の集合における変数について、ターゲットトランザクションの書き込み集合における変数のバージョン番号がL番目の同時トランザクションの読み取り集合における変数のバージョン番号よりも大きい場合、ターゲットトランザクションのブール型を真に更新し、ターゲットトランザクションの書き込み集合における変数のバージョン番号が、L番目の同時トランザクションの読み取り集合における変数のバージョン番号以下である場合、L番目の同時トランザクションのブール型を真に更新し、
第4の集合が空集合ではないことに応答して、第4の集合における変数について、ターゲットトランザクションの読み取り集合における変数のバージョン番号が、L番目の同時トランザクションの読み取り集合における変数のバージョン番号よりも大きい場合、ターゲットトランザクションのブール型を真に更新し、ターゲットトランザクションの読み取り集合におけるバージョン番号が、L番目の同時トランザクションの読み取り集合における変数のバージョン番号よりも小さい場合、L番目の同時トランザクションのブール型を真に更新する。
可能な実施形態では、図15の装置構成に基づいて、当該装置はさらに、
データベースシステムの分離レベルが直列化可能であることに応答して、L番目の同時トランザクションとターゲットトランザクションが整合性制約の検出を実行し、L番目の同時トランザクションとターゲットトランザクションとの間が整合性制約に違反することに応答して、ターゲット検出結果を、データ異常があり、かつ、データ異常タイプが述語書き込み半順序異常であると調整するための検出調整モジュール、を含む。
可能な実施形態では、図15の装置構成に基づいて、当該装置はさらに、
少なくとも1つの同時トランザクションとターゲットトランザクションとの間にデータ異常があることに応答して、データ異常タイプ及びデータベースシステムの分離レベルに基づいて、ターゲットトランザクションの実行結果を決定するための第1の決定モジュールであって、実行結果が、ターゲットトランザクションのコミット又はターゲットトランザクションのロールバックを表す第1の決定モジュールを含む。
可能な実施形態では、当該第1の決定モジュールは、
データ異常タイプがダーティー書き込み異常を含み、かつ、分離レベルが非コミット読み取り・書き込みではないことに応答して、実行結果を、ターゲットトランザクションのロールバックとして決定し、
データ異常タイプが更新欠落異常を含み、かつ、分離レベルがスナップショット読み取り履歴以上であることに応答して、実行結果を、ターゲットトランザクションのロールバックとして決定し、
データ異常タイプが読み取り異常を含み、かつ、分離レベルがスナップショット読み取り履歴以上であることに応答して、実行結果を、ターゲットトランザクションのロールバックとして決定し、
データ異常タイプが書き込み異常であり、かつ、分離レベルが再読み込み可能読み取り以上である場合、実行結果を、ターゲットトランザクションのロールバックとして決定し、
データ異常タイプが述語書き込み半順序異常を含み、かつ、分離レベルが直列化可能であることに応答して、実行結果を、ターゲットトランザクションのロールバックとして決定する。
可能な実施形態では、図15の装置構成に基づいて、当該装置は、
ターゲットトランザクションの読み取り操作に対して、読み取り操作のスナップショットを決定するための第2の決定モジュールと、
読み取り操作の読み取り条件及び読み取り操作のスナップショットに基づいて、ターゲットトランザクションに対して可視であるターゲットデータ項目を決定し、ターゲットデータ項目をターゲットトランザクションの読み取り集合に追加するための第3の決定モジュールと、を含む。
可能な実施形態では、当該第2の決定モジュールは、
データベースシステムの分離レベルが再読み込み可能読み取りよりも低いことに応答して、読み取り操作が実行されるときにスナップショットを1回取得し、
データベースシステムの分離レベルが再読み込み可能読み取り以上であることに応答して、ターゲットトランザクションの最初の読み取り操作のスナップショットを読み取り操作のスナップショットとして決定する。
可能な実施形態では、当該第3の決定モジュールは、
データベースシステムの分離レベルがコミット済み読み取り・書き込み以上であることに応答して、読み取り条件を満たし且つコミットタイムスタンプが読み取り操作のスナップショットよりも小さい最大バージョンをターゲットデータ項目として決定し、
データベースシステムの分離レベルがコミット済み読み取り・書き込みよりも低いことに応答して、読み取り条件を満たすデータ項目に非コミットバージョンがある場合、最大の非コミットバージョンをターゲットデータ項目として決定する。
可能な実施形態では、分散データベースシステムでハイブリッド論理クロックの形態のスナップショットを使用し、当該ハイブリッド論理クロックの形態のスナップショットは、調整ノードデバイスによって送信される。
上記の全ての選択可能な技術案は、任意の組み合わせを使用して本開示の選択可能な実施例を形成することができ、ここでは説明を繰り返さない。
なお、上記の実施例で提供されるトランザクション処理装置がトランザクションを処理するときに、上記の各機能モジュールの分割を例として説明したが、実際の適用では、必要に応じて上記の機能割り当てを異なる機能モジュールによって完成することができ、即ち、コンピュータデバイスの内部構成を様々な機能モジュールに分割して、上記の機能の全て又は一部を完成してもよい。また、上記の実施例で提供されるトランザクション処理装置とトランザクション処理方法の実施例は、同じ考え方に属し、その具体的な実現プロセスについて、トランザクション処理方法の実施例で詳述し、ここでは繰り返さない。
図16は、本出願の実施例によるコンピュータデバイスの構成概略図である。当該コンピュータデバイス1600は、配置又は性能の違いにより大きく異なる可能性があり、1つ以上のプロセッサー(Central Processing Units、CPU)1601及び1つ以上のメモリ1602を含むことができ、当該メモリ1602には少なくとも1つのプログラムコードが記憶され、当該少なくとも1つのプログラムコードは、上記の各実施例で提供されるトランザクション処理方法を実現するために、当該プロセッサー1601によってロードされて実行される。もちろん、当該コンピュータデバイス1600は、入出力を実行するために、有線又は無線ネットワークインターフェース、キーボード及び入力出力インターフェースなどの構成要素を有してもよく、当該コンピュータデバイス1600は、装置機能を実現するための他の構成要素を含んでもよく、ここでは詳しく説明しない。
例示的な実施例では、例えば少なくとも1つのプログラムコードを含むメモリなどのコンピュータ可読記憶媒体をさらに提供し、上記の少なくとも1つのプログラムコードは、上記の実施例におけるトランザクション処理方法を完成するように、端末におけるプロセッサーによって実行できる。例えば、当該コンピュータ可読記憶媒体は、ROM(Read-Only Memory、読み取り専用メモリ)、RAM(Random-Access Memory、ランダムアクセスメモリ)、CD-ROM(Compact Disc Read-Only Memory、読み取り専用光ディスク)、磁気テープ、フロッピーディスク及び光データストレージデバイスなどであってもよい。