🙅‍♂️

NoSQLとは何か~主要なNoSQLとそのユースケース~

2023/07/30に公開

はじめに

データベースのデファクトスタンダードというと Oracle や MySQL を代表されるリレーショナルデータベース(RDB)です。
しかし近年では RDB では満たすことが難しい要件を達成するために様々な NoSQL が利用されています。
本記事では NoSQL について筆者が学んだことを初心者向けに解説します。

NoSQL とは

NoSQL とは『Not Only SQL』の略語と言われており、RDB 以外のデータベースを表す総称です。
総称というのはつまり NoSQL というデータベースがあるわけではなく RDB 以外のデータベースは全て NoSQL ということになります。

そもそもリレーショナルデータベースって?

この記事は初心者向けの記事になるので、NoSQL の解説の前にそもそも RDB とは何か説明したいと思います。
RDB とは現在最も広く利用されているデータベースの種類で、データを行と列からなるテーブルに格納して管理します。
RDB が優れている点としては以下のような点を挙げることができます。

  • ACID 特性によってデータの整合性と信頼性が高い
  • SQL によってテーブルを結合し複雑なデータを扱うことができる

手前味噌ですが、上記の点に関して記事を書いていますのでよければご覧ください。

https://zenn.dev/keisuke90/articles/f1bfaccaffbf5f
https://zenn.dev/keisuke90/articles/c1ed35970334fa

主な RDB としては冒頭で挙げた Oracle、MySQL 以外にも Microsoft SQL Server や PostgreSQL などが利用されています。

なぜ NoSQL が必要か

RDB は現在も主流で使われているデータベースですが、以前までと比較し扱うデータの量や形式が変わってきたことから従来の DB だけでは要件を満たすことが難しくなり NoSQL が登場しました。
NoSQL がもつ特徴としては以下のような点を挙げることができます。
(後述しますが NoSQL には様々な種類があり、全ての NoSQL に下記の特徴が当てはまるわけではなく、あくまでこういった特徴をもつ NoSQL があるという点にご注意ください)

  1. 柔軟性
    JSON や XML のような半構造化データや画像ファイルのような非構造化データを扱うことに優れています。
    例えば API のレスポンス(JSON)において、一方のレスポンスに含まれるデータがもう一方では含まれていないことがある場合においても柔軟にデータを保存することができます。

  2. スケーラビリティー
    RDB は CPU や RAM を増強する垂直方向のスケールアップが主ですが、NoSQL ではサーバーを追加するシャーディングと呼ばれる処理を行うことができます。
    シャーディングとは同じテーブルのデータを複数のデータベースに分散して保持することでスループットを向上させることができる技術です。

  3. 高速
    多くの NoSQL は RDB と比較したときに高速で処理をすることが可能で、データ量が増えたときの速度低下も抑えることが可能です。

BASE 特性

RDB が持つ特性をまとめて ACID 特性と表現するのに対して、NoSQL の特性を表す BASE 特性という言葉があります。

Basically Available

システムの一部分に故障が発生しても基本的な動作を続けることが可能である。

Soft State

常に整合性を保つことは保証しない。

Eventually Consistent

最終的には全てのデータが最新状態に更新される。

NoSQL の種類と主要な NoSQL

NoSQL データベースはその特性からいくつかのタイプに分けることができます。
ここでは NoSQL の種類と主要なデータベースについて解説します。

キーバリュー型

特徴
キーバリュー型のデータベースは key と value によるシンプルな方法でデータを格納します。
シンプルな構造のためデータへの高速なアクセスと、大規模な水平スケーリングが可能です。

ユースケース

  • 大規模 EC サイトのショッピングカート:ユーザーがカートに追加した商品を一時的に保存しておくのに使用します。高速な読み書きが求められ、またユーザーごとに異なるデータを持つ必要があります。
  • セッションストア:ユーザーのセッション情報を一時的に保存しておくのに使用します。高速な読み書きが必要であり、またセッション情報は頻繁に更新される可能性があります。

主なデータベース

  • Amazon DynamoDB
  • Redis

ドキュメント型

特徴
JSON や XML などの半構造化データを保存することが可能です。
事前にスキーマを定義する必要がなく、自由な形式で柔軟にデータを保存することができます。
ただし結合が必要な複雑な処理は苦手としています。

ユースケース

  • 動画プラットフォームのコンテンツ管理:各動画の詳細情報や視聴履歴、ユーザーの評価など、様々な形式のデータを保存する場合に利用可能です。
  • カタログ情報:商品の詳細情報、レビュー、関連商品など、様々な種類と形式のデータ管理に利用可能です。

主なデータベース

  • MongoDB
  • Couchbase

グラフ型

特徴

グラフ型データベースは、ノード(頂点)、エッジ(辺)、そしてプロパティ(属性)という三つの要素から成るデータベースです。これらの要素により、ノード間の複雑な関係性を効率良く表現できます。
RDB では、例えば「フォロワーのフォロワー」のような深く関連する情報を取得しようとすると、その関連性の深さが増すほどパフォーマンスが顕著に低下します。しかし、グラフ型データベースでは、そのような深い関連性を持つ情報も効率的に取得できるため、パフォーマンスの低下を最小限に抑えつつ結果を返すことが可能です。

ユースケース

  • 不正検出:不正行為や詐欺行為の検出に役立ちます。ユーザー間の関係性やパターンを解析し、異常な動きを検出します。
  • SNS のユーザー関係性:ユーザー間の関係性を効率的に表現し、友人の推薦などに活用します。

主なデータベース

  • Neo4j

検索エンジン

特徴

最後に紹介するのは検索エンジンです。
大量のデータをインデックス化して、検索クエリを高速に実行できるように設計されています。

ユースケース

  • 全文検索:膨大な量のテキストデータから特定のキーワードやフレーズを素早く見つけ出すことが可能です。
  • ログ分析:ログデータを分析し、システムのパフォーマンスをモニターしたり、異常を検出したりするために使用されます。

主なデータベース

  • Elasticsearch
  • Splunk

さいごに

本記事では主要な NoSQL を紹介しましたが、以下のサイトではデータベースが人気順にランキングにまとめられています。

https://db-engines.com/en/ranking

最後まで読んでいただきありがとうございました。
少しでも参考になれば幸いです。

Discussion