検索
連載

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

本連載では、「NoSQLデータベースの今」を正しく理解し、ビジネス躍進の実現に向けた対策としての「ベストプラクティス」を掲示していきます。今回は、「NoSQLデータベースでは、トランザクションの一貫性を保証できない」という誤解について解説します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

NoSQLベストプラクティス

 今回は、NoSQLにおける「データベースの一貫性」について説明し、よくある誤解を解消したいと思います。まず、「データベースの一貫性」の2つの種類「完全一貫性(guaranteed consistency)」と「結果整合性(eventual consistency)」について定義しておきます。

完全一貫性とは

 「完全一貫性」は、ACID準拠のトランザクションエンジンに基づいています。ACIDは、「Atomicity(原子性)」「Consistency(一貫性)」「Isolation(独立性)」「Durability(永続性)」の頭文字で、データベースのトランザクションにおける信頼性を保証するプロパティを定義するものです。

 原子性とは、トランザクション内に複数のステートメントがある場合、トランザクション内の全ての部分が成功する必要があり、もし一部でもうまくいかなかった場合には、全体が実行されないということです。

 一貫性(整合性)とは、トランザクションのコミット時に、データベースが1つの有効な状態からもう1つの有効な状態に移行することを保証するというものです。

 独立性(分離性)とは、複数のトランザクションを同時に実行した際に、個々のトランザクションは他のトランザクションを意識しない、つまり無関係だということです。またこれらは逐次的に実行されます。

 最後に永続性とは、あるトランザクション(データベースへのデータの保存、更新、削除など)をコミットした場合、これらの変更は、仮にシステム障害が発生した場合でも、失われることなく永続的に記録されるということです。

 こうした一貫性は、リレーショナルデータベースにおいては当たり前のものです。このような業界標準をNoSQLデータベースで実現する方法については、後半部分で説明します。

結果整合性とは

 「結果整合性」は、より制約が緩いBASE基準だけを満たしています。BASEは、「Basically Available(基本的に利用可能)」「Soft state(厳密ではない状態遷移)」「Eventual consistency(結果整合性)」の頭文字です。

 Basically Available(基本的に利用可能)とは、必ず何らかのレスポンスがあるということです。しかしこのレスポンスは単なるエラーメッセージの可能性もあり、また同時に返された他のレスポンスと矛盾している可能性もあります。

 Soft state(厳密ではない状態遷移)とは、時間の経過に伴い、更新されていない状況でも(例えば、分散環境の幾つかのノードで更新がまだ反映されていない状態でも)システムが変更される可能性がある、ということです。

 Eventual consistency(結果整合性)とは、更新が入ってこなくなった後に、システムが最終的には一貫性がある状態になる、ということです。更新が入ってきている状態では、個々のトランザクションの完了を確認した上で次のトランザクションを始めるということはしません。

 一貫性を最も厳しく設定した場合、つまり1つのプライマリサーバからの全ての読み取りが「majority read concern」かつ、全ての書き込みが「majority write concern」で行われる場合でも、一貫性が損なわれたり、以前のデータを読み取ってしまったりする可能性があります。

 例えば、「更新A」がプライマリサーバ内のドキュメントに記録された後、この更新を他の複数のノードにレプリケート(複製)する前にプライマリサーバが落ちてしまったとします。この場合、クライアントからすれば書き込みは失敗です。しかし「更新A」がセカンダリに反映され、利用可能になっている可能性もあります。クライアントには、この書き込みが成功したかどうかを確認する術はありません。このため、アプリケーション開発がより複雑になります。こういったあらゆる矛盾のチェックや解決が、開発者の責任となるためです。

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る