データベース 分散データベース
Categories: MCA Database
1.分散データベース環境
分散データベースとは複数のサーバーに同じデータベースを複製し、重複して配置した環境を分散データベース環境です。同じデータベースを複数のサーバーに配置する理由としては次の点があります。
(1)データとユーザーの距離を近くできる
(2)組織内の各部門がそれぞれ独立してデータを利用できる
(3)通常のデータベース操作(オンライントランザクション処理=OLTP)に使うデータとデータウェアハウスなどで主に読み取り処理に使うデータを独立させることができる。
(4)一つのデータベースを使う人数を減らすことができる。
また分散データベース環境を構築するにはデータベースを複数のサーバーに複製する必要があります。その方法としてはレプリケーション、分散トランザクションの二種類の方法があります。
2.レプリケーション
レプリケーションはデータベースのデータを定期的に繰り返し複製することです。
(1)パブリッシャ、ディストリビュータ、サブスクライバ
データベースレプリケーションにはパブリッシャ、ディストリビュータ、サブスクライバの3種類のコンピュータが関与しています。
①パブリッシャ
パブリッシャとは複製元となるデータベース(データベースソース)を保持するコンピュータである。ソースデータベースの内容がどのように変更されたか、をディストリビュータに知らせるという役割があります。
②ディストリビュータ
パブリッシュからのソースデータベースの内容がどのように変更されたかという情報を格納し、サブスクライバに送るコンピュータです。
③サブスクライバ
データベースのコピーを保持し、ディストリビュータから送られてきた情報に基づいてデータを更新するコンピュータです。一台のコンピュータに同時にパブリッシャ、ディストリビュータ、サブスクライバにすることも可能です。
(2)レプリケーション方法
レプリケーションの方法には、スナップショットレプリケーション、トランザクションレプリケーション、マージレプリケーションの3種類があります。
①スナップショットレプリケーション
ソースデータベースの特定の時点の内容をそのままサブスクライバにコピーする方式のレプリケーションです。
他のデータベースが必ずしも最新な状態でなくてもよい場合に適したレプリケーション方式であり、前回のコピー時からどの部分がどのように変更されたかはまったく関与せず、ディストリビュータも必要がない方式です。
②トランザクションレプリケーション
ソースデータベースにどのような変更がなされたのかだけを知らせる方式のレプリケーションです。
パブリッシャはデータ変更記録を抽出しディストリビュータにトランザクションログ内容を送り、ディストリビュータはソースデータベースのトランザクションログファイルに基づき、サブスクライバのデータベースに対し実行します。
トランザクションレプリケーションはレプリケーションの中でもソースデータベースが更新されてからその更新がデータベースのコピーに反映されるまでの時間が最も短い方法です。
③マージレプリケーション
双方向でデータの複製が行われるレプリケーション手法であり、パブリッシャ、サブスクライバのどちらもユーザーによって更新が可能し、データ更新は、同期、マージと呼ばれる処理によって統一されています。ソースデータベース、サブスクライバのコピー双方で同じデータに対して違う変更が加えられると競合と呼ばれる問題が発生する。その場合は更新に優先順位をつけるなどの対策が必要です。
3.分散トランザクション
分散トランザクションは複製によって作成された複数のまったく同じ内容のデータベースに対して同時に同じトランザクションを実行します。
これによってデータベース間で内容に違いがでるのを防ぐことができる。但し同時に複数のデータベースにトランザクションを実行したが、傷害によりロールバックする事態も発生します。
SQLServerではその危険性を抑えるために2フェーズコミット(2PC)と呼ばれる方式を採用します。
(1)2フェーズコミット
2フェーズコミットとはトランザクションのコミットを準備フェーズ、コミットフェーズ2段階に分けて行う方式である。2フェーズコミットにはMS DTC(Microsoft Distributed Transaction Coordinator)というサービスが必要です。
①準備フェーズ
準備フェーズはMS DTCがアプリケーションからコミット要求を受け取り、同じトランザクションが実行されているサーバーに準備コマンドと呼ばれるコマンドを送る。準備コマンドを受け取ったサーバーは準備フェーズ作業が完了した場合、作業が完了したということをMS DTCに通知します。
②コミットフェーズ
サーバーからの準備完了コマンドを受け取り、コミットコマンドと呼ばれるコマンドを各サーバーに送信する。コミットコマンドを受け取ったサーバーは再度コミットが正常に完了したという通知をMS DTCに送る。ここで一つでもコミットが正常に完了しなかったという通知を送ってきた場合はMSDTCはすべてのサーバーにロールバックコマンドを送り、アプリケーションには分散トランザクションが正常に完了しなかったことを通知します。
分散トランザクションは全てのサーバーが常に通信可能な状態になっていなければならないのが条件です。
4.まとめ
(1)分散データベース環境
複数のサーバーに同じデータベースを複製し、重複して配置した環境。
(2)OLTP
オンライントランザクション処理のことでデータベース操作のこと。
(3)レプリケーション
レプリケーションとはアルデータベースのデータを定期的に繰り返し複製することである。
(4)ソースデータベース
複製元のデータベースをソースデータベースと呼び、ソースデータベース保持のコンピュータをパブリッシャと呼ぶ。
(5)パブリッシャ
・ソースデータベースを保持する。
・ディストリビュータにデータベースの変更内容を知らせる
(6)ディストリビュータ
・データベースの変更に関する情報を保持する
・変更に関する情報をサブスクライバに送る
(7)サブスクライバ
・データベースのコピーを保持する。
・ディストリビュータからの情報に基づきコピーを更新する。
(8)競合
ソースデータベースとサブスクライバのコピー双方で同じデータに対し違う変更が加えられていることを競合と呼ぶ
(9)分散トランザクション
分散トランザクションとは分散データベース環境における運用方式である。その他レプリケーション方式という方法がある。
(10)2フェーズコミット
分散トランザクションにおけるトランザクションのコミットを標準フェーズとコミットフェーズに分けて2段階に分けて行う方式である。
(11)MS DTC
分散トランザクションを行う場合において、複数のサーバーに同時にトランザクションを実行する状況において、ロールバックを防ぐために2フェーズコミット方式を行う場合に使用するサービス名称。
(12)準備コマンド
2フェーズコミットの準備フェーズ、コミットフェーズのうち、準備フェーズの段階において複数サーバーに送るコマンドのこと。
(13)コミットコマンド
2フェーズコミットのコミットフェーズの段階において準備コマンド完了後に複数サーバーに送るコマンドのこと。
(14)ロールバックコマンド
MSDTCにより、コミット完了コマンドが複数サーバーよりすべて正常に完了されなかった場合において、正常に完了しなかったという通知を送るコマンドのこと。