R&Dトレンドレポート

第2回 RDBMSとNoSQLを比べよう

この記事を読むのに必要な時間:およそ 1.5 分

NoSQLとRDBMSの比較

さて前回ご紹介したNoSQLの特色ですが,もう一度書きますと,

  • データ構造が単純である
  • リレーションがない
  • 拡張性/柔軟性が高い
  • トランザクションがない
  • 分散環境への対応が容易

ということでありました。

これらはどういうことなのか,改めてRDBMSと比較してみてみたいと思います。

データ構造とリレーション

RDBMSの場合

RDBMSはデータをテーブルという表形式に集約し,データ同士の関係性を定義することで厳格なデータモデルを表現しています。テーブルはデータモデルごとに作成され,カラムという単位で項目を分けていきます。カラムはデータ型を指定する必要があり,投入されるデータの意味を理解した上で定義しなければなりません。

また,データ同士の関連性を定義することで,論理的な整合性が担保されます。

このように厳密でありますが,同時に複雑なデータ構造を表現することが可能となります。

NoSQLの場合

データ構造はハッシュ構造や連想配列のような構造をとることが多く,いわゆるキーバリュー形式と呼ばれるキーとバリューの組み合わせでのみ表現されます。非常に単純ですね。データ型の定義などもありません。

また,データ同士の関係性も定義ができません。

図1 データ構造とリレーション

図1 データ構造とリレーション

拡張性/柔軟性

RDBMSの場合

RDBMSはデータ構造をあらかじめ定義する必要があるため,拡張性/柔軟性は低いといえます。テーブル定義の変更やカラム定義の変更などは,コストがかかる作業となります。

NoSQLの場合

データ構造を最初から定義する必要がない,そもそもバリューの中になんでも入れるということも可能です。厳密なデータ定義がありませんから自由です。自由すぎる…。

トランザクションについて

トランザクションはDBMSでのデータ処理の最小単位として使われますが,一般的にRDBMSはACIDが実装されているため,データの不整合が発生しないようになっています。

よく例として出されるのが銀行振り込みのシステムです。

【例】AさんがBさんに1万円振り込みました。結果は,Aさんの口座から1万円マイナスになって,Bさんの口座では1万円増えているのが正しいですよね?

処理は以下のようになります。

  • ① トランザクション開始
  • ② Aさんの口座から1万円マイナス
  • ③ Bさんの口座に1万円プラス
  • ④ トランザクション終了!(^^)/

図2 トランザクション処理:正常処理

図2 トランザクション処理:正常処理

ここで①と②の間でデータが見えてしまったらどうでしょう? Aさんの口座からは1万円マイナスされ,Bさんの口座にはまだ未入金の状態です。しかもここで障害が発生した場合,Aさんの口座にお金を戻してあげないと,Aさんは悲惨な目に遭ってしまいます。

RDBMSの場合

トランザクションはACIDによって処理前か処理後の状態にしかならないことを保証しています(Atomicity:原子性)⁠また,独立性(Isolation)も保証されているので,トランザクションの②と③の間は第三者から参照されることはありません。障害が発生した場合は,処理前の状態に戻されます(Durability:耐久性)⁠

ついでに書いておくと,一貫性(Consistency)は②と③の処理が逆でも結果は同じというとトランザクションの一貫性を表しています。

図3 トランザクション処理:異常処理

図3 トランザクション処理:異常処理

NoSQLの場合

トランザクションがまったくないわけではなく,製品によっては徐々に実装されつつあるようです。しかし,RDBMSのACIDように堅牢なものではなく,Eventual Consistent(最終的な一貫性)という実装となっています。

これは次の分散環境への対応につながる話ですが,多数のサーバにデータのコピーを分散させるため,ある更新がすべてのサーバに行き渡るまでの間,更新前のデータが検索できてしまうことを意味します。つまり,すべての更新が行き渡ったときに(最終的には)一貫性が保たれるということです。まさに緩やかなトランザクションですね。

分散環境への対応

RDBMSの場合

レプリケーションという機能を使うことで複数のサーバにデータの複製をすることが可能です。これは,耐障害性を向上させる強力な方法ですが,データに不整合が発生した場合やレプリケーションを追加したい場合など運用上の負荷やコストが大きくなることが想定されます。

NoSQLの場合

分散フレームワークを使用することによって簡単に対応できるようです。

分散環境への対応は

  • 耐障害性
  • 高いパフォーマンス
  • 大容量データを容易に扱える

という面において大きな効果を生み出しています。

緩やかなトランザクションのおかげで,物理的に(ネットワーク的に)近いサーバから優先的に結果を取り出すことができます。

まとめると……

このように比較をしていくと,NoSQLの特色というのは,以下のような言葉で置き換えられると思います。

  • データ構造が単純である
  • リレーションがない
  • トランザクションがない→シンプルな設計,シンプルな機能
  • 拡張性/柔軟性が高い→スケーラビリティの向上
  • 分散環境への対応→アベイラビリティの向上

RDBMSとはずいぶんと違うNoSQLですが,今後は実際に動作させてみて違いを感じたいと思います。

スキルを発明にカエル ウェブ日刊紙『てくらぼ』
URL:http://www.pasonatech.co.jp/techlab/index.jsp

ITトピックス・ライフハック・キャリアなど,エンジニアライフを充実させるためのコラム連載中!

著者プロフィール

脇本武士(わきもとたけし)

都内中小IT企業(メイサンソフト(株))に所属。某大手自動車会社でのシステム開発,運用を経て,現在は研究開発部署に席をお借りしています。DB周りの保守サポート,ウェブ技術開発を主に手がけてきました。現在は大規模計算フレームワークの活用とKVSに注目しています。普段はOS Xを使用していますが一番よく使うアプリはTerminalです(笑)。

R&Dトレンドレポート(てくらぼ)

コメント

コメントの記入