Amazon Web ServiceのDynamoDBは、NoSQLデータベースとして知られています。
私は、このNoSQL(DynamoDB)が気に入っています。その理由は、テーブル定義をシンプルに出来る事と利用する際に分かりやすい点です。
■テーブル定義をシンプルにできる点について
MySQLなどリレーショナルデータベース(RDB)は、キーによって各テーブルがリレーションされており、情報を属性ごとに分散してテーブル化し、必要に応じてリレーションして利用するというものです。概念的には分かりやすい仕組みと言えます。一方、この仕組みは、テーブルを必要以上に分散させたり、情報の定義を間違えてしまうと、最終的に複雑なテーブル構成となってしまう課題もあると思います。(経験談)
一方、DynamoDBでは、テーブルの分散を少なくし、オブジェクト的な考えでテーブルを定義していきます。通常利用するときにはオブジェクトを意識して利用することとなり、分かりやすくなります。つまり、テーブル定義がシンプルになります。これは、アジャイル開発において親和性が高いと感じています。オブジェクトの拡張が行いやすいです。おてがるITさぽーと(おてさぽ)のシステム開発において助かりました。
一般的なメリット・デメリットは、他のサイトにお任せするとしまして、私自身の使ってみた意見として記載します。
■NoSQLのメリット
・なによりもJSON形式が扱いやすい
JavaScriptやPythonでプログラミングをする際に、JSON形式で扱える事は分かりやすいと感じています。取り扱いが楽だと感じています。プログラム上で、オブジェクトを意識してデータを扱うのですが、そのままテーブルに保存するといった感じになるため、とっても扱いやすいです。
・アジャイル開発・イテレーション開発に向いている
アジャイル開発・イテレーション開発では、オブジェクトを拡張させていくというケースが多いと考えています。オブジェクトの拡張では属性の追加をすることが多く、テーブルも情報を追加するだけで良いことになります。この拡張のしやすさは楽です。
■NoSQLのデメリット
NoSQLは良いことばかりではありません。少し手の込んだことをやろうとするとできないことも多くあります。一工夫が必要になります。
・属性全体・情報全体という形式での利用が難しい
RDBに比べ検索の機能そのものは弱いため、高度な検索機能を作り込むことができません。高度な検索を行う場合は、検索用のカラムを設けるなどの工夫が必要です。それにも限界がありますので、高度な検索では、検索用の仕組みを考える必要があると考えています。
・検索キーが必須
データを効率よく(正しく)取得するためには、検索キーが必須となります。全体から取得することも可能ですが、新着順といった形で全体からのリストを抽出するためには一工夫必要です。
・取得できるデータ量に制限がある
取得するデータ量に制限があり、大量の情報を取得する場合にも工夫が必要になります。
以上です。
AWSでのサーバーレス開発にご興味がございましたら、ご相談ください。
(本記事にたいする質問やお問合せ・IT改善のご相談はこちら)