Distributed-dbms-quick-guide

提供:Dev Guides
移動先:案内検索

分散DBMS-コンセプト

組織を適切に機能させるには、適切に管理されたデータベースが必要です。 最近では、データベースは本質的に集中化されていました。 ただし、グローバリゼーションの増加に伴い、組織は世界中で多様化する傾向があります。 中央のデータベースではなく、ローカルサーバーにデータを分散することを選択する場合があります。 したがって、 Distributed Databases の概念に到達しました。

この章では、データベースとデータベース管理システム(DBMS)の概要を説明します。 データベースは、関連データの順序付けられたコレクションです。 DBMSは、データベース上で動作するソフトウェアパッケージです。 DBMSの詳細な研究は、「Learn DBMS」という名前のチュートリアルで利用できます。 この章では、DDBMSの研究を簡単に行えるように、主要な概念を修正します。 対象となる3つのトピックは、データベーススキーマ、データベースの種類、およびデータベースに対する操作です。

データベースおよびデータベース管理システム

  • データベース*は、特定の目的のために構築された関連データの順序付けられたコレクションです。 データベースは、複数のテーブルのコレクションとして編成できます。テーブルは、実世界の要素またはエンティティを表します。 各テーブルには、エンティティの特性を表すいくつかの異なるフィールドがあります。

たとえば、会社のデータベースには、プロジェクト、従業員、部門、製品、財務記録のテーブルが含まれる場合があります。 Employeeテーブルのフィールドには、Name、Company_Id、Date_of_Joiningなどがあります。

  • データベース管理システム*は、データベースの作成とメンテナンスを可能にするプログラムの集まりです。 DBMSは、データベース内のデータの定義、構築、操作、共有を容易にするソフトウェアパッケージとして利用できます。 データベースの定義には、データベースの構造の説明が含まれます。 データベースの構築には、任意の記憶媒体にデータを実際に保存することが含まれます。 操作とは、データベースから情報を取得し、データベースを更新してレポートを生成することです。 データを共有すると、異なるユーザーまたはプログラムがデータにアクセスしやすくなります。

DBMSアプリケーション領域の例

  • 自動預け払い機
  • 列車予約システム
  • 従業員管理システム
  • 学生情報システム

DBMSパッケージの例

  • MySQL
  • オラクル
  • SQLサーバー
  • dBASE
  • FoxPro
  • PostgreSQLなど

データベーススキーマ

データベーススキーマは、データベースの設計中に指定され、まれに変更される可能性のあるデータベースの説明です。 データの編成、データ間の関係、およびデータに関連付けられた制約を定義します。

多くの場合、データベースは* 3スキーマアーキテクチャ*または* ANSISPARCアーキテクチャ*で表されます。 このアーキテクチャの目標は、物理データベースからユーザーアプリケーションを分離することです。 3つのレベルは-

  • 内部スキーマを持つ内部レベル-データベースの物理構造、内部ストレージの詳細、アクセスパスについて説明します。
  • 概念スキーマを持つ概念レベル-データの物理ストレージの詳細を隠しつつ、データベース全体の構造を記述します。 これは、エンティティ、データ型と制約のある属性、ユーザー操作と関係を示しています。
  • 外部スキーマまたはビューを持つ外部またはビューレベル-特定のユーザーまたはユーザーグループに関連するデータベースの一部を説明し、残りのデータベースを非表示にします。

DBMSの種類

DBMSには4つのタイプがあります。

階層DBMS

階層DBMSでは、データベース内のデータ間の関係が確立され、1つのデータ要素が別のデータ要素の従属要素として存在します。 データ要素には親子関係があり、「ツリー」データ構造を使用してモデル化されます。 これらは非常に高速でシンプルです。

階層DBMS

ネットワークDBMS

データベース内のデータ間の関係がネットワーク形式の多対多のタイプであるネットワークDBMS。 多くの多対多の関係が存在するため、構造は一般的に複雑です。 ネットワークDBMSは、「グラフ」データ構造を使用してモデル化されます。

ネットワークDBMS

リレーショナルDBMS

リレーショナルデータベースでは、データベースはリレーションの形式で表されます。 各関係はエンティティをモデル化し、値の表として表されます。 リレーションまたはテーブルでは、行はタプルと呼ばれ、単一のレコードを示します。 列はフィールドまたは属性と呼ばれ、エンティティの特性プロパティを示します。 RDBMSは、最も一般的なデータベース管理システムです。

例-学生関係-

リレーショナルDBMS

オブジェクト指向DBMS

オブジェクト指向DBMSは、オブジェクト指向プログラミングパラダイムのモデルから派生しています。 これらは、データベースに格納されている一貫性のあるデータと、プログラムの実行時に見られる一時的なデータの両方を表すのに役立ちます。 それらは、オブジェクトと呼ばれる小さく再利用可能な要素を使用します。 各オブジェクトには、データ部分と、データに作用する一連の操作が含まれます。 オブジェクトとその属性は、リレーショナルテーブルモデルに格納されるのではなく、ポインターを介してアクセスされます。

例-簡素化された銀行口座オブジェクト指向データベース-

オブジェクト指向DBMS

分散DBMS

分散データベースは、コンピューターネットワークまたはインターネットを介して分散される相互接続されたデータベースのセットです。 分散データベース管理システム(DDBMS)は、分散データベースを管理し、ユーザーに対してデータベースを透過的にするメカニズムを提供します。 これらのシステムでは、組織のすべてのコンピューティングリソースを最適に使用できるように、データが複数のノードに意図的に分散されています。

DBMSでの操作

データベースの4つの基本操作は、作成、取得、更新、削除です。

  • データベース構造を作成し、データを入力します-データベース関係の作成には、データ構造、データ型、保存するデータの制約の指定が含まれます。 + *例-学生テーブルを作成するSQLコマンド-
CREATE TABLE STUDENT (
   ROLL INTEGER PRIMARY KEY,
   NAME VARCHAR2(25),
   YEAR INTEGER,
   STREAM VARCHAR2(10)
);
 *データ形式が定義されると、実際のデータは何らかの記憶媒体の形式に従って保存されます。
+* 例*学生テーブルに単一のタプルを挿入するSQLコマンド-
INSERT INTO STUDENT ( ROLL, NAME, YEAR, STREAM)
VALUES ( 1, 'ANKIT JHA', 1, 'COMPUTER SCIENCE');
  • データベースからの RETRIEVE 情報–情報の取得には、通常、テーブルのサブセットを選択するか、いくつかの計算が行われた後にテーブルからデータを表示することが含まれます。 テーブルに対してクエリを実行することにより行われます。 + -Computer Scienceストリームのすべての学生の名前を取得するには、次のSQLクエリを実行する必要があります-
SELECT NAME FROM STUDENT
WHERE STREAM = 'COMPUTER SCIENCE';
  • UPDATE 情報の保存とデータベース構造の変更–テーブルの更新には、既存のテーブルの行の古い値を新しい値に変更することが含まれます。 + -ストリームをElectronicsからElectronics and Communicationsに変更するSQLコマンド-
UPDATE STUDENT
SET STREAM = 'ELECTRONICS AND COMMUNICATIONS'
WHERE STREAM = 'ELECTRONICS';
 *データベースの変更とは、テーブルの構造を変更することです。 ただし、テーブルの変更にはいくつかの制限があります。
+* 例*-新しいフィールドまたは列を追加するには、たとえば住所をStudentテーブルに追加するには、次のSQLコマンドを使用します-
ALTER TABLE STUDENT
ADD ( ADDRESS VARCHAR2(50) );
  • DELETE 情報の保存またはテーブル全体の削除–特定の情報を削除するには、特定の条件を満たすテーブルから選択した行を削除する必要があります。 + -現在失明している4年目にいるすべての生徒を削除するには、SQLコマンドを使用します-
DELETE FROM STUDENT
WHERE YEAR = 4;
 *または、テーブル全体をデータベースから削除することもできます。
+* 例*-学生テーブルを完全に削除するには、使用されるSQLコマンドは-
DROP TABLE STUDENT;

分散DBMS-分散データベース

この章では、DDBMSの概念を紹介します。 分散データベースには、世界中に地理的に分散しているデータベースがいくつかあります。 分散DBMSは、ユーザーに1つのデータベースとして表示されるように、分散データベースを管理します。 この章の後半では、分散データベースにつながる要因、その長所と短所について検討します。

  • 分散データベース*は、相互接続された複数のデータベースの集まりであり、コンピューターネットワークを介して通信するさまざまな場所に物理的に分散されています。

特徴

  • コレクション内のデータベースは、論理的に相互に関連しています。 多くの場合、それらは単一の論理データベースを表します。
  • データは複数のサイトに物理的に保存されます。 各サイトのデータは、他のサイトから独立したDBMSによって管理できます。
  • サイト内のプロセッサはネットワーク経由で接続されています。 マルチプロセッサ構成はありません。
  • 分散データベースは、緩やかに接続されたファイルシステムではありません。
  • 分散データベースにはトランザクション処理が組み込まれていますが、トランザクション処理システムと同義ではありません。

分散データベース管理システム

分散データベース管理システム(DDBMS)は、すべてが単一の場所に格納されているかのように分散データベースを管理する集中型ソフトウェアシステムです。

特徴

  • 分散データベースの作成、取得、更新、削除に使用されます。
  • データベースを定期的に同期し、ユーザーに配布が透過的になることでアクセスメカニズムを提供します。
  • これにより、任意のサイトで変更されたデータが普遍的に更新されます。
  • 大量のデータが処理され、多数のユーザーが同時にアクセスするアプリケーション分野で使用されます。
  • 異種データベースプラットフォーム向けに設計されています。
  • データベースの機密性とデータの整合性を維持します。

DDBMSを促進する要因

次の要因は、DDBMSへの移行を促進します-

  • 組織単位の分散性-現在のほとんどの組織は、世界中に物理的に分散している複数の単位に細分化されています。 各ユニットには、独自のローカルデータのセットが必要です。 したがって、組織のデータベース全体が分散されます。
  • データの共有が必要-複数の組織単位は、多くの場合、互いに通信し、データとリソースを共有する必要があります。 これには、同期した方法で使用する必要がある共通データベースまたは複製データベースが必要です。
  • * OLTPとOLAPの両方のサポート*-オンライントランザクション処理(OLTP)とオンライン分析処理(OLAP)は、共通データを持つ可能性のある多様なシステムで機能します。 分散データベースシステムは、同期されたデータを提供することにより、これらの両方の処理を支援します。
  • データベースの回復-DDBMSで使用される一般的な手法の1つは、異なるサイト間でのデータの複製です。 データの複製は、いずれかのサイトのデータベースが破損した場合のデータ回復に自動的に役立ちます。 損傷したサイトが再構築されている間、ユーザーは他のサイトのデータにアクセスできます。 したがって、データベース障害はユーザーにとってほとんど目立たなくなる可能性があります。
  • 複数のアプリケーションソフトウェアのサポート-ほとんどの組織は、それぞれ固有のデータベースサポートを備えたさまざまなアプリケーションソフトウェアを使用しています。 DDBMSは、異なるプラットフォーム間で同じデータを使用するための統一された機能を提供します。

分散データベースの利点

以下は、集中型データベースに対する分散データベースの利点です。

モジュラー開発-集中型データベースシステムでシステムを新しい場所または新しいユニットに拡張する必要がある場合、アクションには既存の機能の大幅な努力と中断が必要です。 ただし、分散データベースでは、現在の機能を中断することなく、新しいサイトに新しいコンピューターとローカルデータを追加し、最終的にそれらを分散システムに接続するだけで作業できます。

信頼性の高い-データベース障害の場合、集中データベースのシステム全体が停止します。 ただし、分散システムでは、コンポーネントに障害が発生した場合、システムの機能のパフォーマンスが低下する可能性があります。 したがって、DDBMSはより信頼性があります。

より良い応答-データが効率的な方法で配信される場合、ユーザー要求はローカルデータ自体から満たされるため、応答が速くなります。 一方、中央集中型システムでは、すべてのクエリが中央コンピューターを通過して処理される必要があるため、応答時間が長くなります。

低通信コスト-分散データベースシステムでは、データが主に使用される場所にローカルに配置されている場合、データ操作の通信コストを最小限に抑えることができます。 これは、集中システムでは実行できません。

分散データベースの逆境

以下は、分散データベースに関連する逆境の一部です。

  • 複雑で高価なソフトウェアが必要-DDBMSは、複数のサイトでデータの透過性と調整を提供するために、複雑でしばしば高価なソフトウェアを必要とします。
  • 処理のオーバーヘッド-単純な操作でも、サイト全体でデータの均一性を実現するには、大量の通信と追加の計算が必要になる場合があります。
  • データの整合性-複数のサイトでデータを更新する必要があるため、データの整合性に問題が生じます。
  • 不適切なデータ配布のオーバーヘッド-クエリの応答性は、適切なデータ配布に大きく依存しています。 不適切なデータ配布は、多くの場合、ユーザーの要求に対する応答を非常に遅くします。

分散DBMS-データベース環境

チュートリアルのこのパートでは、分散データベース環境の設計を支援するさまざまな側面を学習します。 この章は、分散データベースの種類から始まります。 分散データベースは、さらに分割された同種および異種データベースに分類できます。 この章の次のセクションでは、分散アーキテクチャ、つまりクライアント-サーバー、ピア-ピア-ピア、マルチDBMSについて説明します。 最後に、複製や断片化などのさまざまな設計の選択肢が紹介されています。

分散データベースの種類

分散データベースは、次の図に示すように、さらに細分化された同種および異種の分散データベース環境に大きく分類できます。

分散データベース環境

同種分散データベース

同種の分散データベースでは、すべてのサイトが同一のDBMSとオペレーティングシステムを使用します。 その特性は-

  • サイトは非常によく似たソフトウェアを使用しています。
  • サイトは同一のDBMSまたは同じベンダーのDBMSを使用します。
  • 各サイトは他のすべてのサイトを認識しており、他のサイトと協力してユーザーリクエストを処理します。
  • データベースは、単一のデータベースであるかのように、単一のインターフェースを介してアクセスされます。

同種分散データベースの種類

同種分散データベースには2つのタイプがあります-

  • 自律-各データベースは独立しており、独自に機能します。 これらは制御アプリケーションによって統合され、メッセージパッシングを使用してデータ更新を共有します。
  • 非自律-データは同種のノードに分散され、中央またはマスターDBMSはサイト全体のデータ更新を調整します。

異種分散データベース

異種分散データベースでは、サイトごとにオペレーティングシステム、DBMS製品、データモデルが異なります。 その特性は-

  • 異なるサイトは異なるスキーマとソフトウェアを使用しています。
  • システムは、リレーショナル、ネットワーク、階層、またはオブジェクト指向のようなさまざまなDBMSで構成されます。
  • スキーマが異なるため、クエリ処理は複雑です。
  • トランザクション処理は、ソフトウェアが異なるため複雑です。
  • サイトは他のサイトを認識していない可能性があるため、ユーザーリクエストの処理には限定的な協力があります。

異種分散データベースの種類

  • 連合-異種データベースシステムは本質的に独立しており、単一のデータベースシステムとして機能するように統合されています。
  • Un-federated -データベースシステムは、データベースへのアクセスに使用される中央調整モジュールを採用しています。

分散DBMSアーキテクチャ

DDBMSアーキテクチャは、一般的に3つのパラメータに応じて開発されています-

  • Distribution -さまざまなサイトにわたるデータの物理的分布を示します。
  • 自律-データベースシステムの制御の分布と、各構成DBMSが独立して動作できる程度を示します。
  • 異質性-データモデル、システムコンポーネント、およびデータベースの均一性または非類似性を指します。

建築モデル

一般的なアーキテクチャモデルの一部は次のとおりです-

  • クライアント-DDBMSのサーバーアーキテクチャ
  • ピア-to-DDBMSのピアアーキテクチャ
  • マルチDBMSアーキテクチャ

クライアント-DDBMSのサーバーアーキテクチャ

これは、機能がサーバーとクライアントに分かれている2レベルのアーキテクチャです。 サーバー機能には、主にデータ管理、クエリ処理、最適化、トランザクション管理が含まれます。 クライアント機能には、主にユーザーインターフェイスが含まれます。 ただし、整合性チェックやトランザクション管理などの機能がいくつかあります。

2つの異なるクライアント-サーバーアーキテクチャは-

  • 単一サーバー複数クライアント
  • 複数サーバー複数クライアント(次の図に示す)

サーバーアーキテクチャ

DDBMSのピアツーピアアーキテクチャ

これらのシステムでは、各ピアはデータベースサービスを提供するためのクライアントおよびサーバーの両方として機能します。 ピアは他のピアとリソースを共有し、アクティビティを調整します。

このアーキテクチャには、通常、4つのレベルのスキーマがあります-

  • Global Conceptual Schema -データのグローバル論理ビューを示します。
  • ローカルコンセプトスキーマ-各サイトの論理データ編成を示します。
  • ローカル内部スキーマ-各サイトの物理データ編成を示します。
  • 外部スキーマ-データのユーザービューを示します。

ピアツーピアアーキテクチャ

マルチDBMSアーキテクチャ

これは、2つ以上の自律型データベースシステムの集合によって形成される統合データベースシステムです。

マルチDBMSは、スキーマの6つのレベルを介して表現することができます-

  • マルチデータベースビューレベル-統合された分散データベースのサブセットで構成される複数のユーザービューを示します。
  • マルチデータベース概念レベル-グローバル論理マルチデータベース構造定義で構成される統合マルチデータベースを示します。
  • マルチデータベース内部レベル-異なるサイトおよびマルチデータベースからローカルデータへのデータマッピングを示します。
  • ローカルデータベースビューレベル-ローカルデータのパブリックビューを示します。
  • ローカルデータベースの概念レベル-各サイトのローカルデータ編成を示します。
  • ローカルデータベース内部レベル-各サイトの物理データ編成を示します。

マルチDBMSには2つの設計の選択肢があります-

  • マルチデータベースの概念レベルのモデル。
  • マルチデータベースの概念レベルなしのモデル。

マルチデータベース概念レベル

マルチデータベース概念レベルなし

設計の選択肢

DDBMSのテーブルのディストリビューション設計の選択肢は次のとおりです-

  • 複製されておらず、断片化されていない
  • 完全に複製
  • 部分的に複製
  • 断片化
  • 混合

複製されていない、断片化されていない

この設計代替案では、異なるテーブルが異なるサイトに配置されます。 データは、最も使用されているサイトに近接するように配置されます。 異なるサイトに配置されたテーブルの情報を結合するために必要なクエリの割合が低いデータベースシステムに最適です。 適切な分散戦略が採用されている場合、この設計代替案は、データ処理中の通信コストを削減するのに役立ちます。

完全に複製

この設計代替案では、各サイトに、すべてのデータベーステーブルの1つのコピーが格納されます。 各サイトにはデータベース全体の独自のコピーがあるため、クエリは非常に高速であり、通信コストはごくわずかです。 それどころか、データの膨大な冗長性は、更新操作中に膨大なコストを必要とします。 したがって、これは、データベースの更新回数が少ない一方で、大量のクエリを処理する必要があるシステムに適しています。

部分的に複製

テーブルのコピーまたはテーブルの一部は、異なるサイトに保存されます。 テーブルの配布は、アクセスの頻度に従って行われます。 これは、テーブルにアクセスする頻度がサイトごとにかなり異なるという事実を考慮しています。 テーブル(または部分)のコピーの数は、アクセスクエリが実行される頻度と、アクセスクエリを生成するサイトによって異なります。

断片化

この設計では、テーブルはフラグメントまたはパーティションと呼ばれる2つ以上の部分に分割され、各フラグメントは異なるサイトに格納できます。 これは、テーブルに格納されているすべてのデータが特定のサイトで必要になることはほとんどないという事実を考慮しています。 さらに、断片化により並列性が向上し、災害復旧が向上します。 ここでは、システム内の各フラグメントのコピーは1つだけです。 冗長データなし。

3つの断片化技術は次のとおりです-

  • 垂直フラグメンテーション
  • 水平フラグメンテーション
  • ハイブリッドフラグメンテーション

混合分布

これは、断片化と部分複製の組み合わせです。 ここでは、テーブルは最初に任意の形式(水平または垂直)に断片化され、その後、これらのフラグメントは、フラグメントにアクセスする頻度に従って異なるサイトに部分的に複製されます。

分散DBMS-設計戦略

前の章では、さまざまな設計の代替案を紹介しました。 この章では、設計の採用を支援する戦略を研究します。 戦略は、レプリケーションとフラグメンテーションに大きく分けることができます。 ただし、ほとんどの場合、2つの組み合わせが使用されます。

データ複製

データ複製は、データベースの個別のコピーを2つ以上のサイトに保存するプロセスです。 これは、分散データベースの一般的なフォールトトレランス手法です。

データ複製の利点

  • 信頼性-いずれかのサイトで障害が発生した場合、別のサイトでコピーが利用できるため、データベースシステムは引き続き動作します。
  • ネットワーク負荷の削減-データのローカルコピーが利用できるため、特にプライム時間中に、ネットワーク使用量を削減してクエリ処理を実行できます。 データ更新は、プライム時間以外の時間に実行できます。
  • 迅速な応答-データのローカルコピーの可用性により、クエリ処理が高速になり、応答時間が短縮されます。
  • シンプルなトランザクション-トランザクションは、異なるサイトにあるテーブルの結合数が少なく、ネットワーク全体の調整が最小限で済みます。 したがって、それらは本質的に単純になります。

データ複製の欠点

  • ストレージ要件の増加-データの複数のコピーを維持すると、ストレージコストが増加します。 必要なストレージスペースは、集中システムに必要なストレージの倍数です。
  • データ更新のコストと複雑さの増加-データ項目が更新されるたびに、異なるサイトのデータのすべてのコピーに更新を反映する必要があります。 これには、複雑な同期技術とプロトコルが必要です。
  • 望ましくないアプリケーション-データベースの結合-複雑な更新メカニズムを使用しない場合、データの不整合を取り除くには、アプリケーションレベルでの複雑な調整が必要です。 これにより、望ましくないアプリケーション-データベース結合が発生します。

一般的に使用されるいくつかのレプリケーション手法は-

  • スナップショットレプリケーション
  • ほぼリアルタイムの複製
  • プル複製

フラグメンテーション

断片化は、テーブルを小さなテーブルのセットに分割するタスクです。 テーブルのサブセットは*フラグメント*と呼ばれます。 断片化には、水平、垂直、およびハイブリッド(水平と垂直の組み合わせ)の3つのタイプがあります。 水平方向の断片化は、さらに2つの手法に分類できます。プライマリ水平方向の断片化と派生水平方向の断片化です。

断片化は、元のテーブルを断片から再構築できるように行う必要があります。 これは、必要に応じてフラグメントから元のテーブルを再構築できるようにするために必要です。 この要件は「再構築性」と呼ばれます。

フラグメンテーションの利点

  • データは使用場所の近くに保存されるため、データベースシステムの効率が向上します。
  • データはローカルで使用できるため、ほとんどのクエリにはローカルクエリ最適化手法で十分です。
  • 無関係なデータはサイトで利用できないため、データベースシステムのセキュリティとプライバシーを維持できます。

フラグメンテーションの欠点

  • 異なるフラグメントからのデータが必要な場合、アクセス速度は非常に高速になる可能性があります。
  • 再帰的な断片化の場合、再構築の仕事には高価な技術が必要になります。 *異なるサイトにデータのバックアップコピーがないと、サイトに障害が発生した場合にデータベースが無効になる可能性があります。

垂直フラグメンテーション

垂直フラグメンテーションでは、テーブルのフィールドまたは列はフラグメントにグループ化されます。 再構成性を維持するには、各フラグメントにテーブルのプライマリキーフィールドを含める必要があります。 垂直断片化は、データのプライバシーを強化するために使用できます。

たとえば、大学のデータベースでは、登録されているすべての学生の記録を、次のスキーマを持つStudentテーブルに保持しているとします。

学生

Regd_No Name Course Address Semester Fees Marks

現在、料金の詳細はアカウントセクションで管理されています。 この場合、設計者は次のようにデータベースを断片化します-

CREATE TABLE STD_FEES AS
   SELECT Regd_No, Fees
   FROM STUDENT;

水平フラグメンテーション

水平フラグメンテーションは、1つ以上のフィールドの値に従ってテーブルのタプルをグループ化します。 水平方向の断片化も、再構成の規則を確認する必要があります。 各水平フラグメントには、元のベーステーブルのすべての列が必要です。

たとえば、学生のスキーマでは、コンピュータサイエンスコースのすべての学生の詳細をコンピュータサイエンスの学校で維持する必要がある場合、デザイナーは次のようにデータベースを水平方向に断片化します-

CREATE COMP_STD AS
   SELECT* FROM STUDENT
   WHERE COURSE = "Computer Science";

ハイブリッドフラグメンテーション

ハイブリッドフラグメンテーションでは、水平および垂直のフラグメンテーション手法の組み合わせが使用されます。 これは、最小限の外部情報でフラグメントを生成するため、最も柔軟なフラグメンテーション手法です。 ただし、元のテーブルの再構築は、多くの場合、費用のかかる作業です。

ハイブリッド断片化は、2つの代替方法で行うことができます-

  • 最初に、水平方向のフラグメントのセットを生成します。次に、1つ以上の水平フラグメントから垂直フラグメントを生成します。
  • 最初に、一連の垂直フラグメントを生成します。次に、1つ以上の垂直フラグメントから水平フラグメントを生成します。

DDBMS-配布の透明性

配布の透過性は、配布の内部詳細がユーザーから隠されているため、分散データベースのプロパティです。 DDBMSデザイナーは、テーブルのフラグメント化、フラグメントの複製、およびそれらの異なるサイトへの保存を選択できます。 ただし、ユーザーはこれらの詳細を知らないため、集中型データベースのように使いやすい分散データベースを見つけます。

分布の透明性の3つの次元は-

  • ロケーションの透明性
  • 断片化の透明性
  • レプリケーションの透過性

ロケーションの透明性

場所の透過性により、ユーザーは、ユーザーのサイトにローカルに保存されているかのように、任意のテーブルまたはテーブルのフラグメントを照会できます。 テーブルまたはそのフラグメントが分散データベースシステムのリモートサイトに格納されているという事実は、エンドユーザーにはまったく気付かれないはずです。 リモートサイトのアドレスとアクセスメカニズムは完全に隠されています。

ロケーションの透過性を組み込むために、DDBMSは、更新された正確なデータディクショナリと、データのロケーションの詳細を含むDDBMSディレクトリにアクセスできる必要があります。

断片化の透明性

断片化の透過性により、ユーザーは任意のテーブルを、断片化されていないかのように照会できます。 したがって、ユーザーが照会しているテーブルが実際にはフラグメントまたはいくつかのフラグメントの結合であるという事実を隠します。 また、フラグメントがさまざまなサイトに配置されているという事実も隠されています。

これは、ユーザーがテーブル自体ではなくテーブルのビューを使用していることをユーザーが知らないSQLビューのユーザーにやや似ています。

レプリケーションの透明性

レプリケーションの透過性により、データベースのレプリケーションはユーザーから見えなくなります。 ユーザーは、テーブルのコピーが1つだけ存在するかのように、テーブルを照会できます。

レプリケーションの透過性は、同時実行性の透過性と障害の透過性に関連付けられています。 ユーザーがデータ項目を更新するたびに、更新はテーブルのすべてのコピーに反映されます。 ただし、この操作はユーザーに知られるべきではありません。 これは並行性の透過性です。 また、サイトに障害が発生した場合、ユーザーは障害を知らなくても複製されたコピーを使用してクエリを続行できます。 これは障害の透過性です。

OHPフィルムの組み合わせ

分散データベースシステムでは、設計者は、指定されたすべての透明度がかなりの範囲で維持されるようにする必要があります。 設計者は、テーブルを断片化し、それらを複製し、異なるサイトに保存することを選択できます。エンドユーザーには気付かれません。 ただし、完全な配布の透明性は困難なタスクであり、かなりの設計努力が必要です。

分散DBMS-データベース制御

データベース制御とは、データベースの認証されたユーザーとアプリケーションに正しいデータを提供するために規制を実施するタスクを指します。 ユーザーが正しいデータを利用できるようにするには、すべてのデータがデータベースで定義された整合性制約に準拠する必要があります。 また、データベースのセキュリティとプライバシーを維持するために、データは許可されていないユーザーから除外する必要があります。 データベース管理は、データベース管理者(DBA)の主要なタスクの1つです。

データベース制御の3つの次元は次のとおりです-

  • 認証
  • アクセス権
  • 整合性の制約

認証

分散データベースシステムでは、認証は正規のユーザーのみがデータリソースにアクセスできるプロセスです。

認証は2つのレベルで実施することができます-

  • クライアントコンピューターへのアクセスの制御-このレベルでは、データベースサーバーへのユーザーインターフェイスを提供するクライアントコンピューターへのログイン中は、ユーザーアクセスが制限されます。 最も一般的な方法は、ユーザー名とパスワードの組み合わせです。 ただし、高度なセキュリティデータには、生体認証などのより高度な方法を使用できます。
  • データベースソフトウェアへのアクセスの制御-このレベルでは、データベースソフトウェア/管理者がユーザーに資格情報を割り当てます。 ユーザーは、これらの資格情報を使用してデータベースにアクセスします。 方法の1つは、データベースサーバー内にログインアカウントを作成することです。

アクセス権

ユーザーのアクセス権とは、テーブルの作成、テーブルのドロップ、テーブル内のタプルの追加/削除/更新、またはテーブルに対するクエリなどのDBMS操作に関してユーザーに与えられる特権のことです。

分散環境では、多数のテーブルがあり、さらに多くのユーザーがいるため、個々のアクセス権をユーザーに割り当てることはできません。 そのため、DDBMSは特定のロールを定義します。 ロールは、データベースシステム内の特定の特権を持つ構成体です。 異なる役割が定義されると、個々のユーザーにこれらの役割のいずれかが割り当てられます。 多くの場合、役割の階層は、組織の権限と責任の階層に従って定義されます。

たとえば、次のSQLステートメントはロール「Accountant」を作成し、このロールをユーザー「ABC」に割り当てます。

CREATE ROLE ACCOUNTANT;
GRANT SELECT, INSERT, UPDATE ON EMP_SAL TO ACCOUNTANT;
GRANT INSERT, UPDATE, DELETE ON TENDER TO ACCOUNTANT;
GRANT INSERT, SELECT ON EXPENSE TO ACCOUNTANT;
COMMIT;
GRANT ACCOUNTANT TO ABC;
COMMIT;

セマンティック完全性制御

セマンティック整合性制御は、データベースシステムの整合性制約を定義および実施します。

整合性の制約は次のとおりです-

  • データ型の整合性制約
  • エンティティー整合性制約
  • 参照整合性制約

データ型の整合性制約

データ型の制約は、指定されたデータ型のフィールドに適用できる値の範囲と操作の種類を制限します。

たとえば、テーブル「HOSTEL」には、ホステル番号、ホステル名、および容量の3つのフィールドがあると考えてみましょう。 ホステル番号は大文字の「H」で始まる必要があり、NULLにすることはできません。また、容量は150を超えてはなりません。 次のSQLコマンドは、データ定義に使用することができます-

CREATE TABLE HOSTEL (
   H_NO VARCHAR2(5) NOT NULL,
   H_NAME VARCHAR2(15),
   CAPACITY INTEGER,
   CHECK ( H_NO LIKE 'H%'),
   CHECK ( CAPACITY <= 150)
);

エンティティ整合性制御

エンティティー整合性制御は、各タプルを他のタプルから一意に識別できるようにルールを実施します。 このために、主キーが定義されています。 主キーは、タプルを一意に識別できる最小限のフィールドのセットです。 エンティティー整合性制約は、テーブル内の2つのタプルが主キーに対して同じ値を持つことはできず、主キーの一部であるフィールドがNULL値を持つことはできないことを示しています。

たとえば、上記のホステルテーブルでは、次のSQLステートメントを使用して、ホステル番号を主キーとして割り当てることができます(チェックを無視します)-

CREATE TABLE HOSTEL (
   H_NO VARCHAR2(5) PRIMARY KEY,
   H_NAME VARCHAR2(15),
   CAPACITY INTEGER
);

参照整合性制約

参照整合性制約は、外部キーのルールを規定します。 外部キーは、関連テーブルの主キーであるデータテーブル内のフィールドです。 参照整合性制約は、外部キーフィールドの値が、参照されるテーブルの主キーの値の中にあるか、完全にNULLであるかのルールを定めます。

たとえば、学生がホステルに住むことを選択できる学生テーブルについて考えてみましょう。 これを含めるには、hostelテーブルのプライマリキーをstudentテーブルの外部キーとして含める必要があります。 次のSQL文にはこれが組み込まれています-

CREATE TABLE STUDENT (
   S_ROLL INTEGER PRIMARY KEY,
   S_NAME VARCHAR2(25) NOT NULL,
   S_COURSE VARCHAR2(10),
   S_HOSTEL VARCHAR2(5) REFERENCES HOSTEL
);

クエリ最適化のためのリレーショナル代数

クエリが配置されると、最初にスキャンされ、解析され、検証されます。 次に、クエリツリーやクエリグラフなど、クエリの内部表現が作成されます。 次に、データベーステーブルから結果を取得するための代替実行戦略が考案されました。 クエリ処理に最適な実行戦略を選択するプロセスは、クエリ最適化と呼ばれます。

DDBMSのクエリ最適化の問題

DDBMSでは、クエリの最適化は重要なタスクです。 代替戦略の数は、次の要因により指数関数的に増加する可能性があるため、複雑さは高いです-

  • 多数のフラグメントの存在。
  • さまざまなサイトにわたるフラグメントまたはテーブルの分布。
  • 通信リンクの速度。
  • ローカル処理機能の格差。

したがって、分散システムでは、多くの場合、目的はクエリ処理の最適な実行戦略ではなく、適切な実行戦略を見つけることです。 クエリを実行する時間は、次の合計です-

  • クエリをデータベースに伝達する時間。
  • ローカルクエリフラグメントを実行する時間。
  • さまざまなサイトからデータを収集する時間。
  • 結果をアプリケーションに表示する時間。

クエリ処理

クエリ処理は、クエリの配置からクエリの結果の表示までのすべてのアクティビティのセットです。 手順は、次の図に示すとおりです-

クエリ処理

リレーショナル代数

リレーショナル代数は、リレーショナルデータベースモデルの操作の基本セットを定義します。 一連の関係代数演算は、関係代数式を形成します。 この式の結果は、データベースクエリの結果を表します。

基本的な操作は次のとおりです-

  • 投影
  • 選択
  • 連合
  • 交差点
  • マイナス
  • Join

投影

投影操作では、テーブルのフィールドのサブセットが表示されます。 これにより、テーブルの垂直パーティションが作成されます。

リレーショナル代数の構文

\ pi _ \ {} \ {()}

たとえば、次の学生データベースを考えてみましょう-

学生

*Roll_No*

コース

学期

性別

2

アミット・プラサド

BCA

1

Male

4

ヴァルシャ・ティワリ

BCA

1

女性

5

アシフ・アリ

MCA

2

Male

6

ジョー・ウォレス

MCA

1

Male

8

シヴァニ・アイエンガー

BCA

1

女性

すべての学生の名前とコースを表示したい場合は、次の関係代数式を使用します-

\ pi _ \ {Name、Course} \ {(STUDENT)}

選択

選択操作は、特定の条件を満たすテーブルのタプルのサブセットを表示します。 これにより、テーブルの水平パーティションが作成されます。

リレーショナル代数の構文

\ sigma _ \ {} \ {()}

たとえば、学生テーブルで、MCAコースを選択したすべての学生の詳細を表示する場合、次の関係代数式を使用します-

\ sigma _ \ {Course} = \ {\ small "BCA"} ^ \ {(STUDENT)}

投影操作と選択操作の組み合わせ

ほとんどのクエリでは、投影操作と選択操作の組み合わせが必要です。 これらの式を書くには2つの方法があります-

  • 投影および選択操作のシーケンスを使用します。
  • 名前変更操作を使用して中間結果を生成します。

たとえば、BCAコースのすべての女子学生の名前を表示するには-

  • 射影および選択操作のシーケンスを使用した関係代数式

\ pi _ \ {Name}(\ sigma _ \ {Gender = \ small "Female" AND \:Course = \ small "BCA"} \ {(STUDENT)})

  • 名前変更操作を使用して中間結果を生成する関係代数式

FemaleBCAStudent \ leftarrow \ sigma _ \ {性別= \ small "女性" AND \:コース= \ small "BCA"} \ {(STUDENT)}

Result \ leftarrow \ pi _ \ {Name} \ {(FemaleBCAStudent)}

連合

Pが演算の結果で、Qが別の演算の結果である場合、PとQの和集合($ p \ cup Q $)は、PまたはQのいずれか、または重複のない両方のすべてのタプルのセットです。 。

たとえば、学期1またはBCAコースにいるすべての学生を表示するには-

Sem1Student \ leftarrow \ sigma _ \ {Semester = 1} \ {(STUDENT)}

BCAStudent \ leftarrow \ sigma _ \ {Course = \ small "BCA"} \ {(STUDENT)}

Result \ leftarrow Sem1Student \ cup BCAStudent

交差点

Pが演算の結果で、Qが別の演算の結果である場合、PとQの共通部分($ p \ cap Q $)は、PとQの両方にあるすべてのタプルのセットです。

たとえば、次の2つのスキーマが与えられた-

社員

EmpID Name City Department Salary

プロジェクト

PId City Department Status

プロジェクトが配置され、従業員も居住しているすべての都市の名前を表示するには-

CityEmp \ leftarrow \ pi _ \ {City} \ {(EMPLOYEE)}

CityProject \ leftarrow \ pi _ \ {City} \ {(PROJECT)}

Result \ leftarrow CityEmp \ cap CityProject

マイナス

Pが操作の結果で、Qが別の操作の結果である場合、P-QはQではなくPにあるすべてのタプルのセットです。

たとえば、進行中のプロジェクト(ステータス=進行中のプロジェクト)を持っていないすべての部門を一覧表示するには-

AllDept \ leftarrow \ pi _ \ {Department} \ {(EMPLOYEE)}

ProjectDept \ leftarrow \ pi _ \ {Department}(\ sigma _ \ {Status = \ small "ongoing"} \ {(PROJECT)})

Result \ leftarrow AllDept-ProjectDept

Join

結合操作は、2つの異なるテーブルの関連タプル(クエリの結果)を1つのテーブルに結合します。

たとえば、次のように銀行データベースの顧客と支店の2つのスキーマを考えてください-

顧客

CustID AccNo TypeOfAc BranchID DateOfOpening
  • ブランチ *
BranchID BranchName IFSCcode Address

支店の詳細とともに従業員の詳細をリストするには-

Result \ leftarrow CUSTOMER \ bowtie _ \ {Customer.BranchID = Branch.BranchID} \ {BRANCH}

SQLクエリをリレーショナル代数に変換する

SQLクエリは、最適化の前に同等の関係代数式に変換されます。 クエリは、最初は小さなクエリブロックに分解されます。 これらのブロックは、同等の関係代数式に変換されます。 最適化には、各ブロックの最適化と、クエリ全体の最適化が含まれます。

私たちは次のスキーマを考えてみましょう-

社員

EmpID Name City Department Salary

プロジェクト

PId City Department Status

作品

EmpID PID Hours

例1

平均給与よりも少ない給与を稼ぐすべての従業員の詳細を表示するには、SQLクエリを書きます-

SELECT* FROM EMPLOYEE
WHERE SALARY < ( SELECT AVERAGE(SALARY) FROM EMPLOYEE ) ;

このクエリには、ネストされたサブクエリが1つ含まれています。 したがって、これは2つのブロックに分割できます。

内側のブロックは-

SELECT AVERAGE(SALARY)FROM EMPLOYEE ;

このクエリの結果がAvgSalである場合、外側のブロックは-

SELECT * FROM EMPLOYEE WHERE SALARY < AvgSal;

内部ブロックの関係代数式-

AvgSal \ leftarrow \ Im _ \ {AVERAGE(Salary)} \ {EMPLOYEE}

外ブロックの関係代数式-

\ sigma _ \ {Salary} \ {EMPLOYEE}

例2

従業員「Arun Kumar」のすべてのプロジェクトのプロジェクトIDとステータスを表示するには、SQLクエリを書きます-

SELECT PID, STATUS FROM PROJECT
WHERE PID = ( SELECT FROM WORKS  WHERE EMPID = ( SELECT EMPID FROM EMPLOYEE
            WHERE NAME = 'ARUN KUMAR'));

このクエリには、ネストされた2つのサブクエリが含まれます。 したがって、次のように、3つのブロックに分解することができます-

SELECT EMPID FROM EMPLOYEE WHERE NAME = 'ARUN KUMAR';
SELECT PID FROM WORKS WHERE EMPID = ArunEmpID;
SELECT PID, STATUS FROM PROJECT WHERE PID = ArunPID;

(ここで、ArunEmpIDとArunPIDは内部クエリの結果です)

3つのブロックの関係代数式は-

ArunEmpID \ leftarrow \ pi _ \ {EmpID}(\ sigma _ \ {Name = \ small "Arun Kumar"} \ {(EMPLOYEE)})

ArunPID \ leftarrow \ pi _ \ {PID}(\ sigma _ \ {EmpID = \ small "ArunEmpID"} \ {(WORKS)})

Result \ leftarrow \ pi _ \ {PID、Status}(\ sigma _ \ {PID = \ small "ArunPID"} \ {(PROJECT)})

関係代数演算子の計算

関係代数演算子の計算はさまざまな方法で実行でき、それぞれの選択肢は*アクセスパス*と呼ばれます。

計算の代替は、3つの主な要因に依存します-

  • 演算子の種類
  • 使用可能なメモリ
  • ディスク構造

関係代数演算の実行を実行する時間は、次の合計です-

  • タプルを処理する時間。
  • テーブルのタプルをディスクからメモリにフェッチする時間。

タプルを処理する時間は、特に分散システムでは、ストレージからタプルをフェッチする時間よりも非常に短いため、ディスクアクセスは、関係式のコストを計算するためのメトリックとして非常によく考えられます。

選択の計算

選択操作の計算は、選択条件の複雑さとテーブルの属性のインデックスの可用性に依存します。

以下は、インデックスに応じて計算の選択肢です-

  • インデックスなし-テーブルがソートされておらず、インデックスがない場合、選択プロセスにはテーブルのすべてのディスクブロックのスキャンが含まれます。 各ブロックがメモリに取り込まれ、ブロック内の各タプルが選択条件を満たしているかどうかが調べられます。 条件が満たされると、出力として表示されます。 各タプルがメモリに取り込まれ、各タプルが処理されるため、これは最もコストのかかるアプローチです。
  • * B +ツリーインデックス*-ほとんどのデータベースシステムは、B +ツリーインデックスに基づいて構築されています。 選択条件がこのB +ツリーインデックスのキーであるフィールドに基づいている場合、このインデックスは結果の取得に使用されます。 ただし、複雑な条件を持つ選択ステートメントの処理には、より多くのディスクブロックアクセスが含まれる場合があり、場合によってはテーブルの完全なスキャンが行われます。
  • ハッシュインデックス-ハッシュインデックスが使用され、そのキーフィールドが選択条件で使用される場合、ハッシュインデックスを使用してタプルを取得するのは簡単なプロセスになります。 ハッシュインデックスは、ハッシュ関数を使用して、ハッシュ値に対応するキー値が保存されているバケットのアドレスを検索します。 インデックスでキー値を見つけるために、ハッシュ関数が実行され、バケットアドレスが見つかります。 バケット内のキー値が検索されます。 一致が見つかると、実際のタプルがディスクブロックからメモリにフェッチされます。

結合の計算

2つのテーブル(PとQなど)を結合する場合、Pの各タプルをQの各タプルと比較して、結合条件が満たされているかどうかをテストする必要があります。 条件が満たされると、対応するタプルが連結され、重複フィールドが削除され、結果の関係に追加されます。 したがって、これは最も費用のかかる操作です。

結合を計算するための一般的なアプローチは次のとおりです-

入れ子ループアプローチ

これは、従来の結合アプローチです。 それは、次の擬似コード(タプルtuple_pとtuple_qと結合属性aを持つ表PとQ)を通して説明できます-

For each tuple_p in P
For each tuple_q in Q
If tuple_p.a = tuple_q.a Then
   Concatenate tuple_p and tuple_q and append to Result
End If
Next tuple_q
Next tuple-p

ソートマージアプローチ

このアプローチでは、2つのテーブルが結合属性に基づいて個別にソートされ、ソートされたテーブルがマージされます。 レコードの数が非常に多く、メモリに収容できないため、外部ソート手法が採用されています。 個々のテーブルがソートされると、ソートされた各テーブルが1ページずつメモリに取り込まれ、結合属性に基づいてマージされ、結合されたタプルが書き出されます。

ハッシュ結合アプローチ

このアプローチは、パーティション化フェーズと調査フェーズの2つのフェーズで構成されます。 パーティション化フェーズでは、テーブルPおよびQは2セットの互いに素なパーティションに分割されます。 一般的なハッシュ関数が決定されます。 このハッシュ関数は、タプルをパーティションに割り当てるために使用されます。 調査フェーズでは、Pのパーティション内のタプルがQの対応するパーティションのタプルと比較されます。 それらが一致する場合、それらは書き出されます。

集中システムでのクエリ最適化

リレーショナル代数式の計算のための代替アクセスパスが導出されると、最適なアクセスパスが決定されます。 この章では、集中システムでのクエリ最適化について検討し、次の章では、分散システムでのクエリ最適化について検討します。

集中システムでは、クエリ処理は次の目的で行われます-

  • クエリの応答時間の最小化(ユーザーのクエリに対して結果を生成するのにかかる時間)。
  • システムのスループット(一定の時間内に処理されるリクエストの数)を最大化します。
  • 処理に必要なメモリとストレージの量を減らします。
  • 並列処理を増やします。

クエリの解析と翻訳

最初に、SQLクエリがスキャンされます。 次に、構文エラーとデータ型の正確性を探すために解析されます。 クエリがこのステップに合格すると、クエリはより小さなクエリブロックに分解されます。 次に、各ブロックは同等の関係代数式に変換されます。

クエリ最適化の手順

クエリの最適化には、クエリツリー生成、プラン生成、クエリプランコード生成の3つのステップが含まれます。

ステップ1-クエリツリーの生成

クエリツリーは、リレーショナル代数式を表すツリーデータ構造です。 クエリのテーブルは、リーフノードとして表されます。 リレーショナル代数演算は、内部ノードとして表されます。 ルートはクエリ全体を表します。

実行中、内部ノードは、オペランドテーブルが使用可能になるたびに実行されます。 その後、ノードは結果テーブルに置き換えられます。 このプロセスは、ルートノードが実行されて結果テーブルに置き換えられるまで、すべての内部ノードに対して継続されます。

たとえば、次のスキーマを考えてみましょう-

社員

EmpID EName Salary DeptNo DateOfJoining

部門

DNo DName Location

例1

クエリを次のように考えてみましょう。

\ pi _ \ {EmpID}(\ sigma _ \ {EName = \ small "ArunKumar"} \ {(EMPLOYEE)})

対応するクエリツリーは-

対応するクエリツリー

例2

結合を含む別のクエリを考えてみましょう。

$ \ pi _ \ {EName、Salary}(\ sigma _ \ {DName = \ small "Marketing"} \ {(DEPARTMENT)})\ bowtie _ \ {DNo = DeptNo} \ {(EMPLOYEE)} $

上記のクエリのクエリツリーを次に示します。

クエリツリー

ステップ2-クエリプランの生成

クエリツリーが生成された後、クエリプランが作成されます。 クエリプランは、クエリツリー内のすべての操作のアクセスパスを含む拡張クエリツリーです。 アクセスパスは、ツリー内のリレーショナル操作の実行方法を指定します。 たとえば、選択操作には、選択のためのB +ツリーインデックスの使用に関する詳細を提供するアクセスパスを含めることができます。

また、クエリプランには、ある演算子から次の演算子に中間テーブルを渡す方法、一時テーブルを使用する方法、および操作をパイプライン化/結合する方法も記載されています。

ステップ3-コード生成

コード生成は、クエリ最適化の最終ステップです。 クエリの実行可能な形式であり、その形式はオペレーティングシステムの種類によって異なります。 クエリコードが生成されると、実行マネージャーはそれを実行し、結果を生成します。

クエリ最適化へのアプローチ

クエリ最適化のアプローチの中で、徹底的な検索とヒューリスティックスベースのアルゴリズムが主に使用されます。

徹底的な検索の最適化

これらの手法では、クエリに対して、可能なすべてのクエリプランが最初に生成され、次に最適なプランが選択されます。 これらの手法は最適なソリューションを提供しますが、ソリューションスペースが大きいため、時間とスペースが指数関数的に複雑になります。 たとえば、動的計画法。

ヒューリスティックベースの最適化

ヒューリスティックベースの最適化では、クエリの最適化にルールベースの最適化アプローチを使用します。 これらのアルゴリズムは、多項式の時間と空間の複雑さを持ち、網羅的な検索ベースのアルゴリズムの指数関数的な複雑さよりも低いです。 ただし、これらのアルゴリズムは必ずしも最適なクエリプランを生成するわけではありません。

一般的なヒューリスティックルールの一部は次のとおりです-

  • 結合操作の前に、選択操作とプロジェクト操作を実行します。 これは、選択操作とプロジェクト操作をクエリツリーの下に移動することによって行われます。 これにより、結合に使用できるタプルの数が減少します。
  • 他の操作の前に、最も制限の厳しい選択/プロジェクト操作を最初に実行します。
  • 結果として非常に大きな中間テーブルが生成されるため、製品間の操作は避けてください。

分散システムでのクエリの最適化

この章では、分散データベースシステムでのクエリの最適化について説明します。

分散クエリ処理アーキテクチャ

分散データベースシステムでは、クエリの処理には、グローバルレベルとローカルレベルの両方での最適化が含まれます。 クエリは、クライアントまたは制御サイトのデータベースシステムに入ります。 ここでは、ユーザーが検証され、クエリがチェックされ、翻訳され、グローバルレベルで最適化されます。

アーキテクチャは次のように表すことができます-

分散クエリ処理アーキテクチャ

グローバルクエリからローカルクエリへのマッピング

グローバルクエリをローカルクエリにマッピングするプロセスは、次のように実現できます-

  • グローバルクエリで必要なテーブルには、複数のサイトに分散したフラグメントがあります。 ローカルデータベースには、ローカルデータに関する情報のみが含まれています。 制御サイトはグローバルデータディクショナリを使用して、分布に関する情報を収集し、フラグメントからグローバルビューを再構築します。
  • レプリケーションがない場合、グローバルオプティマイザーは、フラグメントが保存されているサイトでローカルクエリを実行します。 レプリケーションがある場合、グローバルオプティマイザーは通信コスト、ワークロード、およびサーバー速度に基づいてサイトを選択します。
  • グローバルオプティマイザーは、サイト間で発生するデータ転送量が最小になるように分散実行計画を生成します。 計画では、フラグメントの場所、クエリステップを実行する必要がある順序、および中間結果の転送に関係するプロセスを示します。
  • ローカルクエリは、ローカルデータベースサーバーによって最適化されます。 最後に、ローカルクエリの結果は、水平方向のフラグメントの結合操作と垂直方向のフラグメントの結合操作によって結合されます。

たとえば、次のプロジェクトスキーマは、ニューデリー、コルカタ、ハイデラバードの都市に応じて水平方向に断片化されていると考えてみましょう。

プロジェクト

PId City Department Status

ステータスが「進行中」であるすべてのプロジェクトの詳細を取得するクエリがあるとします。

グローバルクエリは&inus;になります。

\ sigma _ \ {status} = \ {\ small "ongoing"} ^ \ {(PROJECT)}

ニューデリーのサーバーでのクエリは-

\ sigma _ \ {status} = \ {\ small "ongoing"} ^ \ {(\ {NewD} _- \ {PROJECT})}

コルカタのサーバーでのクエリは-

\ sigma _ \ {status} = \ {\ small "ongoing"} ^ \ {(\ {Kol} _- \ {PROJECT})}

ハイデラバードのサーバーでのクエリは-

\ sigma _ \ {status} = \ {\ small "ongoing"} ^ \ {(\ {Hyd} _- \ {PROJECT})}

全体的な結果を取得するには、次のように3つのクエリの結果を結合する必要があります-

$ \ sigma _ \ {status} = \ {\ small "ongoing"} ^ \ {(\ {NewD} _- \ {PROJECT})} \ cup \ sigma _ \ {status} = \ {\ small "ongoing"} ^ \ {(\ {kol} _- \ {PROJECT})} \ cup \ sigma _ \ {status} = \ {\ small "ongoing"} ^ \ {(\ {Hyd} _- \ {PROJECT})} $

分散クエリの最適化

分散クエリの最適化では、クエリの必要な結果をそれぞれ生成する多数のクエリツリーの評価が必要です。 これは主に、複製および断片化されたデータが大量に存在するためです。 したがって、目標は最適なソリューションではなく最適なソリューションを見つけることです。

分散クエリ最適化の主な問題は次のとおりです-

  • 分散システムでのリソースの最適な利用。
  • クエリ取引。
  • クエリのソリューションスペースの削減。

分散システムでのリソースの最適利用

分散システムには、さまざまなサイトに多数のデータベースサーバーがあり、クエリに関する操作を実行します。 以下は、最適なリソース利用のためのアプローチです-

オペレーション出荷-オペレーション出荷では、クライアントサイトではなく、データが保存されているサイトでオペレーションが実行されます。 その後、結果はクライアントサイトに転送されます。 これは、同じサイトでオペランドが使用可能な操作に適しています。 例:選択およびプロジェクト操作。

データ配送-データ配送では、データフラグメントはデータベースサーバーに転送され、そこで操作が実行されます。 これは、オペランドが異なるサイトに分散されている操作で使用されます。 これは、通信コストが低く、ローカルプロセッサがクライアントサーバーよりもはるかに遅いシステムにも適しています。

ハイブリッド配送-これは、データ配送と運用配送の組み合わせです。 ここでは、データフラグメントが高速プロセッサに転送され、そこで処理が実行されます。 その後、結果はクライアントサイトに送信されます。

最適利用分散システム

クエリ取引

分散データベースシステムのクエリ取引アルゴリズムでは、分散クエリの制御/クライアントサイトは購入者と呼ばれ、ローカルクエリが実行されるサイトは販売者と呼ばれます。 買い手は、売り手を選択し、グローバルな結果を再構築するための多くの選択肢を策定します。 バイヤーの目標は、最適なコストを達成することです。

アルゴリズムは、買い手が売り手のサイトにサブクエリを割り当てることから始まります。 最適な計画は、最終結果を再構築するための通信コストと組み合わせて、売り手によって提案されたローカルに最適化されたクエリ計画から作成されます。 グローバル最適計画が定式化されると、クエリが実行されます。

クエリのソリューションスペースの削減

通常、最適なソリューションにはソリューションスペースの削減が含まれるため、クエリとデータ転送のコストが削減されます。 これは、一元化されたシステムのヒューリスティックと同様に、ヒューリスティックルールのセットによって実現できます。

以下はいくつかのルールです-

  • できるだけ早く選択および投影操作を実行します。 これにより、通信ネットワーク上のデータフローが減少します。
  • 特定のサイトに関係のない選択条件を排除することにより、水平フラグメントの操作を簡素化します。
  • 複数のサイトにあるフラグメントで構成される結合および結合操作の場合、断片化されたデータを、ほとんどのデータが存在するサイトに転送し、そこで操作を実行します。
  • 半結合操作を使用して、結合されるタプルを修飾します。 これにより、データ転送量が削減され、通信コストが削減されます。
  • 分散クエリツリーの共通の葉とサブツリーをマージします。

DDBMS-トランザクション処理システム

この章では、トランザクション処理のさまざまな側面について説明します。 また、トランザクションに含まれる低レベルのタスク、トランザクションの状態、トランザクションのプロパティについても学習します。 最後の部分では、スケジュールとスケジュールの直列化可能性について調べます。

トランザクション

トランザクションは、データ処理の論理単位として実行されるデータベース操作のコレクションを含むプログラムです。 トランザクションで実行される操作には、データの挿入、削除、更新、取得などの1つ以上のデータベース操作が含まれます。 これは、完全に完了するまで実行されるか、まったく実行されないアトミックプロセスです。 データを更新せずにデータの取得のみを行うトランザクションは、読み取り専用トランザクションと呼ばれます。

各高レベル操作は、いくつかの低レベルタスクまたは操作に分割できます。 たとえば、データ更新操作は3つのタスクに分割できます-

  • * read_item()*-ストレージからメインメモリにデータ項目を読み取ります。
  • * modify_item()*-メインメモリ内のアイテムの値を変更します。
  • * write_item()*-変更された値をメインメモリからストレージに書き込みます。

データベースへのアクセスは、read_item()およびwrite_item()操作に制限されています。 同様に、すべてのトランザクションについて、読み取りと書き込みが基本的なデータベース操作を形成します。

トランザクション操作

トランザクションで実行される低レベルの操作は-

  • begin_transaction -トランザクション実行の開始を指定するマーカー。
  • read_itemまたはwrite_item -トランザクションの一部としてメインメモリ操作とインターリーブされるデータベース操作。
  • end_transaction -トランザクションの終了を指定するマーカー。
  • コミット-トランザクション全体が正常に完了し、取り消されないことを指定する信号。
  • ロールバック-トランザクションが失敗し、データベース内のすべての一時的な変更が取り消されたことを指定する信号。 コミットされたトランザクションはロールバックできません。

取引状態

トランザクションは、アクティブ、部分的にコミット、コミット、失敗、中止の5つの状態のサブセットを通過できます。

  • アクティブ-トランザクションが開始する初期状態はアクティブ状態です。 トランザクションは、読み取り、書き込み、またはその他の操作を実行している間、この状態のままです。
  • 部分的にコミット-トランザクションの最後のステートメントが実行された後、トランザクションはこの状態に入ります。
  • Committed -トランザクションが正常に完了し、システムチェックがコミット信号を発行した後、トランザクションはこの状態に入ります。
  • Failed -通常の実行が続行できないか、システムチェックが失敗したことが検出されると、トランザクションは部分的にコミットされた状態またはアクティブな状態から失敗した状態になります。
  • 中止-これは、障害後にトランザクションがロールバックされ、データベースがトランザクション開始前の状態に復元された後の状態です。

次の状態遷移図は、トランザクションの状態と、状態の変化を引き起こす低レベルのトランザクション操作を示しています。

状態遷移図

トランザクションの望ましいプロパティ

すべてのトランザクションは、ACIDプロパティを維持する必要があります。 原子性、一貫性、分離、および耐久性。

  • *アトミック性-このプロパティは、トランザクションが処理のアトミック単位であること、つまり、トランザクション全体が実行されるか、まったく実行されないことを示します。 部分的な更新は存在しないはずです。
  • 一貫性-トランザクションは、データベースをある一貫性のある状態から別の一貫性のある状態にする必要があります。 データベース内のデータ項目に悪影響を与えてはなりません。
  • 分離-トランザクションは、システム内で唯一のものであるかのように実行する必要があります。 同時に実行されている他の同時トランザクションからの干渉があってはなりません。
  • 耐久性-コミットされたトランザクションが変更をもたらす場合、その変更はデータベース内で永続的であり、障害が発生しても失われないようにする必要があります。

スケジュールと競合

多数の同時トランザクションがあるシステムでは、*スケジュール*は操作の実行の合計順序です。 たとえば、T1、T2、T3………..Tnなど、n個のトランザクションで構成されるスケジュールSを考えます。トランザクションTiの場合、Tiの操作はスケジュールSに定められたとおりに実行する必要があります。

スケジュールの種類

スケジュールには2種類あります-

  • シリアルスケジュール-シリアルスケジュールでは、どの時点でも、1つのトランザクションのみがアクティブになります。 トランザクションの重複はありません。 これは、次のグラフに描かれています-

シリアルスケジュール

  • 並列スケジュール-並列スケジュールでは、複数のトランザクションが同時にアクティブになります。 トランザクションには、時間的に重複する操作が含まれます。 これは、次のグラフに描かれています-

並列スケジュール

スケジュールの矛盾

複数のトランザクションで構成されるスケジュールでは、2つのアクティブなトランザクションが互換性のない操作を実行すると*競合*が発生します。 次の3つの条件がすべて同時に存在する場合、2つの操作は競合していると言われます-

  • 2つの操作は異なるトランザクションの一部です。
  • 両方の操作が同じデータ項目にアクセスします。
  • 操作の少なくとも1つはwrite_item()操作です。 データ項目を変更しようとします。

シリアライズ可能性

「n」トランザクションの「シリアル化可能なスケジュール」は、同じ「n」トランザクションで構成されるシリアルスケジュールと同等の並列スケジュールです。 シリアル化可能なスケジュールには、シリアルスケジュールのCPU使用率を確認しながら、シリアルスケジュールの正確さが含まれます。

スケジュールの同等性

2つのスケジュールの等価性は、次のタイプにすることができます-

  • 結果の等価-同一の結果を生成する2つのスケジュールは、結果が等価であると言われます。
  • 同等のビュー-同様の方法で同様のアクションを実行する2つのスケジュールは、同等のビューであると言われます。
  • 競合等価-2つのスケジュールは、両方に同じトランザクションセットが含まれ、競合する操作のペアの順序が同じ場合、競合等価と呼ばれます。

分散DBMS-同時実行性の制御

同時実行制御技術により、複数のトランザクションが同時に実行され、トランザクションのACIDプロパティとスケジュールのシリアル化が維持されます。

この章では、同時実行制御のさまざまなアプローチについて学習します。

ロックベースの同時実行制御プロトコル

ロックベースの同時実行制御プロトコルは、データ項目のロックの概念を使用します。 *ロック*は、データ項目に関連付けられた変数で、そのデータ項目で読み取り/書き込み操作を実行できるかどうかを決定します。 一般に、データ項目を同時に2つのトランザクションでロックできるかどうかを示すロック互換性マトリックスが使用されます。

ロックベースの同時実行制御システムは、1フェーズまたは2フェーズのロックプロトコルを使用できます。

単相ロッキングプロトコル

この方法では、各トランザクションは使用前にアイテムをロックし、使用が終了するとすぐにロックを解除します。 このロック方式は最大の同時実行性を提供しますが、常にシリアライズ可能性を強制するわけではありません。

二相ロッキングプロトコル

この方法では、すべてのロック操作が最初のロック解除またはロック解除操作に先行します。 トランザクションは2つのフェーズで構成されます。 最初のフェーズでは、トランザクションは必要なすべてのロックのみを取得し、ロックを解放しません。 これは、拡張フェーズまたは「成長フェーズ」と呼ばれます。 2番目のフェーズでは、トランザクションはロックを解除し、新しいロックを要求できません。 これは「収縮フェーズ」と呼ばれます。

2フェーズロックプロトコルに従うすべてのトランザクションは、シリアル化可能であることが保証されています。 ただし、このアプローチでは、2つの競合するトランザクション間の並列性が低くなります。

タイムスタンプ同時実行制御アルゴリズム

タイムスタンプベースの同時実行制御アルゴリズムは、トランザクションのタイムスタンプを使用して、データ項目への同時アクセスを調整し、シリアライズ可能性を確保します。 タイムスタンプは、トランザクションの開始時間を表すDBMSによってトランザクションに与えられる一意の識別子です。

これらのアルゴリズムにより、トランザクションはタイムスタンプで指定された順序でコミットされます。 古いトランザクションは若いトランザクションの前にシステムに入るため、古いトランザクションは若いトランザクションの前にコミットする必要があります。

タイムスタンプベースの同時実行制御技術は、シリアル化可能なスケジュールを生成し、同等のシリアルスケジュールが参加しているトランザクションの年齢順に並べられるようにします。

タイムスタンプベースの同時実行制御アルゴリズムのいくつかは-

  • 基本的なタイムスタンプ順序付けアルゴリズム。
  • 保守的なタイムスタンプ順序付けアルゴリズム。
  • タイムスタンプの順序に基づくマルチバージョンアルゴリズム。

タイムスタンプベースの順序付けは、直列化可能性を強制するために3つの規則に従います-

  • アクセスルール-2つのトランザクションが同じデータ項目に同時にアクセスしようとすると、競合する操作のために、古いトランザクションが優先されます。 これにより、若いトランザクションは古いトランザクションが最初にコミットされるのを待ちます。
  • 遅延トランザクションルール-若いトランザクションがデータアイテムを書き込んだ場合、古いトランザクションはそのデータアイテムの読み取りまたは書き込みを許可されません。 このルールは、若いトランザクションが既にコミットした後に古いトランザクションがコミットするのを防ぎます。
  • 若いトランザクションルール-若いトランザクションは、古いトランザクションによって既に書き込まれたデータ項目を読み書きできます。

楽観的同時実行制御アルゴリズム

競合率の低いシステムでは、すべてのトランザクションのシリアライズ可能性を検証するタスクによりパフォーマンスが低下する場合があります。 これらの場合、シリアライズ可能性のテストはコミットの直前に延期されます。 競合率が低いため、シリアル化できないトランザクションを中止する可能性も低くなります。 このアプローチは、楽観的同時実行制御技術と呼ばれます。

このアプローチでは、トランザクションのライフサイクルは次の3つのフェーズに分割されます-

  • 実行フェーズ-トランザクションはデータ項目をメモリにフェッチし、それらに対して操作を実行します。
  • 検証フェーズ-トランザクションは、データベースへの変更のコミットがシリアル化可能性テストに合格することを確認するチェックを実行します。
  • コミットフェーズ-トランザクションは、メモリ内の変更されたデータ項目をディスクに書き戻します。

このアルゴリズムは、検証フェーズで直列化を強制するために3つのルールを使用します-

  • ルール1 *-2つのトランザクションT〜i〜とT〜j〜が与えられ、T〜i〜がT〜j〜が書き込んでいるデータ項目を読み込んでいる場合、T〜i〜の実行フェーズはT〜と重複できませんj〜のコミットフェーズ。 T〜j〜は、T〜i〜の実行が終了した後にのみコミットできます。
  • ルール2 *-2つのトランザクションT〜i〜およびT〜j〜が与えられ、T〜i〜がT〜j〜が読み取っているデータ項目を書き込んでいる場合、T〜i〜のコミットフェーズはT〜と重複できませんj〜の実行フェーズ。 T〜j〜は、T〜i〜がすでにコミットした後にのみ実行を開始できます。
  • ルール3 *-2つのトランザクションT〜i〜およびT〜j〜が与えられた場合、T〜i〜がT〜j〜も書き込んでいるデータ項目を書き込んでいる場合、T〜i〜のコミットフェーズはTと重複できません〜j〜のコミットフェーズ。 T〜j〜は、T〜i〜がすでにコミットした後にのみコミットを開始できます。

分散システムでの同時実行制御

このセクションでは、上記の手法が分散データベースシステムにどのように実装されるかを説明します。

分散2フェーズロックアルゴリズム

分散型2フェーズロックの基本原理は、基本的な2フェーズロックプロトコルと同じです。 ただし、分散システムには、ロックマネージャーとして指定されたサイトがあります。 ロックマネージャは、トランザクションモニタからのロック取得要求を制御します。 さまざまなサイトのロックマネージャー間の調整を実施するために、少なくとも1つのサイトにすべてのトランザクションを表示し、ロックの競合を検出する権限が与えられます。

ロックの競合を検出できるサイトの数に応じて、分散型の2フェーズロックアプローチには3つのタイプがあります-

  • 集中型2フェーズロック-このアプローチでは、1つのサイトが中央ロックマネージャーとして指定されます。 環境内のすべてのサイトは、セントラルロックマネージャーの場所を認識しており、トランザクション中にそこからロックを取得します。
  • プライマリコピー2フェーズロック-このアプローチでは、多くのサイトがロックコントロールセンターとして指定されます。 これらの各サイトには、定義された一連のロックを管理する責任があります。 すべてのサイトは、どのロックコントロールセンターがどのデータテーブル/フラグメントアイテムのロックを管理する責任があるかを知っています。
  • 分散2フェーズロック-このアプローチには、各ロックマネージャーがローカルサイトに格納されているデータ項目のロックを制御するロックマネージャーがいくつかあります。 ロックマネージャの場所は、データの配布と複製に基づいています。

分散型タイムスタンプの同時実行制御

中央集中型システムでは、トランザクションのタイムスタンプは物理的なクロック読み取り値によって決定されます。 ただし、分散システムでは、サイトのローカルな物理/論理クロックの読み取り値は、グローバルに一意ではないため、グローバルタイムスタンプとして使用できません。 そのため、タイムスタンプはサイトIDとそのサイトの時計の読み取り値の組み合わせで構成されます。

タイムスタンプ順序付けアルゴリズムを実装するために、各サイトには、トランザクションマネージャごとに個別のキューを維持するスケジューラがあります。 トランザクション中に、トランザクションマネージャーはロックリクエストをサイトのスケジューラーに送信します。 スケジューラは、タイムスタンプの昇順で、対応するキューに要求を配置します。 リクエストは、タイムスタンプの順にキューの先頭から処理されます。 最も古いものから。

競合グラフ

別の方法は、競合グラフを作成することです。 このトランザクションクラスが定義されています。 トランザクションクラスには、読み取りセットと書き込みセットと呼ばれる2つのデータ項目セットが含まれています。 トランザクションの読み取りセットがクラスの読み取りセットのサブセットであり、トランザクションの書き込みセットがクラスの書き込みセットのサブセットである場合、トランザクションは特定のクラスに属します。 読み取りフェーズでは、各トランザクションが読み取りセット内のデータ項目に対して読み取り要求を発行します。 書き込みフェーズでは、各トランザクションが書き込み要求を発行します。

アクティブなトランザクションが属するクラスの競合グラフが作成されます。 これには、垂直、水平、および斜めのエッジのセットが含まれます。 垂直エッジは、クラス内の2つのノードを接続し、クラス内の競合を示します。 水平エッジは、2つのクラスにわたって2つのノードを接続し、異なるクラス間の書き込みと書き込みの競合を示します。 対角線のエッジは、2つのクラスにまたがる2つのノードを接続し、2つのクラス間の書き込み/読み取りまたは読み取り/書き込みの競合を示します。

競合グラフを分析して、同じクラス内または2つの異なるクラス間で2つのトランザクションを並行して実行できるかどうかを確認します。

分散オプティミスティック同時実行制御アルゴリズム

分散型楽観的同時実行制御アルゴリズムは、楽観的同時実行制御アルゴリズムを拡張します。 この拡張機能には、2つのルールが適用されます-

  • ルール1 *-このルールに従って、トランザクションは実行時にすべてのサイトでローカルに検証する必要があります。 トランザクションがいずれかのサイトで無効であることが判明した場合、トランザクションは中止されます。 ローカル検証により、トランザクションが実行されたサイトでのシリアル化が維持されることが保証されます。 トランザクションがローカル検証テストに合格すると、グローバルに検証されます。
  • ルール2 *-このルールによると、トランザクションはローカル検証テストに合格した後、グローバルに検証される必要があります。 グローバル検証により、2つの競合するトランザクションが複数のサイトで同時に実行される場合、それらが一緒に実行されるすべてのサイトで同じ相対順序でコミットする必要があります。 これには、検証の後にコミットする前に、トランザクションが他の競合するトランザクションを待つ必要がある場合があります。 この要件により、トランザクションはサイトで検証されるとすぐにコミットできないため、アルゴリズムの楽観性が低下します。

分散DBMS-デッドロック処理

この章では、データベースシステムのデッドロック処理メカニズムの概要を説明します。 集中型データベースシステムと分散型データベースシステムの両方で、デッドロック処理メカニズムを調査します。

デッドロックとは何ですか?

デッドロックは、各トランザクションが他のトランザクションによってロックされているデータ項目を待機しているときに、2つ以上のトランザクションを持つデータベースシステムの状態です。 デッドロックは、グラフ待機のサイクルで示されます。 これは、頂点がトランザクションを示し、エッジがデータ項目の待機を示す有向グラフです。

たとえば、次のグラフ待機では、トランザクションT1は、T3によってロックされているデータ項目Xを待機しています。 T3はT2によってロックされているYを待機しており、T2はT1によってロックされているZを待機しています。 したがって、待機サイクルが形成され、どのトランザクションも実行を続行できません。

Wait-For-Graph

集中システムでのデッドロック処理

デッドロック処理には3つの古典的なアプローチがあります。

  • デッドロック防止。
  • デッドロック回避。
  • デッドロックの検出と削除。

3つのアプローチはすべて、集中データベースシステムと分散データベースシステムの両方に組み込むことができます。

デッドロック防止

デッドロック防止アプローチでは、どのトランザクションもデッドロックにつながるロックを取得できません。 規則では、複数のトランザクションが同じデータ項目のロックを要求すると、そのうちの1つだけがロックを許可されます。

最も一般的なデッドロック防止方法の1つは、すべてのロックの事前取得です。 この方法では、トランザクションは実行を開始する前にすべてのロックを取得し、トランザクションの期間全体にわたってロックを保持します。 別のトランザクションがすでに取得したロックのいずれかを必要とする場合、必要なすべてのロックが使用可能になるまで待機する必要があります。 このアプローチを使用すると、待機中のトランザクションのいずれもロックを保持していないため、システムのデッドロックが防止されます。

デッドロック回避

デッドロック回避アプローチは、デッドロックが発生する前に処理します。 トランザクションとロックを分析して、待機がデッドロックにつながるかどうかを判断します。

この方法は、次のように簡単に説明できます。 トランザクションは実行を開始し、ロックする必要があるデータ項目を要求します。 ロックマネージャは、ロックが使用可能かどうかを確認します。 使用可能な場合、ロックマネージャーはデータ項目を割り当て、トランザクションはロックを取得します。 ただし、互換性のないモードの他のトランザクションによってアイテムがロックされている場合、ロックマネージャーはアルゴリズムを実行して、トランザクションを待機状態にするとデッドロックが発生するかどうかをテストします。 したがって、アルゴリズムは、トランザクションを待機できるか、トランザクションの1つを中止する必要があるかを決定します。

この目的には、 wait-diewound-wait の2つのアルゴリズムがあります。 T1とT2の2つのトランザクションがあり、T1がすでにT2によってロックされているデータ項目をロックしようとすると仮定します。 アルゴリズムは次のとおりです-

  • Wait-Die -T1がT2よりも古い場合、T1は待機できます。 それ以外の場合、T1がT2よりも若い場合、T1は中止され、後で再起動されます。
  • Wound-Wait -T1がT2よりも古い場合、T2は中止され、後で再起動されます。 それ以外の場合、T1がT2よりも若い場合、T1は待機できます。

デッドロックの検出と削除

デッドロックの検出と削除のアプローチは、デッドロック検出アルゴリズムを定期的に実行し、デッドロックが発生した場合にデッドロックを削除します。 トランザクションがロックの要求を出すとき、デッドロックをチェックしません。 トランザクションがロックを要求すると、ロックマネージャはそれが利用可能かどうかを確認します。 使用可能な場合、トランザクションはデータ項目をロックできます。それ以外の場合、トランザクションは待機できます。

ロック要求を許可している間は予防策がないため、一部のトランザクションはデッドロックされる可能性があります。 デッドロックを検出するために、ロックマネージャーはwait-forgraphにサイクルがあるかどうかを定期的にチェックします。 システムがデッドロック状態の場合、ロックマネージャーは各サイクルから被害者のトランザクションを選択します。 犠牲者は中止され、ロールバックされます。後で再起動します。 被害者の選択に使用される方法のいくつかは-

  • 最も若いトランザクションを選択します。
  • データ項目が最も少ないトランザクションを選択します。
  • 更新の回数が最も少ないトランザクションを選択します。
  • 再起動のオーバーヘッドが最も少ないトランザクションを選択します。
  • 2つ以上のサイクルに共通するトランザクションを選択します。

このアプローチは、トランザクションが少なく、ロック要求への高速応答が必要なシステムに主に適しています。

分散システムでのデッドロック処理

分散データベースシステムでのトランザクション処理も分散されています。 同じトランザクションが複数のサイトで処理されている可能性があります。 集中型システムには存在しない分散データベースシステムの2つの主なデッドロック処理の懸念は、*トランザクションの場所*と*トランザクション制御*です。 これらの懸念に対処すると、デッドロックは、デッドロック防止、デッドロック回避、またはデッドロックの検出と削除のいずれかによって処理されます。

取引場所

分散データベースシステムのトランザクションは複数のサイトで処理され、複数のサイトのデータ項目を使用します。 データ処理の量は、これらのサイト間で均一に分散されていません。 処理の期間も異なります。 したがって、同じトランザクションが一部のサイトでアクティブになり、他のサイトでは非アクティブになる場合があります。 2つの競合するトランザクションがサイトにある場合、そのうちの1つが非アクティブな状態になることがあります。 この状態は、集中システムでは発生しません。 この懸念は、トランザクションロケーションの問題と呼ばれます。

この懸念は、デイジーチェーンモデルで対処できます。 このモデルでは、トランザクションは、あるサイトから別のサイトに移動するときに特定の詳細を運びます。 詳細の一部は、必要なテーブルのリスト、必要なサイトのリスト、訪問したテーブルとサイトのリスト、まだ訪問していないテーブルとサイトのリスト、および取得したロックとタイプのリストです。 トランザクションがコミットまたはアボートによって終了した後、情報は関係するすべてのサイトに送信される必要があります。

トランザクション制御

トランザクション制御は、分散データベースシステムでトランザクションを処理するために必要なサイトの指定と制御に関係しています。 次のように、トランザクションを処理する場所の選択と制御の中心を指定する方法に関する多くのオプションがあります-

  • 1つのサーバーを制御の中心として選択できます。
  • 制御の中心は、あるサーバーから別のサーバーに移動できます。
  • 制御の責任は、複数のサーバーで共有できます。

分散デッドロック防止

集中型デッドロック防止と同様に、分散デッドロック防止アプローチでは、トランザクションは実行を開始する前にすべてのロックを取得する必要があります。 これにより、デッドロックが防止されます。

トランザクションが入るサイトは、制御サイトとして指定されます。 制御サイトは、データアイテムが存在するサイトにメッセージを送信して、アイテムをロックします。 その後、確認を待ちます。 すべてのサイトがデータ項目をロックしたことを確認すると、トランザクションが開始されます。 サイトまたは通信リンクに障害が発生した場合、トランザクションは修復されるまで待機する必要があります。

実装は簡単ですが、このアプローチにはいくつかの欠点があります-

  • ロックの事前取得には、通信遅延のために長い時間が必要です。 これにより、トランザクションに必要な時間が長くなります。
  • サイトまたはリンクに障害が発生した場合、トランザクションはサイトが回復するまで長時間待機する必要があります。 一方、実行中のサイトでは、アイテムはロックされています。 これにより、他のトランザクションの実行が妨げられる場合があります。
  • 制御サイトに障害が発生すると、他のサイトと通信できなくなります。 これらのサイトは、ロックされたデータ項目をロックされた状態に維持し続けるため、結果としてブロックされます。

分散デッドロック回避

集中システムの場合と同様に、分散デッドロック回避は、発生する前にデッドロックを処理します。 さらに、分散システムでは、トランザクションの場所とトランザクション制御の問題に対処する必要があります。 トランザクションの分散性により、次の競合が発生する場合があります-

  • 同じサイト内の2つのトランザクション間の競合。
  • 異なるサイトの2つのトランザクション間の競合。

競合が発生した場合、分散待機ダイまたは分散創傷待機アルゴリズムに従って、トランザクションの1つが中止されるか、待機が許可される場合があります。

T1とT2の2つのトランザクションがあると仮定します。 T1はサイトPに到着し、そのサイトでT2によってすでにロックされているデータ項目をロックしようとします。 したがって、サイトPで競合が発生しています。 アルゴリズムは次のとおりです-

  • 分散創傷ダイ
  • T1がT2よりも古い場合、T1は待機できます。 T1は、T2がすべてのサイトで正常にコミットまたはアボートしたというメッセージをサイトPが受信した後、実行を再開できます。
  • T1がT2よりも若い場合、T1は中止されます。 サイトPの同時実行制御は、T1を中止するためにT1が訪問したすべてのサイトにメッセージを送信します。 T1がすべてのサイトで正常に中止された場合、制御サイトはユーザーに通知します。
  • 分散待機待機
  • T1がT2より古い場合、T2を中止する必要があります。 T2がサイトPでアクティブな場合、サイトPは中断し、T2をロールバックしてから、このメッセージを他の関連サイトにブロードキャストします。 T2がサイトPを離れたがサイトQでアクティブな場合、サイトPはT2が中止されたことをブロードキャストします。次に、サイトLはT2を中止してロールバックし、このメッセージをすべてのサイトに送信します。
  • T1がT1よりも若い場合、T1は待機できます。 T2が処理を完了したというメッセージをサイトPが受信した後、T1は実行を再開できます。

分散デッドロック検出

集中化されたデッドロック検出アプローチと同様に、デッドロックは発生が許可され、検出されると削除されます。 トランザクションがロック要求を出すとき、システムはチェックを実行しません。 実装のために、グローバルなグラフ待機が作成されます。 グローバルなグラフ待ちのサイクルの存在は、デッドロックを示します。 ただし、トランザクションはネットワーク全体でリソースを待機するため、デッドロックを見つけることは困難です。

あるいは、デッドロック検出アルゴリズムはタイマーを使用できます。 各トランザクションは、トランザクションが終了すると予想される期間に設定されるタイマーに関連付けられます。 トランザクションがこの時間内に終了しない場合、タイマーはオフになり、デッドロックの可能性があることを示します。

デッドロック処理に使用される別のツールは、デッドロック検出器です。 集中システムでは、1つのデッドロック検出器があります。 分散システムでは、複数のデッドロック検出器が存在する場合があります。 デッドロック検出器は、その制御下にあるサイトのデッドロックを見つけることができます。 つまり、分散システムでのデッドロック検出には3つの選択肢があります。

  • 集中型デッドロック検出器-1つのサイトが中央デッドロック検出器として指定されています。
  • 階層的デッドロック検出器-多数のデッドロック検出器が階層的に配置されています。
  • Distributed Deadlock Detector -すべてのサイトがデッドロックの検出と削除に参加しています。

分散DBMS-レプリケーション制御

この章では、すべてのサイトで一貫したデータを維持するために必要なレプリケーション制御について説明します。 レプリケーション制御技術とレプリケーション制御に必要なアルゴリズムを研究します。

前述したように、*レプリケーション*は、分散データベースで使用され、異なるサイトにデータテーブルの複数のコピーを保存する手法です。 複数のサイトに複数のコピーを作成する場合の問題は、特に更新操作中にデータの一貫性を維持するオーバーヘッドです。

すべてのサイトで相互に一貫性のあるデータを維持するには、複製制御技術を採用する必要があります。 複製制御には2つのアプローチがあります。

  • 同期レプリケーション制御
  • 非同期レプリケーション制御

同期レプリケーション制御

同期複製アプローチでは、すべての複製が常に同じ値になるようにデータベースが同期されます。 データ項目を要求するトランザクションは、すべてのサイトの同じ値にアクセスできます。 この一貫性を確保するために、データ項目を更新するトランザクションが拡張され、データ項目のすべてのコピーで更新が行われます。 通常、2フェーズコミットプロトコルがこの目的に使用されます。

たとえば、データテーブルPROJECT(PId、PName、PLocation)を考えてみましょう。 PLocationが「Bombay」の場合、PLocationを「Mumbai」に更新するトランザクションT1を実行する必要があります。 レプリケーションがない場合、トランザクションT1の操作は次のようになります-

Begin T1:
   Update PROJECT Set PLocation = 'Mumbai'
   Where PLocation = 'Bombay';
End T1;

データテーブルのサイトAとサイトBに2つのレプリカがある場合、T1は2つのサイトに対応する2つの子T1AとT1Bを生成する必要があります。 展開されたトランザクションT1は次のようになります-

Begin T1:
   Begin T1A :
      Update PROJECT Set PLocation = 'Mumbai'
      Where PLocation = 'Bombay';
   End T1A;

   Begin T2A :
      Update PROJECT Set PLocation = 'Mumbai'
      Where PLocation = 'Bombay';
   End T2A;

End T1;

非同期レプリケーション制御

非同期複製アプローチでは、レプリカが常に同じ値を維持するとは限りません。 1つ以上のレプリカに古い値が格納されている場合があり、トランザクションは異なる値を見ることができます。 すべてのレプリカを現在の値にするプロセスは、*同期*と呼ばれます。

同期の一般的な方法は、ストアアンドフォワード方式です。 この方法では、1つのサイトがプライマリサイトとして指定され、他のサイトはセカンダリサイトとして指定されます。 プライマリサイトには常に更新された値が含まれます。 すべてのトランザクションは最初にプライマリサイトに入ります。 これらのトランザクションは、セカンダリサイトのアプリケーションのキューに入れられます。 セカンダリサイトは、トランザクションが実行されるようにスケジュールされている場合にのみ、ロールアウトメソッドを使用して更新されます。

レプリケーション制御アルゴリズム

レプリケーション制御アルゴリズムの一部は次のとおりです-

  • マスタースレーブ複製制御アルゴリズム。
  • 分散投票アルゴリズム。
  • 多数決アルゴリズム。
  • 循環トークンアルゴリズム。

マスタースレーブ複製制御アルゴリズム

1つのマスターサイトと「N」個のスレーブサイトがあります。 マスターサイトでマスターアルゴリズムが実行され、競合が検出されます。 スレーブアルゴリズムのコピーが各スレーブサイトで実行されます。 全体的なアルゴリズムは、次の2つのフェーズで実行されます-

  • トランザクションの受け入れ/拒否フェーズ-トランザクションがスレーブサイトのトランザクションモニターに入ると、スレーブサイトはマスターサイトに要求を送信します。 マスターサイトは競合をチェックします。 競合がない場合、マスターはスレーブサイトに「ACK +」メッセージを送信し、その後、トランザクションアプリケーションフェーズを開始します。 そうでない場合、マスターは「ACK-」メッセージをスレーブに送信し、スレーブはトランザクションを拒否します。
  • トランザクションアプリケーションフェーズ-このフェーズに入ると、トランザクションが入力されたスレーブサイトは、トランザクションを実行するためにすべてのスレーブに要求をブロードキャストします。 リクエストを受信すると、ピアスレーブはトランザクションを実行し、完了時にリクエストスレーブに「ACK」を送信します。 要求側のスレーブは、すべてのピアから「ACK」メッセージを受信すると、マスターサイトに「DONE」メッセージを送信します。 マスターは、トランザクションが完了したことを理解し、保留中のキューから削除します。

分散投票アルゴリズム

これは「N」個のピアサイトで構成され、すべてのサイトは実行を開始する前にトランザクションを「OK」する必要があります。 以下は、このアルゴリズムの2つのフェーズです-

  • 分散トランザクションの受け入れフェーズ-トランザクションがサイトのトランザクションマネージャーに入ると、トランザクションリクエストが他のすべてのサイトに送信されます。 ピアサイトは、リクエストを受信すると、優先度ベースの投票ルールを使用して競合を解決します。 すべてのピアサイトがトランザクションで「OK」の場合、要求サイトはアプリケーションフェーズを開始します。 ピアサイトのいずれかがトランザクションを「OK」しない場合、要求元サイトはトランザクションを拒否します。
  • 分散トランザクションアプリケーションフェーズ-このフェーズに入ると、トランザクションが開始されたサイトは、トランザクションを実行するためにすべてのスレーブにリクエストをブロードキャストします。 要求を受信すると、ピアスレーブはトランザクションを実行し、完了時に要求側スレーブに「ACK」メッセージを送信します。 要求側のスレーブは、すべてのピアから「ACK」メッセージを受信した後、トランザクションマネージャーにトランザクションが完了したことを知らせます。

多数決アルゴリズム

これは、大多数のピアがトランザクションを「OK」したときにトランザクションの実行が許可される分散投票アルゴリズムとは異なります。 これは3つのフェーズに分かれています-

  • 投票フェーズ-トランザクションがサイトのトランザクションマネージャーに入ると、トランザクションリクエストが他のすべてのサイトに送信されます。 ピアサイトは、要求を受信すると、投票ルールを使用して競合をテストし、競合するトランザクションがあれば、保留中のキューに保持します。 次に、「OK」または「NOT OK」メッセージを送信します。
  • トランザクションの受け入れ/拒否フェーズ-要求元のサイトがトランザクションで多数の「OK」を受け取ると、トランザクションを受け入れ、すべてのサイトに「ACCEPT」をブロードキャストします。 それ以外の場合は、すべてのサイトに「拒否」をブロードキャストし、トランザクションを拒否します。
  • トランザクションアプリケーションフェーズ-ピアサイトが「REJECT」メッセージを受信すると、このトランザクションを保留リストから削除し、すべての遅延トランザクションを再検討します。 ピアサイトが「ACCEPT」メッセージを受信すると、トランザクションを適用し、このトランザクションと競合している保留中のキュー内のすべての遅延トランザクションを拒否します。 完了すると、要求元のスレーブに「ACK」を送信します。

循環トークンアルゴリズム

このアプローチでは、システム内のトランザクションは循環トークンを使用してシリアル化され、データベースのすべてのレプリカに対して適宜実行されます。 したがって、すべてのトランザクションが受け入れられます。 拒否されるものはありません。 これには2つのフェーズがあります-

  • トランザクションのシリアル化フェーズ-このフェーズでは、すべてのトランザクションがシリアル化の順序で実行されるようにスケジュールされます。 各サイトの各トランザクションには、トランザクションの順序を示す一連の連続した一意のチケットが割り当てられます。 トランザクションにチケットが割り当てられると、すべてのサイトにブロードキャストされます。
  • トランザクションアプリケーションフェーズ-サイトがチケットとともにトランザクションを受信すると、サイトはチケットに従ってトランザクションを実行します。 トランザクションの実行が完了すると、このサイトは適切なメッセージをブロードキャストします。 トランザクションは、すべてのサイトで実行が完了すると終了します。

分散DBMS-失敗とコミット

データベース管理システムは、多くの障害の影響を受けやすくなっています。 この章では、障害の種類とコミットプロトコルについて説明します。 分散データベースシステムでは、障害は、ソフト障害、ハード障害、およびネットワーク障害に大まかに分類できます。

ソフト故障

ソフト障害は、永続ストレージではなく、コンピューターの揮発性メモリの損失を引き起こす障害のタイプです。 ここでは、メインメモリ、バッファ、キャッシュ、レジスタなどの非永続ストレージに保存されている情報は失われます。 システムクラッシュとも呼ばれます。 ソフト障害のさまざまな種類は次のとおりです-

  • オペレーティングシステムの障害。
  • メインメモリのクラッシュ。
  • トランザクションの失敗または中止。
  • 整数オーバーフローやゼロ除算エラーなどのシステム生成エラー。
  • サポートソフトウェアの失敗。
  • 停電。

ハード障害

ハード障害は、ディスクなどの永続的または不揮発性ストレージのデータの損失を引き起こす障害のタイプです。 ディスク障害は、一部のディスクブロックのデータの破損またはディスク全体の障害を引き起こす可能性があります。 ハード障害の原因は次のとおりです-

  • 停電。
  • メディアの障害。
  • 読み書きの誤動作。
  • ディスク上の情報の破損。
  • ディスクの読み取り/書き込みヘッドクラッシュ。

予約済みの新しいフォーマット済みのすぐに使用できるディスクがある場合、ディスク障害からの回復は短時間で済みます。 それ以外の場合、期間には、購入注文の取得、ディスクの購入、および準備にかかる時間が含まれます。

ネットワーク障害

ネットワーク障害は、分散データベースまたはネットワークデータベースで一般的です。 これらは、データの分散性とネットワークを介したデータの転送のためにデータベースシステムで引き起こされるエラーで構成されます。 ネットワーク障害の原因は次のとおりです-

  • 通信リンク障害。
  • ネットワークの混雑。
  • 転送中の情報の破損。
  • サイト障害。
  • ネットワークの分割。

コミットプロトコル

データベースシステムは、障害が発生した後でもトランザクションの望ましいプロパティが維持されることを保証する必要があります。 トランザクションの実行中に障害が発生した場合、トランザクションによってもたらされたすべての変更がコミットされない可能性があります。 これにより、データベースの一貫性が失われます。 コミットプロトコルは、トランザクションの取り消し(ロールバック)またはトランザクションのやり直し(ロールフォワード)を使用してこのシナリオを防ぎます。

コミットポイント

トランザクションをコミットするか中止するかを決定する時点は、コミットポイントと呼ばれます。 コミットポイントのプロパティは次のとおりです。

  • これは、データベースが一貫している時点です。
  • この時点で、データベースによってもたらされた変更は、他のトランザクションから見ることができます。 すべてのトランザクションは、データベースの一貫したビューを持つことができます。
  • この時点で、トランザクションのすべての操作が正常に実行され、その効果がトランザクションログに記録されました。
  • この時点で、必要に応じてトランザクションを安全に元に戻すことができます。
  • この時点で、トランザクションはそれによって保持されているすべてのロックを解放します。

トランザクションの取り消し

トランザクションによってデータベースに加えられたすべての変更を取り消すプロセスは、トランザクションの取り消しまたはトランザクションのロールバックと呼ばれます。 これは、主にソフト障害の場合に適用されます。

トランザクションのやり直し

トランザクションによってデータベースに加えられた変更を再適用するプロセスは、トランザクションREDOまたはトランザクションロールフォワードと呼ばれます。 これは主に、ハード障害からの回復に適用されます。

トランザクションログ

トランザクションログは、データベースアイテムに対するトランザクション操作を追跡する順次ファイルです。 ログは本質的にシーケンシャルであるため、最初または最後から順番に処理されます。

トランザクションログの目的-

  • トランザクションをコミットまたはサポートするコミットプロトコルをサポートするため。
  • 障害後のデータベースの回復を支援するため。

通常、トランザクションログはディスクに保存されるため、ソフト障害の影響を受けません。 さらに、ログは磁気テープなどのアーカイブストレージに定期的にバックアップされ、ディスク障害からも保護されます。

トランザクションログのリスト

トランザクションログには、トランザクションのステータスに応じて5種類のリストが保持されます。 このリストは、リカバリマネージャがトランザクションのステータスを確認するのに役立ちます。 ステータスと対応するリストは次のとおりです-

  • トランザクション開始レコードとトランザクションコミットレコードを持つトランザクションは、コミットされたトランザクションであり、コミットリストで管理されます。
  • トランザクション開始レコードとトランザクション失敗レコードはあるが、トランザクション中止レコードはないトランザクションは、失敗したトランザクションであり、失敗リストに保持されます。
  • トランザクション開始レコードとトランザクション中止レコードを持つトランザクションは、中止されたトランザクションであり、中止リストに保持されます。
  • トランザクション開始レコードとトランザクションのコミット前レコードを持つトランザクションは、コミット前のトランザクションです。 すべての操作が実行されたがコミットされていないトランザクション–コミット前リストで維持されます。
  • トランザクション開始レコードはあるが、コミット前、コミット、アボート、または失敗のレコードがないトランザクションは、アクティブリストで維持されるアクティブトランザクションです。

即時更新と遅延更新

即時更新と遅延更新は、トランザクションログを保持するための2つの方法です。

*immediate update* モードでは、トランザクションが実行されると、トランザクションによって行われた更新が直接ディスクに書き込まれます。 ディスク内のデータベースに書き込む前に、古い値と更新値がログに書き込まれます。 コミット時に、ディスクに加えられた変更は永続的になります。 ロールバック時に、データベース内のトランザクションによって行われた変更は破棄され、ログに保存されている古い値から古い値がデータベースに復元されます。
*deferred update* モードでは、トランザクションが実行されると、トランザクションによってデータベースに対して行われた更新がログファイルに記録されます。 コミット時に、ログの変更がディスクに書き込まれます。 ロールバック時に、ログ内の変更は破棄され、データベースに変更は適用されません。

分散DBMS-データベースの回復

データベース障害から回復するために、データベース管理システムは多くの回復管理技術に頼っています。 この章では、データベースリカバリのさまざまなアプローチについて学習します。

データベース回復のための典型的な戦略は次のとおりです-

  • データベースの不整合をもたらすソフト障害の場合、回復戦略にはトランザクションの取り消しまたはロールバックが含まれます。 ただし、トランザクションの一貫した状態に回復するために、トランザクションREDOが採用される場合もあります。
  • データベースに大きな損害をもたらすハード障害の場合、リカバリ戦略には、アーカイブバックアップからデータベースの過去のコピーを復元することが含まれます。 データベースの最新の状態は、トランザクションログからコミットされたトランザクションのやり直し操作を通じて取得されます。

停電からの回復

電源障害により、非永続メモリの情報が失われます。 電源が復旧すると、オペレーティングシステムとデータベース管理システムが再起動します。 回復マネージャーは、トランザクションログから回復を開始します。

即時更新モードの場合、リカバリマネージャは次のアクションを実行します-

  • アクティブリストと失敗リストにあるトランザクションは取り消され、中止リストに書き込まれます。
  • コミット前リストにあるトランザクションはやり直されます。
  • コミットリストまたはアボートリストのトランザクションに対してアクションは実行されません。

遅延更新モードの場合、リカバリマネージャは次のアクションを実行します-

  • アクティブリストと失敗リストにあるトランザクションは、アボートリストに書き込まれます。 変更はまだディスクに書き込まれていないため、元に戻す操作は必要ありません。
  • コミット前リストにあるトランザクションはやり直されます。
  • コミットリストまたはアボートリストのトランザクションに対してアクションは実行されません。

ディスク障害からの回復

ディスク障害またはハードクラッシュにより、データベースが完全に失われます。 このハードクラッシュから回復するには、新しいディスクを準備してからオペレーティングシステムを復元し、最後にデータベースのバックアップとトランザクションログを使用してデータベースを回復します。 回復方法は、即時更新モードと遅延更新モードの両方で同じです。

回復マネージャは、次のアクションを取ります-

  • コミットリストとコミット前リストのトランザクションはやり直され、トランザクションログのコミットリストに書き込まれます。
  • アクティブリストと失敗リストのトランザクションは取り消され、トランザクションログの中止リストに書き込まれます。

チェックポイント

  • チェックポイント*は、レコードがバッファからデータベースに書き込まれる時点です。 結果として、システムがクラッシュした場合、リカバリマネージャはチェックポイントの前にコミットされたトランザクションをやり直す必要がありません。 定期的なチェックポイント設定により、復旧プロセスが短縮されます。

チェックポイント手法の2つのタイプは次のとおりです-

  • 一貫したチェックポイント設定
  • ファジーチェックポイント

一貫したチェックポイント設定

一貫したチェックポイント設定により、チェックポイントでデータベースの一貫したイメージが作成されます。 回復中、最後のチェックポイントの右側にあるトランザクションのみが取り消されるか、やり直されます。 最後の一貫したチェックポイントの左側へのトランザクションは既にコミットされており、再度処理する必要はありません。 チェックポイントのために取られたアクションは-

  • アクティブなトランザクションは一時的に中断されます。
  • メインメモリバッファの変更はすべてディスクに書き込まれます。
  • 「チェックポイント」レコードがトランザクションログに書き込まれます。
  • トランザクションログはディスクに書き込まれます。
  • 中断されたトランザクションが再開されます。

手順4でトランザクションログもアーカイブされている場合、このチェックポイント設定はディスク障害および電源障害からの回復に役立ちます。それ以外の場合、電源障害のみからの回復に役立ちます。

ファジーチェックポイント

ファジーチェックポイントでは、チェックポイントの時点で、すべてのアクティブなトランザクションがログに書き込まれます。 電源障害が発生した場合、Recovery Managerはチェックポイント以降にアクティブだったトランザクションのみを処理します。 チェックポイントの前にコミットされたトランザクションはディスクに書き込まれるため、やり直す必要はありません。

チェックポイントの例

システムでチェックポイントの時刻はtcheckであり、システムのクラッシュの時刻はtfailであると考えてみましょう。 次のような4つのトランザクションT〜a〜、T〜b〜、T〜c〜、およびT〜d〜があるとします-

  • T〜a〜はチェックポイントの前にコミットします。
  • T〜b〜はチェックポイントの前に開始され、システムがクラッシュする前にコミットします。
  • T〜c〜はチェックポイントの後に開始され、システムがクラッシュする前にコミットします。
  • T〜d〜はチェックポイントの後に開始され、システムクラッシュ時にアクティブでした。

状況は次の図に描かれています-

描写された状況

回復マネージャーによって実行されるアクションは次のとおりです-

  • T〜a〜では何も行われません。
  • トランザクションのやり直しは、T〜b〜およびT〜c〜に対して実行されます。
  • T〜d〜に対してトランザクションの取り消しが実行されます。

UNDO/REDOを使用したトランザクション回復

トランザクション回復は、障害から回復するのではなく、障害のあるトランザクションの悪影響を排除するために行われます。 障害のあるトランザクションには、データベースを望ましくない状態に変更したすべてのトランザクションと、障害のあるトランザクションによって書き込まれた値を使用したトランザクションが含まれます。

これらの場合のトランザクション回復は、2段階のプロセスです-

  • すべての障害のあるトランザクションおよび障害のあるトランザクションの影響を受ける可能性のあるトランザクションを取り消します。
  • 障害はないが、障害のあるトランザクションのために取り消されたすべてのトランザクションをやり直します。

UNDO操作の手順は次のとおりです-

  • 障害のあるトランザクションがINSERTを実行した場合、リカバリマネージャは挿入されたデータ項目を削除します。
  • 障害のあるトランザクションがDELETEを実行した場合、リカバリマネージャは削除されたデータ項目をログから挿入します。
  • 障害のあるトランザクションがUPDATEを実行した場合、リカバリマネージャはログから更新前の値を書き込むことで値を削除します。

REDO操作の手順は次のとおりです-

  • トランザクションがINSERTを実行した場合、リカバリマネージャはログから挿入を生成します。
  • トランザクションがDELETEを実行した場合、回復マネージャーはログから削除を生成します。
  • トランザクションがUPDATEを実行した場合、回復マネージャーはログから更新を生成します。

分散DBMS-コミットプロトコル

ローカルデータベースシステムでは、トランザクションをコミットするために、トランザクションマネージャはリカバリマネージャにコミットする決定を伝えるだけです。 ただし、分散システムでは、トランザクションマネージャーは、トランザクションが実行されているさまざまなサイトのすべてのサーバーにコミットする決定を伝え、決定を一律に実施する必要があります。 各サイトで処理が完了すると、部分的にコミットされたトランザクション状態に到達し、他のすべてのトランザクションが部分的にコミットされた状態に達するまで待機します。 すべてのサイトがコミットする準備ができているというメッセージを受信すると、コミットを開始します。 分散システムでは、すべてのサイトがコミットするか、いずれのサイトもコミットしません。

さまざまな分散コミットプロトコルがあります-

  • 単相コミット
  • 二相コミット
  • 三相コミット

分散1フェーズコミット

分散1フェーズコミットは、最も単純なコミットプロトコルです。 トランザクションが実行されている制御サイトといくつかのスレーブサイトがあると考えてみましょう。 分散コミットの手順は次のとおりです-

  • 各スレーブは、トランザクションをローカルで完了した後、制御サイトに「DONE」メッセージを送信します。
  • スレーブは、制御サイトからの「コミット」または「中止」メッセージを待ちます。 この待ち時間は「脆弱性の窓」と呼ばれます。
  • 制御サイトが各スレーブから「DONE」メッセージを受信すると、コミットするか中止するかを決定します。 これはコミットポイントと呼ばれます。 次に、このメッセージをすべてのスレーブに送信します。
  • このメッセージを受信すると、スレーブはコミットまたはアボートし、確認メッセージを制御サイトに送信します。

分散2フェーズコミット

分散2フェーズコミットは、1フェーズコミットプロトコルの脆弱性を軽減します。 2つのフェーズで実行される手順は次のとおりです-

フェーズ1:準備フェーズ

  • 各スレーブは、トランザクションをローカルで完了した後、制御サイトに「DONE」メッセージを送信します。 制御サイトは、すべてのスレーブから「DONE」メッセージを受信すると、「Prepare」メッセージをスレーブに送信します。
  • 奴隷はまだコミットしたいかどうかに投票します。 スレーブがコミットしたい場合、「準備完了」メッセージを送信します。
  • コミットしたくないスレーブは、「準備ができていません」メッセージを送信します。 これは、スレーブで競合する同時トランザクションがある場合、またはタイムアウトが発生した場合に発生する可能性があります。

フェーズ2:コミット/中止フェーズ

  • 制御サイトがすべてのスレーブから「準備完了」メッセージを受信した後-
  • 制御サイトは「グローバルコミット」メッセージをスレーブに送信します。
  • スレーブはトランザクションを適用し、「コミットACK」メッセージを制御サイトに送信します。
  • 制御サイトは、すべてのスレーブから「Commit ACK」メッセージを受信すると、トランザクションがコミットされたと見なします。
  • 制御サイトが最初の「Not Ready」メッセージをスレーブから受信した後-
  • 制御サイトはスレーブに「Global Abort」メッセージを送信します。
  • スレーブはトランザクションを中止し、制御サイトに「Abort ACK」メッセージを送信します。
  • 制御サイトは、すべてのスレーブから「ACKの中止」メッセージを受信すると、トランザクションが中止されたと見なします。

分散三相コミット

分散三相コミットの手順は次のとおりです-

フェーズ1:準備フェーズ

手順は、分散2フェーズコミットの場合と同じです。

フェーズ2:コミットフェーズの準備

  • 制御サイトは、「準備状態に入る」ブロードキャストメッセージを発行します。
  • 応答として、スレーブサイトは「OK」と投票します。

フェーズ3:コミット/中止フェーズ

手順は2フェーズコミットと同じですが、「Commit ACK」/「Abort ACK」メッセージは不要です。

DDBMS-データベースのセキュリティと暗号化

この章では、データベースシステムが直面する脅威と制御の手段について説明します。 また、セキュリティツールとして暗号化についても学習します。

データベースのセキュリティと脅威

データセキュリティは、データベースシステムの不可欠な側面です。 多数のユーザー、断片化および複製されたデータ、複数のサイト、分散制御のため、分散システムでは特に重要です。

データベース内の脅威

  • 可用性の損失-可用性の損失とは、正当なユーザーによるデータベースオブジェクトの非可用性を指します。
  • 完全性の損失-データベースに対して許容できない操作が誤ってまたは悪意を持って実行されると、完全性の損失が発生します。 これは、データの作成、挿入、更新、または削除中に発生する可能性があります。 その結果、データが破損し、誤った判断につながります。
  • 機密性の損失-機密情報の不正または意図しない開示により機密性の損失が発生します。 違法行為、セキュリティ上の脅威、および国民の信頼の喪失につながる可能性があります。

対策

制御の手段は、次のカテゴリに大きく分けることができます-

  • アクセス制御-アクセス制御には、不正アクセスから保護するためのデータベース管理システムのセキュリティメカニズムが含まれます。 ユーザーは、有効なユーザーアカウントのみでログインプロセスをクリアすると、データベースにアクセスできます。 各ユーザーアカウントはパスワードで保護されています。
  • フロー制御-分散システムは、あるサイトから別のサイトへ、そしてサイト内の多くのデータフローを包含します。 フロー制御は、許可されていないエージェントがアクセスできるような方法でデータが転送されるのを防ぎます。 フローポリシーは、情報が流れることができるチャネルをリストします。 また、トランザクションだけでなくデータのセキュリティクラスも定義します。
  • データの暗号化-データの暗号化とは、機密データがパブリックチャネルを介して通信される場合のデータのコーディングを指します。 許可されていないエージェントがデータにアクセスしても、理解できない形式であるため、データを理解できません。

暗号化とは何ですか?

  • 暗号化*は、信頼できない通信パスを介して送信する前に情報をエンコードする科学であり、許可された受信者のみがそれをデコードして使用できます。

コード化されたメッセージは cipher text と呼ばれ、元のメッセージは plain text と呼ばれます。 送信者がプレーンテキストを暗号化テキストに変換するプロセスは、エンコーディングまたは*暗号化*と呼ばれます。 受信者が暗号化テキストをプレーンテキストに変換するプロセスは、デコードまたは*復号化*と呼ばれます。

暗号化を使用して通信する手順全体は、次の図を介して説明することができます-

暗号化

従来の暗号化方法

従来の暗号化では、暗号化と復号化は同じ秘密鍵を使用して行われます。 ここでは、送信者は、秘密鍵のコピーを使用して暗号化アルゴリズムでメッセージを暗号化します。 暗号化されたメッセージは、パブリック通信チャネルを介して送信されます。 暗号化されたメッセージを受信すると、受信者は同じ秘密鍵を使用して、対応する復号化アルゴリズムでメッセージを復号化します。

従来の暗号化のセキュリティは2つの要因に依存しています-

  • すべてに知られている健全なアルゴリズム。
  • ランダムに生成された、好ましくは送信者と受信者のみが知っている長い秘密鍵。

最も有名な従来の暗号化アルゴリズムは、 Data Encryption Standard または DES です。

この方法の利点は、簡単に適用できることです。 ただし、従来の暗号化の最大の問題は、通信する当事者間で秘密鍵を共有することです。 キーを送信する方法は面倒であり、盗聴されやすくなります。

公開鍵暗号

従来の暗号化とは対照的に、公開キー暗号化では、公開キーと秘密キーと呼ばれる2つの異なるキーを使用します。 各ユーザーは、公開鍵と秘密鍵のペアを生成します。 次に、ユーザーは公開キーをアクセス可能な場所に置きます。 送信者がメッセージを送信する場合、受信者の公開キーを使用してメッセージを暗号化します。 暗号化されたメッセージを受信すると、受信者は自分の秘密キーを使用してメッセージを復号化します。 秘密鍵は受信者以外には知られていないため、メッセージを受信した他の人は解読できません。

最も一般的な公開鍵暗号アルゴリズムは、 RSA アルゴリズムと Diffie– Hellman アルゴリズムです。 この方法は、プライベートメッセージを送信するのに非常に安全です。 ただし、問題は、多くの計算を伴うため、長いメッセージに対しては非効率であることが判明しています。

解決策は、従来の暗号化方式と公開鍵暗号方式を組み合わせて使用​​することです。 秘密鍵は、通信する当事者間で共有する前に、公開鍵暗号を使用して暗号化されます。 次に、メッセージは、共有秘密鍵を使用して従来の暗号化を使用して送信されます。

デジタル署名

デジタル署名(DS)は、電子商取引アプリケーションで使用される公開鍵暗号に基づく認証技術です。 メッセージ本文内の個人に一意のマークを関連付けます。 これは、他の人がメッセージの有効な送信者を認証するのに役立ちます。

通常、ユーザーのデジタル署名は、偽造に対するセキュリティを提供するためにメッセージごとに異なります。 メソッドは次のとおりです-

  • 送信者はメッセージを取得し、メッセージのメッセージダイジェストを計算し、プライベートキーでダイジェストに署名します。
  • 次に、送信者は署名付きダイジェストをプレーンテキストメッセージと共に追加します。
  • メッセージは通信チャネルを介して送信されます。
  • 受信者は、追加された署名済みダイジェストを削除し、対応する公開キーを使用してダイジェストを検証します。
  • 次に、受信者はプレーンテキストメッセージを取得し、同じメッセージダイジェストアルゴリズムで実行します。
  • ステップ4とステップ5の結果が一致する場合、受信者はメッセージに整合性と信頼性があることを認識します。

DDBMS-分散データベースのセキュリティ

多くのユーザー、多様なデータ、複数のサイト、分散制御があるため、分散システムには集中システムよりも追加のセキュリティ対策が必要です。 この章では、分散データベースセキュリティのさまざまな側面について説明します。

分散通信システムでは、侵入者の2種類があります-

  • 受動的盗聴者-メッセージを監視し、個人情報を取得します。
  • アクティブな攻撃者-メッセージを監視するだけでなく、新しいデータを挿入したり、既存のデータを変更したりしてデータを破損します。

セキュリティ対策には、通信のセキュリティ、データのセキュリティ、およびデータ監査が含まれます。

通信セキュリティ

分散データベースでは、データ、ユーザー、トランザクションの場所が多様化するため、多くのデータ通信が行われます。 そのため、ユーザーとデータベース間、および異なるデータベース環境間の安全な通信が要求されます。

通信のセキュリティには次のものが含まれます-

  • 転送中にデータが破損しないようにしてください。
  • 通信チャネルは、受動的な盗聴者とアクティブな攻撃者の両方から保護する必要があります。
  • 上記の要件を達成するには、明確に定義されたセキュリティアルゴリズムとプロトコルを採用する必要があります。

エンドツーエンドの安全な通信を実現するための2つの一般的な一貫した技術は次のとおりです-

  • Secure Socket LayerプロトコルまたはTransport Layer Securityプロトコル。
  • 仮想プライベートネットワーク(VPN)。

データセキュリティ

分散システムでは、通信とは別にデータを保護する手段を採用することが不可欠です。 データのセキュリティ対策は-

  • 認証と承認-これらは、認証されたユーザーのみがデータベースを使用できるようにするために採用されたアクセス制御手段です。 認証を提供するために、デジタル証明書が使用されます。 また、ログインはユーザー名とパスワードの組み合わせによって制限されます。
  • データ暗号化-分散システムでのデータ暗号化の2つのアプローチは次のとおりです-
  • 内部から分散データベースへのアプローチ:ユーザーアプリケーションはデータを暗号化し、暗号化されたデータをデータベースに保存します。 保存されたデータを使用するために、アプリケーションはデータベースから暗号化されたデータを取得し、それを解読します。
  • 分散データベースの外部:分散データベースシステムには独自の暗号化機能があります。 ユーザーアプリケーションは、データがデータベースに暗号化された形式で格納されていることを認識せずに、データを格納および取得します。
  • 有効な入力-このセキュリティ対策では、ユーザーアプリケーションはデータベースの更新に使用する前に各入力をチェックします。 未検証の入力は、バッファオーバーラン、コマンドインジェクション、クロスサイトスクリプティング、データの破損など、さまざまな悪用を引き起こす可能性があります。

データ監査

データベースセキュリティシステムは、採用すべきセキュリティ対策を確認するために、セキュリティ違反を検出および監視する必要があります。 多くの場合、発生時にセキュリティ侵害を検出することは非常に困難です。 セキュリティ違反を識別する1つの方法は、監査ログを調べることです。 監査ログには次のような情報が含まれます-

  • 失敗したアクセス試行の日付、時刻、およびサイト。
  • 成功したアクセス試行の詳細。
  • データベースシステムの重要な変更。
  • 特に複数のサイトのデータベースからの膨大な量のデータへのアクセス。

上記のすべての情報は、データベース内のアクティビティの洞察を提供します。 ログの定期的な分析は、サイトおよび発生時刻とともに不自然なアクティビティを識別するのに役立ちます。 このログは、攻撃者がアクセスできないように、理想的には別のサーバーに保存されます。