検証を使用した同時実行制御
专栏内容:
- 手書きデータベース toadb
このコラムでは、誰でもできるように、ゼロから開発する方法や開発の手順、開発の原則、遭遇した問題などを中心に紹介します。そして、それを必要とするすべての人が参加できるように、一緒に開発することができます。
この列は定期的に更新され、対応するコードも定期的に更新されます。各段階での学習を容易にするために、各段階のコードにタグが付けられます。
开源贡献:
個人のホームページ:私のホームページ
コミュニティの管理: < /span>モットー: 空が強いとき、紳士は自己向上に努め、地形が弱いとき、紳士は自分の信念を持ち続ける優しさで富を築くオープン ソース データベース
記事ディレクトリ
序文
情報技術の急速な発展に伴い、データはさまざまな分野に浸透し、現代社会の最も重要な資産の一つとなっています。このビッグデータの時代では、データベース理論がデータの管理、保存、処理において重要な役割を果たしています。しかし、多くの読者はデータベース理論について混乱しており、適切なデータベースを選択する方法、効果的なデータベース構造を設計する方法、大量のデータを処理および管理する方法がわかりません。したがって、このコラムは、読者がデータベース テクノロジをよりよく理解して適用できるように、データベース理論の包括的かつ詳細なガイドを提供することを目的としています。
データベース理論は、データを効果的に管理、保存、取得する方法を研究するものです。現代の情報化社会においては、データ量が飛躍的に増大しており、これらのデータをいかに効率的に処理・管理するかが重要な課題となっています。同時に、クラウド コンピューティング、モノのインターネット、ビッグ データなどの新興テクノロジーの継続的な発展に伴い、データベース理論の重要性がますます顕著になっています。
したがって、このコラムを共有することで、データベース理論に関するすべての人の知識と理解を向上させ、興味のある友人を助けることができればと考えています。
概要
検証は、トランザクションがシリアル化可能な方法で実行されているかどうかを適切なタイミングでチェックしながら、トランザクションがブロックせずにデータにアクセスできるようにするもう 1 つの楽観的な同時実行制御モデルです。
実際のデータベースでは複数の同時実行制御が混在して使用されますが、ここでは分かりやすいように分けて、妥当性確認モデルの動作仕組みとルールを紹介します。
有効性確認の原則
検証は、すべてのデータベース要素のアクセス タイムスタンプを保存するのではなく、アクティブなトランザクションが実行している内容に関する記録のリストを維持する必要があるという点でタイムスタンプ モデルとは異なります。
トランザクションが開始されると、値がデータベース要素に書き込まれる直前に、検証フェーズが行われます。このフェーズでは、読み取って書き込む一連の要素が他のアクティブなトランザクションの書き込みセットと比較され、実際に実行不可能な動作が発生するリスクがある場合、トランザクションはロールバックされます。
妥当性確認に基づくスケジューラ構造
検証が同時実行制御に使用される場合、トランザクション T に関して、トランザクションが読み書きするデータベース要素のセット (それぞれ読み取りセット RS(T) および書き込みセット WS(T) として示される) をスケジューラに通知する必要があります。
正当性確認に基づく取引実行段階の分割
その後、トランザクションは 3 つの段階で実行されます。
-
読み取りフェーズ。最初のフェーズでは、トランザクションは読み取りセット内のすべての要素をデータベースから読み取り、トランザクションは書き込むデータベース要素のセットを計算する必要もあります。
-
有効性確認フェーズ: このフェーズでは、スケジューラは、トランザクションの読み取りセットと書き込みセットを他のアクティブなトランザクションと比較することによって、トランザクションの有効性を確認します。詳細な手順は以下で説明します。確認応答が失敗した場合、トランザクションはロールバックされ、失敗した場合は次のフェーズに進みます。
-
書き込みフェーズ; このフェーズでは、トランザクションは書き込みセット内のデータベース要素の値をデータベースに書き込みます。
スケジューラは、有効性確認が瞬時に完了することを前提としているため、有効性確認に基づくスケジューラは、トランザクションに対して想定されるシリアルオーダーを持ち、このシリアルオーダーに基づいてトランザクションが有効であるかどうかを判定する。
スケジューラによって維持されるデータ収集
トランザクションの有効性の決定をサポートするために、スケジューラはデータのコレクションを維持します。
-
START コレクション; トランザクションは開始されたが、まだ有効性が確認されていないトランザクションのコレクション。このセット内のトランザクションの場合、スケジューラはトランザクションが開始された時刻を維持します。
-
VAL; 有効性は確認されましたが、トランザクション収集の第 3 段階はまだ完了していません。つまり、トランザクション T の確認時刻です。
-
FIN; 3 番目のフェーズのトランザクションが完了しました。これはトランザクションの完了時間です。このセットのトランザクション T について、スケジューラは START(T)、VAL(T)、および FIN の 3 つの値を記録します。 (T)。
トランザクションの数が増加するにつれて、このデータ セットは増大し続けます。アクティブなトランザクション U の START(U) がセット内のトランザクション T の FIN(T) より大きい場合、トランザクション T はこのデータ セットから追い出されます。 set. コレクションの無限の増大を防ぐための例外。
有効性確認ルール
トランザクションが検証フェーズに従って順番に実行される場合、上記のセットを使用して順序が乱れたトランザクションを識別できます。有効性確認のルールは次のとおりです。
-
検証済みでトランザクション T の開始前に完了していないすべてのトランザクション U について、FIN(U) > START(T) の条件を満たします。このとき、RS(T) と WS( U) 交差する、それが空かどうか。
-
トランザクション T の正当性が確認される前に検証済みで完了していないすべての U について、FIN(U) > VAL(T) の条件を満たします。U については、WS(T) と WS( U ) は空です。
早読みの確認
トランザクション T の正当性を確認する場合、トランザクション T は X を読み出しましたが、トランザクション U によって書き込まれた X の値はコミットされていないため、トランザクション T の正当性は確認できません。
- トランザクション U は VAL セット内にあります。つまり、U の有効性確認は成功しています。
- トランザクション U とトランザクション T は、FIN(U) > START(T) の条件を満たします。つまり、トランザクション U は、トランザクション T が有効性確認段階に入る前に完了しません。
- このとき、トランザクション T の正当性が確認されると、その読み取り集合 RS(T) がトランザクション U の書き込み集合 WS(U) と交差し、少なくとも X 個の要素を含むかどうかを確認します。このとき、T はシリアル順序の不一致を避けるためにロールバックされました。のリスク。
確認書が早すぎた
トランザクション U が X を書き込む前に、後から開始されたトランザクション T が最初に書き込みます。
- トランザクション U は VAL セット内にあります。つまり、U の有効性確認は成功しています。
- トランザクション U とトランザクション T は、FIN(U) > VAL(T) の条件を満たします。つまり、トランザクション T が有効性確認に入った後、トランザクション U は完了しません。
- このとき、トランザクション T の正当性を確認するために、そのライトセット WS(T) とトランザクション U のライトセット WS(U) に交差があるかどうかを確認し、このとき交差に X があれば妥当性確認となります。を渡すことはできないため、T をロールバックする必要があります。
要約する
有効性の確認は瞬時に完了すると思われていますが、実際はそうではなく、特にマルチプロセッサマシンでは、正常に完了する効果を得るにはアトミックな同期が必要です。
終わり
応援していただき誠にありがとうございます。閲覧中は貴重なコメントを忘れずに残してください。励みになると思ったら、いいねと保存をお願いします。さらに頑張ります!
著者のメールアドレス:[email protected]
間違いや脱落があった場合は、指摘してお互いに学び合ってください。