分散データベース、って何かカッコいい響きですよね。
でも、どんなデータベース何だろう?って疑問はあるかと思います。そして、分散データベースに関して、2相コミットって仕組みもあります。
今回は分散データベースにおける2相コミットの仕組みを解説していきます!
分散データベースとは?
先ず分散データベースの定義ですが、「ネットワーク上にある複数の物理的なデータベースを見かけ上一つのデータベースとして取り扱えるようにしたシステムのこと」となります。
例えば、一つのテーブルの中の、支社や地域の店舗毎に複数の場所にデータベースを分散(水平型)したり、部門毎に分散(垂直型)したりすることがあります。データベースとしては分散するのですが、業務としては統合して一つのデータベースとして扱えます。
分散データベースの透過性とは?
分散データベースにおいて利用者は分散されていることを意識する必要が無く、このメリットだけを受けることができるのですが、実際の構築や管理は透過性を保つ必要性があり、大変なのです(汗)
そのため、分散データベースには次の要件が求められます。
資源位置の透過性 | 利用者がデータベースの位置を意識せずに利用できる |
---|---|
移動の透過性 | データの格納サイトが変わっても利用者に影響がない |
分割の透過性 | データが複数サイトに分割格納されていても利用者は意識する必要がない |
重複の透過性 | データが複数サイトに重複格納されていても利用者は意識する必要がない |
障害の透過性 | あるサイトで障害が起きても利用者に影響がない |
そしてメリットの裏に分散データベースには以下のデメリットがあります。
このデメリットを改善するために「データベース管理システム(DBMS)」製品は、分散しているデータベース間で同期をとり、一斉にデータを更新する「2相コミット」という仕組みがあります。
では、2相コミットの内容に進んでいきましょう!
2相コミットの役割と流れ
2相コミットは分散された各サイトのデータベースに対して、主サイトである調停者が「コミットできる?」と問い合わせを行って、各サイトからの返信の内容によって、サイト全てを「コミットする」または「ロールバックする」を決定する仕組みです。
そんなに難しいものでは無いので、流れを簡単に図にしてみました!
これをトランザクションレベルで流れを表現すると以下のようになります。
ただ、2相コミットは「相手の応答ありき」なので、参加者が応答したのに、調停者が障害でメッセージを受け取れないことや、調停者が連絡したのに、一つの参加者が障害で応答できない時などに、みんなが待ち続ける状態が発生してしまいます。
まとめ
今回は分散データベースにおける2相コミットに関して解説してきました。
2相コミットは簡単に言うと「各データベースの状況を確認して、みんな同じ状態にする」というものですね。
分散データベースにおいては2相コミット以外に、非同期で関連データを複製・更新する「レプリケーション」などの機能によってもデータの不整合を防いでますが、やはり一時的には各DBが更新したデータ間に矛盾が発生しますので、在庫引き当てなど即時性が不可欠な用途には適さないようですね。
みんなに確認しながら事を進める、ってのは人生においても必要な進め方ですね(笑)
以上です!