【NoSQL 予備知識】NoSQLってなに?
「NoSQL」は"Non-relational" または "Not Only SQL" の略で、リレーショナルデータベース(RDB)とは異なるアプローチでデータを管理するデータベースの総称です。
「データベースって何がいいの?」、「NoSQLって聞いたことあるけど、具体的に何?」――こんな疑問、持ったことありませんか?今日は、そんな疑問にお答えします。
エンジニア、非エンジニアである私たちは、日常的に多くのデータに触れています。オンラインショッピングでの購入履歴、SNSでのやり取り、スマホのアプリで生成されるデータなど、その範囲はとーっても広い。
そんな多種多様なデータを効率よく、そして柔軟に扱うためにSQLやNoSQLは生まれました。
NoSQLって何?
「NoSQL」は"Non-relational" または “Not Only SQL” の略で、リレーショナルデータベース(RDB)とは異なるアプローチでデータを管理するデータベースの総称です。いいイメージとしては、RDBがExcelのようにテーブルでデータを整理するなら、NoSQLはもっと自由な形、例えばメモ帳のような感じです。
ちなみに、NoSQLは「SQLを使わない」というわけではありません。名前に反して、多くのNoSQLデータベースもSQLに似たクエリ言語を使っています。(誤解なきように)
データモデル
NoSQLの一番の魅力は、データモデルの多様性です。具体的には、以下のような種類があります。
- キーバリュー型:超シンプル、キーと値のペアでデータを管理
- カラム指向型:カラム(列)単位でデータを扱う、集計処理が得意
- ドキュメント指向型:JSONやXMLのようなドキュメントでデータを管理
- グラフ指向型:ノードとエッジで構成される、関係性が重要なデータを扱う
これらの多様性が、NoSQLがさまざまな用途で使える大きな理由です。
高速&スケーラブル
NoSQLデータベースは、大量のデータや高負荷な状況でも、効率的にデータを処理できるよう設計されています。特に「スケールアウト」が容易で、新しいサーバを追加するだけで性能を向上させられます。
ユースケース
以前RDBについては触れました。では、NoSQLの活躍する場は??
どんな場面に向いているのか、ユースケースや仕組みも知っておきましょう。
大量データの処理
ビッグデータやリアルタイムアナリティクスなど、大量のデータを高速で処理する必要がある場合、NoSQLが非常に役立ちます。RDBよりも高速にスケールすることができるので、データ量が増えてもパフォーマンスが維持できるのが強みです。
非構造化データや半構造化データ
画像、音声、JSON、XMLなど、非構造化データや半構造化データを多く扱う場合は、NoSQLが適しています。RDBではこのようなデータの扱いが不得意な場合が多いので、NoSQLが有用です。
柔軟な開発が必要な場合
新しい機能を迅速に追加したい、またはデータスキーマを頻繁に変更するような開発フローでは、NoSQLが役立つことが多いです。スキーマレスなので、新しい「列」や「属性」を気軽に追加できます。
高い可用性と耐障害性が求められる場合
NoSQLデータベースは分散型で設計されているものが多く、障害が起きた場合でもすぐに回復する仕組みがあります。これは、24/7稼働する必要があるサービスやアプリケーションにとっては非常に重要なポイントです。
代表的なNoSQLデータベース
以下に、現在よく用いられているNoSQLデータベースをざっくりと羅列しますが、勢いのある領域なので、現時点
でトレンドとは限りません。
Firestore
FirestoreはGoogle Cloud Platform(GCP)によって提供されるドキュメント指向のNoSQLデータベースです。リアルタイムでのデータ同期が強力な特長で、モバイルアプリやWebアプリにおいてリアルタイムのデータ反映が必要な場合によく用いられます。
- 活用例: モバイルアプリ, Webアプリ, リアルタイムアプリケーション
- 特徴: リアルタイム同期, サーバーレス
MongoDB
MongoDBは、おそらく最もポピュラーなドキュメント指向のNoSQLデータベースです。JSON形式でデータを保存し、非常に柔軟なクエリが可能です。特にWebアプリ開発でよく用いられます。
- 活用例: Webサービス, ビッグデータ, IoT
- 特徴: 高い柔軟性, スケーラビリティ
Redis
Redisはキーバリュー型のデータモデルを採用しており、メモリ内で動作するため非常に高速です。主にキャッシング、セッション管理、リアルタイムの大量データ処理に使用されます。
- 活用例: キャッシング, メッセージキュー
- 特徴: 高速, メモリ内処理
Cassandra
Cassandraはカラム指向のデータモデルを持つNoSQLで、特に大量のデータを高速に書き込む必要がある場合に適しています。Facebookが開発をリードしており、SNSやストリーミングサービスでよく用いられます。
- 活用例: SNS, ストリーミングデータ
- 特徴: 高い書き込み速度, 分散処理
Neo4j
Neo4jはグラフ指向のNoSQLデータベースで、複雑な関係性を持つデータの管理に優れています。SNSの友達関係や、製品間の関係性など、ノードとエッジで関係性を表現します。
- 活用例: SNS, レコメンデーションエンジン
- 特徴: 高度な関係性表現, クエリ柔軟性
まとめ
つらつらと説明しましたが
基本的に、NoSQLはたくさんのデータをすごく速く扱えるのが強みです。特に、大量のデータがある場合や、すぐにシステムを大きくしたい場合には、NoSQLが役立つんです。(改修が大変になる場合もありますが)
この点を考慮して、MongoDBやRedis、Firestoreなど、どのNoSQLデータベースが自分のプロジェクトに一番合うかを選ぶといいでしょう。
どのデータベースもそれぞれいいところがあるので、プロジェクトのニーズに最も合ったものを選んでくださいね。