NoSQLについて。
現在の案件ではmongoDB(NoSQL)を使っていますが、NoSQL自体が始めてだったので、これを機に少し掘り下げてみようとおもいます。
NoSQLとは?
NotOnlySQLの略のようです。
私はRedisぐらいしかしらなかったんですよね・・てっきりキャッシュで使うようなものばっかりだと思っていたんですが、今の案件ではRDBの代わりにがっつり使ってます。
NoSQLのタイプ分け
Redisのようなキーバリュー系以外にもドキュメント指向データベースというものがあるようです。
用途を分けると・・・
キーバリューストア
基本的にはkeyValue形式になっているデータの一時保存の高速な取り出しとして使われることが多いようです。
セッション管理、キャッシュ、リアルタイムデータの取り扱いなどですかね・・・
ドキュメント指向データベース
今回やっているmongoがこのケースです。先ほどのキーバリューだと補佐的な働き方になるかと思いますが、
メリット
- ユニークキーはあるものの、スキーマが固定されておらず、フィールドの変更が容易
- 上記のような特徴からJSONのような木構造のデータをそのまま保持できる
- 拡張性が容易でデータ量の増加に強い
- リアルタイム処理が得意
- レプリケーション機能があるため、障害耐性が強い(データの同期が容易)
- RDBより安い
などが挙げられます。
逆に、以下のようなデメリットがあります。
デメリット
- トランザクションができないため(=一部の機能?)、複数のテーブルを更新して整合性を担保することはできない
- JOINの代わりになるlookupという機能はあるが、複雑なJOINなどができない
全体的にデータの整合性よりは高速なレスポンスや耐久性に強いシステム向けなようです。
向いている例としては、
- リアルタイムにパラメータが変わるため高速な書き込みとクエリレスポンスなどが要求されるゲーム
- ログ操作
- モバイル系のアプリケーション
- 地理空間データのような複雑なデータ
などがあげられるようです。
逆に
- 金融系など取引などで複数テーブルの整合性が非常に大事なシステム
- 正規化や複雑なクエリ(主にJOIN)を多用するようなシステム
- 厳格なスキーマ要件のあるシステム(カラムのフォーマットなどが厳密なもの)
などは向いていないため、RDBのほうが適しているようです。
参考リンク
MongoDB: ドキュメント指向型NoSQLの魅力を解説する記事
データ構造など
下記リンクがあまりにもわかりやすく綺麗にまとまっていたのでリスペクトの意味もこめて載せておきます。