連載
» 2018年01月31日 05時00分 公開

NoSQLベストプラクティス(7):NoSQLは「一貫性あるトランザクションを実現できない」という誤解 (3/3)

[三浦デニース(Denise Miura),マークロジック株式会社]
前のページへ 1|2|3       

トランザクションのコミット

 コミットはトランザクションの最後に行われます。これによりトランザクションの「原子性」(ACIDの「A」)が実現されます。これが終わると、トランザクションによるあらゆる変更が公開されます。トランザクション中、何らかの部分がうまくいかなかった場合には、このトランザクションが中止され、そこまでの変更はロールバックされます(以前の状態に戻されます)。つまりこのトランザクションはなかったことになります。

 トランザクションをコミットすると、新しいバージョンには現在の時間に基づく開始タイムスタンプが付けられ、これまでのバージョンには終了タイムスタンプが付けられます。これらは全て同時に行われます(タイムスタンプ情報は、独立したTimestampsファイルに格納され、コミットは1つの操作として実行されます)。トランザクションにおいてファイル変更時ではなく、コミット時にタイムスタンプを更新することにより、トランザクションの「原子性」が実現されます。全ての変更が一度に行われるのです。

分散コミット

 それでは、分散されたデータベースにおいて、複数ホスト上にある複数ドキュメントをトランザクションとして更新する場合はどうでしょうか。この場合、コミットのプロセスは複雑になります。ここでデータベースは2相コミット(Two-Phase Commit)を行います。これは、全ての変更がコミットされたこと(あるいは失敗した場合にはどのホストでもコミットされていないこと)を確認するために、トランザクションに関わっているホスト同士がやりとりをするというものです。

 2相コミットの際には、トランザクションに関わるホストのうち1つがコーディネーターの役割を担い、自分のオンディスクジャーナルに「distributed begin」というエントリーを記述します。これが終わると、他のホストにコミットの準備を要求するメッセージを送ります。これが2相コミットの1つ目の相(フェーズ)です。

 この準備段階で、各ホストは各自のジャーナルに準備用エントリーを記述し、これをディスクと同期させ、参加の準備ができたことをコーディネーターに伝えます。ホスト(コーディネーターを含む)のうち1つでも参加できない場合、このトランザクションは中止されます。問題がない場合には、次のステップに進みます。

 全てのホストから準備できていることを伝えられると、コーディネーターはコミットをジャーナルに記述し、これをディスクと同期させます。次にコーディネーターは、他の参加ホストに対してコミットするように伝えます。これにより各参加ホストもコミットを実行します。これが2相コミットの2つ目の相です。タイムスタンプは、分散されていない1つのホストの場合と同様に、全てのホストで更新されます。

図2 銀行業務アプリケーションの残高繰越における2相コミット

 コミットを2つのフェーズで行うことで、分散されたホスト全てがOKの場合にのみコミットされます。この準備フェーズがなければ、参加ホストの一部においてのみコミットが発生する可能性があります。こうなるとトランザクションの原子性が損なわれ、データの一部が矛盾してしまいます。

複数の機能を通じてACIDトランザクションを実現

 こういった複数の機能により、NoSQLデータベースでも原子性、一貫性、独立性、永続性のある、つまりACIDなトランザクションを実現できます。ACID準拠のNoSQLデータベースに基づくアプリケーションでは、データの読み取りと書き込みを同時に行うことができます(ロックの解除を待たなくてはならない場合もありますが)。システムが異常終了した場合も、オンディスクジャーナルをリプレイすることでインメモリのデータを復旧できます。また2相コミットにより、アプリケーションによる多くのホストに分散したドキュメントへのアクセスも信頼できるものとなります。

筆者紹介

三浦デニース(Denise Miura)

photo

マークロジック株式会社日本法人代表。ソフトウェア開発ならびにwebテクノロジーに関して25年以上の経験を持ち、さまざまなエンジニアリング、コンサルティング、管理職などの要職を歴任。前職はSilicon Graphics、E*TRADE Financial、Blue Martini Software(日本法人代表取締役)など。カーネギーメロン大学卒(コンピュータサイエンス専攻)


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。