NoSQL と RDBMS
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