NoSQLは「一貫性あるトランザクションを実現できない」という誤解:NoSQLベストプラクティス(7)(1/3 ページ)
本連載では、「NoSQLデータベースの今」を正しく理解し、ビジネス躍進の実現に向けた対策としての「ベストプラクティス」を掲示していきます。今回は、「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.
関連記事
- NoSQLはRDBMSに取って代わるものなのか?
「memcached」や「Apache Cassandra」、「Apache CouchDB」など、RDBMSとは異なる考えで設計してあるデータベース管理システムが普及しつつあります。この連載では、これら新しいデータベース管理システムの特徴と、RDBMSとの使い分け方について解説します。(編集部) - KVS系NoSQLのまとめ(Hibari、Dynamo、Voldemort、Riak編)
エンジニアとして「知らない」とは言えない空気が漂うNoSQL界隈……。いろいろあるけども何がどう違うのか、主要プロダクトの特徴をコッソリ自習しよう。第1回はKVS系NoSQLの中から、マスタ型、P2P型に分類されるものを紹介していく。 - 「演算子のインジェクション」と「SSJI」
ここ数年、大量データ処理時の高速性やデータ構造の柔軟性などから、「NoSQL」が注目を集めています。それと同時に、NoSQLを使うアプリケーションに対する攻撃手法も研究されるようになりました。この記事では、NoSQLを使ったアプリケーションの脆弱性と対策について解説します。 - マークロジック、NoSQLデータベース「MarkLogic 9」正式版をリリース
マークロジックが、NoSQLデータベースプラットフォームの最新版「MarkLogic 9」をリリース。開発者向けの「無償エディション」も用意する。