データベースシステムにおける利用
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/01/23 07:39 UTC 版)
「アトミックコミット」の記事における「データベースシステムにおける利用」の解説
データベースシステムでのアトミックコミットは、 ACIDの2つの重要な特性である不可分性と一貫性を満たす。一貫性は、アトミックコミットの各変更が一貫している場合にのみ達成される。 例に示されているように、アトミックコミットは、データベースでのマルチステップ操作にとって重要である。データベースが存在する物理ディスクの最新のハードウェア設計により、真のアトミックコミットは存在できません。ディスクに書き込むことができる最小の領域は、セクターと呼ばれます。 1つのデータベースエントリが複数の異なるセクターにまたがる場合があります。一度に書き込むことができるセクターは1つだけです。この書き込み制限が、真のアトミックコミットが不可能な理由です。メモリ内のデータベースエントリが変更された後、それらはディスクに書き込まれるためにキューに入れられます。これは、例で特定されたのと同じ問題が再発したことを意味する。この問題は、どんなアルゴリズムを使っても必ず二人の将軍問題に遭遇し完全な解決ができない。2相コミットと3相コミットの手法は、アトミックコミットと関連するいくつかの問題を一部解決する。 2相コミットプロトコルでは、調整者が、問題が発生した場合にデータベースの元の状態を回復するために必要なすべての情報を維持する必要があります。名前が示すように、投票とコミットの2つのフェーズがある。 投票フェーズでは、各ノードがアトミックコミットの変更を独自のディスクに書き込む。次に、ノードはその状態を調整者に報告する。いずれかのノードが調整者に報告しないか、状態メッセージが失われた場合、調整者はノードの書き込みが失敗したと見なす。すべてのノードが調整者に報告すると、第2フェーズが始まる。 コミットフェーズ中に、調整者は各ノードにコミットメッセージを送信して、個々のログに記録する。このメッセージがノードのログに追加されるまで、加えられた変更はすべて不完全として記録される。いずれかのノードが障害を報告した場合、調整者は代わりにロールバックメッセージを送信する。これにより、ノードがディスクに書き込んだ変更がすべて削除される。 3相コミットプロトコルは、2相コミットプロトコルの主な問題を取り除くことを目的としている。これは、コミットフェーズ中に調整者と別のノードに同時に障害が発生した場合に発生し、どちらのアクションも実行すべきかを判断できない。この問題を解決するために、3番目のフェーズがプロトコルに追加される。コミット準備フェーズは、投票フェーズの後、コミットフェーズの前に発生する。 投票フェーズでは、2相コミットと同様に、調整者は各ノードがコミットする準備ができていることを要求する。いずれかのノードに障害が発生した場合、調整者は障害が発生したノードを待機している間にタイムアウトする。これが発生した場合、調整者はすべてのノードに中止メッセージを送信する。いずれかのノードが失敗メッセージを返した場合も、同じアクションが実行される。 投票フェーズで各ノードから成功メッセージを受信すると、コミット準備フェーズが開始される。このフェーズでは、調整者は各ノードに準備メッセージを送信する。各ノードは、準備メッセージを確認して応答する必要がある。応答がない場合、またはノードが準備ができていないことを返す場合、調整者は中止メッセージを送信する。タイムアウトが経過する前に準備メッセージを受信しないノードは、コミットを中止する。 すべてのノードが準備メッセージに応答した後、コミットフェーズが開始される。このフェーズでは、調整者は各ノードにコミットメッセージを送信する。各ノードはこのメッセージを受信すると、実際のコミットを実行する。メッセージが失われたためにコミットメッセージがノードに到達しない場合、または調整者が失敗した場合、タイムアウトが経過するとコミットが実行される。調整者がリカバリー時に失敗した場合、調整者は各ノードにコミットメッセージを送信する。
※この「データベースシステムにおける利用」の解説は、「アトミックコミット」の解説の一部です。
「データベースシステムにおける利用」を含む「アトミックコミット」の記事については、「アトミックコミット」の概要を参照ください。
- データベースシステムにおける利用のページへのリンク