【NoSQL 予備知識】NoSQLってなに?

「NoSQL」は"Non-relational" または "Not Only SQL" の略で、リレーショナルデータベース(RDB)とは異なるアプローチでデータを管理するデータベースの総称です。

2023年11月18日
関連記事

「データベースって何がいいの?」、「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データベースが自分のプロジェクトに一番合うかを選ぶといいでしょう。

どのデータベースもそれぞれいいところがあるので、プロジェクトのニーズに最も合ったものを選んでくださいね。

筆者情報
IT業界経験6年目のフルスタックエンジニア。
フロントエンドを軸として技術を研鑽中でございます。