RDBとNoSQLのデータ書き込み法の違いRDB開発者におくるNoSQLの常識(5)(3/3 ページ)

» 2011年06月23日 00時00分 公開
[渡辺俊史株式会社システムインテグレータ]
前のページへ 1|2|3       

どうしてもNoSQLが向かない用途もある

 排他制御やトランザクションの仕組みに頼らずNoSQLデータベースのデータを更新する方法を紹介してきました。NoSQLデータベースの更新処理で一貫性を確保するには、競合の発生する更新や削除を避け、データの追加と非同期処理をうまく使うことがポイントになります。

 しかしこの方法はRDBMSの更新処理を完全に置き換えるものではありません。NoSQLデータベースの更新処理は、RDBMSでは当たり前だった即時一貫性を犠牲にしていることを忘れないでください。トランザクション処理を単一のINSERTで登録し、実際の更新や削除を非同期処理で済ませるということは、言い換えれば「問題の先送り」に過ぎません。更新処理の種類によっては、こうした先送りが許されないケースもあります。

 例えば、ショッピングサイトでは注文のリクエストを受け付けたときに在庫を確認し、引き当てます。在庫の数は注文が来るたびに減っていき、ゼロになった時点で「売り切れ」になります。注文に対して残り在庫数が十分かどうかを確認するには、常に正確な在庫数を把握しなければなりません。

 このように、単一のリソースを複数のプロセスで奪い合って更新するようなケース、最新の更新結果を次の更新処理ですぐに使うようなケースでは、BASEトランザクションを使うとどうしてもできてしまう「グレーゾーン」の時間は許されません。データに強い一貫性を求める場合や、更新や削除の頻度が高いシステムでは無理にNoSQLデータベースを使わず、これまで通りRDBMSを使う方が賢明です。

 もともとNoSQLデータベースはBtoC向けWebサービスなど参照中心のアーキテクチャを実現するためのデータベース、という性格を持っています。さらに、データの更新もユーザー1人1人の日記やレビューなどを新しく投稿する「追加」型の更新処理が中心で、複数人で1つのデータを集中的に更新するような利用シナリオはあまり多くありませんでした。こう考えると、データの読み取りや追加に強く、パフォーマンス低下要因になりうる更新や削除をなるべく減らして最適化するというNoSQLデータベースの考え方が非常にマッチしているといえるでしょう。

まとめ

 今回は、NoSQLデータベースにおける更新処理の考え方を解説しました。NoSQLデータベースはスケーラビリティを向上させるため、RDBMSのように厳密なトランザクション管理や排他制御の仕組みを持ちません。NoSQLデータベースでは、データの追加と非同期処理を組み合わせて更新を組み立てることで、データの不整合を最小限に抑えることができます。

 しかし、NoSQLデータベースの更新処理はRDBMSのそれを完全に置き換えうるものではありません。即時一貫性を求められる更新処理には、これまで通りRDBMSを使ってください。

 本連載は「RDB開発者におくるNoSQLの常識」と題して、主にRDBMSを使ってシステムを開発しているエンジニアに向けて「NoSQLデータベースとは何か、RDBMSと比べたときの違いは何か」という側面からデータ構造の設計や読み書きアクセスの方法について解説してきました。

 NoSQLデータベースは、うまく使えれば非常に大きなスケーラビリティを発揮させることができます。しかし、参照には強いが更新に弱いという一面もあり、決して万能な選択肢ではありません。また、今のところはBtoC向けWebサービスなど一部分野での導入が始まったところで、データの厳密な一貫性を重視するエンタープライズ系のシステムでは導入に慎重なところが多そうです。

 一方で、RDBMSも今なお発展を続けています。一部のRDBMSではすでにNoSQLデータベースの成果を取り入れる試みも始まっています。どちらのデータベースにもそれぞれ長所、短所があり、それぞれ適材適所で使い分けていくことが大切です。本連載がNoSQLデータベースを理解する上の一助になれば幸いです。

著者紹介

株式会社システムインテグレータ

渡辺俊史

製品企画本部 製品開発グループ


 

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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