概要
- Firestoreの裏側の仕組みについて調べてた
- 2相コミットというワードについて調べたので理解のために記す
- なんか間違えてたらマサカリください
メモ
分散データベースとは
- 言わずとも
- 複数サーバにデータ、またはデータベースを分散して管理する仕組み
- BigQueryとかSpannerとかSnowflakeもそういう類のものだと思ってる(厳密には違いそうだけど)
分散データベースで困ること
サービスや仕組みによって、色々あると思いますが、ここではトランザクションだけにフォーカスします。
スケーラビリティを達成するため、複数サーバにデータベースがあるので、データの整合性の担保に課題がある。
分散データベース(中身は3台、A,B,Cというデータベース)へ書き込みを行いたい。となった場合、ユーザーからはクエリを投げ、A,B,Cそれぞれにコミットすれば良いがそう単純な話ではない。
Aが失敗した場合どうするのかーとか、A,B,C全部にちゃんと書き込めたのかーとか色々考える必要がある。
2相コミット(2フェーズコミット)
ここで「2相コミット」という方法をメモする。
簡単に書くと「コミットを2回に分けて実行する」という方法。
- 1段階目にマネージャーみたいな機能(Coordinatorと呼ぶらしい)が、書き込む分散サーバすべてに問い合わせを行い、コミットできるか確認を行う
- 全てコミット可能と確認ができれば、2段階目としてデータの更新を行う
という2段階を取るので2相コミットと呼ばれる。なるほど
絵があるとわかりやすいので下記ありがたい記事引用
この方式を利用しているサービス
ぱっと調べた見た感じつかってそうなサービス