🌐

NoSQL と RDBMS

2024/07/01に公開

NoSQLと RDBMSの選び方と使い道

NoSQL と RDBMS がどう違うのかについて説明します。
本業の業務では MySQLを使用してきましたが、個人開発の SNSアプリ開発で NoSQL のredisとfirestoreを使用する機会があったため、ここらで2つの特徴について整理していきたいと思います。

ちなみに NoSQLとは「Nosql」は「Not Only SQL」を意味します。
最初にみたとき、 SQL でない って意味だと思い ????? となっていたのが懐かしいです。

NoSQL

Document Database

JSON、BSON、XMLなどの形式でドキュメントを保存

☆ スキーマレスで柔軟性が高い。データ構造が頻繁に変わるアプリに相性がいい。

Graph Database

ノードとエッジを用いてデータを表現。ノードはエンティティ(人物、場所、ものなど)を、エッジはエンティティ間の関係を表す。

☆ 複雑なネットワーク解析に強い。

Wide Column Store

列指向のストレージシステム。テーブル、行、列で構成されるが、各行は異なる列を持つことができる。

☆ 水平スケーリング(複数のサーバーにデータベースの負荷を分散させる方法)が用意で、大量のデータに向く。

Key-Value Store

シンプルなキーと値のペアでデータを保存。値は任意のデータ型(文字列、数値、バイナリなど)を取ることができる。

☆高速な読み書きが可能で、キャッシュやセッション管理に最適。

RDBMS

リレーショナル・データベースの略です。日本語では「関係データベース」と訳されます。複数の表で管理されたデータ同士を関連づけることで、複雑な処理を実現するデータベースのことです。

  • 定義
    スキーマ(DBの設計図のようなもの)を定義する

  • 操作
    SQL をもちいてデータを操作する

  • 制御
    ユーザーによる操作の裏で、データの安全性や信頼性を維持するのもデータ管理システムの役割です。次のような機能が制御の機能として分類される。

・排他制御:データを同時編集する際に矛盾が生じないように調整する

・機密保護:不正アクセスからデータを守る

・障害回復:データベースの障害が起こった際に復旧を行う

RDBMSの種類

MySQLやPostgresSQL などさまざまな種類がありますが、何がいいのか迷います。そのときに
ITreview Gridを使うといいでしょう。

上記のサイトより、RDBの比較に行きましょう。

認知度は PostgresSqlがかなり高いですね!
規模によって、使われているDBが変わっていくのも面白いです。

NoSQLと RDBMSの比較

使い時

NoSQL

NoSQLは、より柔軟なデータ管理を提供します。大量のデータや非構造化データの処理に適しています。

  • ビッグデータの処理
    水平方向にスケールアウトでき、増加するデータ量に対応可能。
    例: ソーシャルメディア分析、IoTプラットフォーム。

  • 非構造化データ
    行や列に収まらないデータ (マルチメディアファイル、JSONドキュメント) を処理可能。
    例: センサーデータの保存と取得。

  • 急速な成長:
    データベースクラスターにサーバーやノードを追加することでシームレスにスケーリング。
    例: eコマースプラットフォーム、オンラインゲーム。

RDBMS

  • データが整理され、明確な構造に従っている場合に最適。
    例: 顧客情報 (名前、住所、電話番号)。

  • 高い信頼性が必要な場合
    ACID特性 (原子性、一貫性、独立性、永続性) により、データの正確性と一貫性を確保。
    例: 銀行システム、在庫管理。

  • 複雑なクエリ
    複数のテーブルからデータを取得、操作、分析する強力なSQLクエリをサポート。
    例: 特定の製品を購入した顧客の検索、地域ごとの売上計算。

機能の比較

スキーマの柔軟性

RDBMS: 事前定義されたスキーマが必要。
NoSQL: スキーマレスで柔軟性が高い。

スケーラビリティ

RDBMS: 垂直方向のスケーリングが一般的。
NoSQL: 水平方向のスケーリングが容易。

クエリ言語:

RDBMS: SQLを使用。
NoSQL: データベースごとに異なるクエリ言語 (例: MongoDBのクエリ言語)。

一貫性とトランザクション

RDBMS: ACIDトランザクションをサポート。
NoSQL: 結果的一貫性を重視 (例: 最終的に一貫性が確保される)。

データ構造と複雑さ

RDBMS: 複雑な関係とトランザクションが必要な場合。
NoSQL: 半構造化データやリアルタイム分析が必要な場合。

スケーラビリティ要件:

RDBMS: 小規模なアプリケーションや予測可能なワークロードに適している場合。
NoSQL: シームレスな水平スケーリングが必要な場合。

パフォーマンスと速度:

NoSQL: 大量のデータ処理やリアルタイム分析に最適。
RDBMS: 構造化データセットに対する複雑なクエリやトランザクションに最適。

結論

NoSQLとRDBMSは感覚的には、カジュアルさによる違いがありそうですね!
RDBMSは結構お堅いイメージといえるでしょう。
NoSQLは変更にも耐えやすいのでカジュアルなDBです(感覚)。

仕様書などでテーブル構成が決まってトランザクションをいれていく場合は RDBMS一択でしょう。
ですが個人開発などでリリースまでとりあえず行きたいみたいなときは、firestoreでガンガン行くって感じでつかっていこうとおもってます。

ユーザー数が増えてきたりすると RDBMS に移行計画などもでてきそうですね!

Discussion