NoSQLでの開発
NoSQLの開発手法はRDBのそれとは根本から違います。今までのようにRDBの考え方で開発をすると痛い目にあいます。特に開発手法、データモデリングについては、考え方がメインフレームから正規化モデルの際に大きく変わったように考え方を大きくリセットする必要があります。
RDBですと、正規化して論理モデル、物理モデルを設計してから、アプリケーションを開発していましたが、NoSQLの場合はその必要がありません。一般的にはそのまま非正規化でデータを取り扱うことが可能なので、何も考えずにデータを入れればよいと考えられがちですが、もちろんデータは簡単に入りますが、その取り扱いにはやはり、最初にデータモデルをしっかりと考えておくことは重要です。開発の際には、そのアプリケーションでどのようにデータを扱うのかをしっかりと考えて、アプリケーションの開発と同時にデータベースも設計することが必要です。
一概に括ってしまうと誤解を招きかねますが、開発手法からいくと、ウォータフォール型開発でしっかりと設計をしながら実施していくRDBMS、アプリケーションの開発とデータベースの開発が同時に進行し、データモデルがどんどん追加されていくアジャイル型開発がNoSQLデータマネジメントシステムと言えると思います。
今の時代、数カ月後には新しいサービスが必要になっている時代です。今までの固定観念ではなく新たな変化にも柔軟に対応できるデータベース、それがNoSQLなのです。
NoSQL | RDB | |
---|---|---|
スキーマ定義 | スキーマレス | 定義する |
言語 | 製品ごとに違う | SQL |
データモデル | 製品ごとに違う | リレーショナル |
可用性 | 基本はレプリケーション | 基本はフェイルオーバー |
拡張性 | スケールアウト | スケールアップ |
リニアスケール | 簡単 | 難しい |
一貫性-トランザクション | BASE | ACID |
大量データ処理のコスト | 安価 | 高価 |
整合性 | 結果整合性 | 常に保持 |
アプリケーション開発手法 | アプリケーションとデータベースを同時設計 | リレーショナルデータモデルを設計し、その上でアプリケーションを設計 |
開発 | アジャイル型 | ウォーターフォール型 |
NoSQLはどこで使う?
それではどんなアプリケーションがNoSQLには向いているでしょうか?
まずは、一番フィットするのは、IoTや“機械間通信(Machine To Machine:M2M)”のデータです。これらのシステムの場合、各ネットワークにつながっているデバイスから出てくるデータはリレーショナルなデータ、正規化されたものではありません。
例えばセンサデータ、ゲームのログ、ウェブのログといったものは、一つのレコードとしてデータは出てくるものであっても、そのデータ間でのリレーションを考えてデバイスがデータを作成するものではありません。特にさまざまな違うデバイスからデータが集める場合、メーカーや販売時期の違うデータから、リレーショナルなデータが出てくることはないでしょう。
従来のやり方だとデータクレジングを駆使して無理やりRDBに押し込んでいくことになってしまいます。それでも新たなモノが出てくる度にそれに対応しなくてはいけない、という状況になってしまいます。こういった場合スキーマレスなNoSQLが最も適しているでしょう。
もう一つが、コンテンツが中心、データが中心となるアプリケーションです。オンラインゲームの開発を想像してみてください。日々ユーザーがオンラインゲームを楽しんでいる裏で、開発者は日々新しい機能をオンラインゲームに常に追加することを考えています。それは例えば新たな機能やサービス、ステージの追加であったりします。これらの新機能が「既存のデータモデルに合致しないために提供できません」または「長期間の開発と開発費が高騰します」というのは今の時代は許されません。こういった場合もNoSQLを検討すべきです。
データベースありきで作っていたようなアプリケーションではなく、アプリケーションファーストで作っていくときに、データはさまざまなフォーマット、違うカラム数、違う長さを持ちます。そういったデータを取り扱えるのがNoSQLでの大きな特徴です。