⚖️

【超ザックリ解説】SQL VS NoSQL

2022/11/22に公開

はじめに

今回の記事では、SQLとNoSQLの両者の違いを簡潔に解説する。

SQL VS NoSQL

MongoDBの公式ブログによると、SQLとNoSQLのそれぞれの特徴は以下のようにまとめられている。(一部改変)

SQL NoSQL
ストレージ管理 テーブル形式で管理する(Excelのようなイメージ) ドキュメント指向型(JSON)、キーバリュー型、グラフ型など
背景 1970年にデータの重複を減らすために開発された 2000年代後半に開発され、アジャイル[1]やDevOps[2]で推進されるアプリケーションの迅速な変更を可能にする拡張性に焦点を当てている
主な例 Oracle, MySQL, SQLite, PostgreSQL, Microsoft SQL Server, MariaDB MongoDB, Redis, Neo4j, DynamoDB, Cassandra
用途 多岐に渡る 多岐に渡る。ただし、Neo4jのような関連付けられているデータ間の関係を分析するときに利用される。
スキーマ[3] 予め固定されているので、急なデータベースの変更に弱い 自由自在に変更できるので、小回りがきく
スケーリング[4] 垂直方向 水平方向
ACIDトランザクション[5] 対応 原則非対応。ただし、MongoDBは対応している。
ORM[6] 必要 原則不要。MongoDBの場合、ほととんどのプログラミング言語のデータ構造に直接マッピングされる。
学習のしやすさ 日本企業で最も採用されているので、日本語の技術書や学習サイトが豊富 日本語の情報こそ少ないものの、MongoDBの場合は公式ドキュメントが非常に充実しているので初心者でも十分に学びやすい

おわりに:データベースの選択はトレードオフ

今回の記事では、SQLとNoSQLの違いを簡潔に解説した。本記事がデータベースの技術選定をする際に少しでも参考になれば非常に幸いだ。

何度もいうが、技術選択はトレードオフであるすべての技術に絶対的な優劣はないので、自分の開発したいアプリケーションや得意な分野等に応じて適宜選択することが非常に重要だ

周囲の意見に流されず、自分の開発したいアプリケーションに最適な技術を選択することが最も妥当であると言えよう。

余談

NoSQLについて興味はあるものの、最初にどこから勉強すればいいのかわからないなら真っ先にMongoDBを推奨する。最大の理由は公式ドキュメントが充実しているからだ。何度もいうが、MongoDBは本当に面白い。

データベースに関連する分野は専門用語が乱立しており、一部理解に苦しむ場面が少なくない。学習・開発でわからない言葉や概念があったらその都度Google検索で調べることを徹底しておこう

参考文献・サイト一覧

https://www.oreilly.co.jp/books/9784814400065/

https://www.educba.com/mongodb-nosql/

https://www.mongodb.com/nosql-explained/nosql-vs-sql

https://www.opc-router.com/what-is-mongodb/

脚注
  1. アジャイル開発とは、ソフトウェアを迅速に、また、状況の変化に柔軟に対応できるように開発する手法の総称。 ↩︎

  2. DevOpsとは、ソフトウェアの開発担当と導入・運用担当が密接に協力する体制を構築し、ソフトウェアの導入や更新を迅速に進めること。“Development”(開発)と“Operations”(運用)の略語を組み合わせた造語。 ↩︎

  3. スキーマ(schema)とは、データベースの構造そのもの。データベースでサポートされている言語で記述される。 ↩︎

  4. スケーリング(scaling)とは、(規模などの)増減、(面積などの)拡大縮小、などの意味を持つ英単語。IT分野におけるスケーリングの意味は、装置やソフトウェア、システムなどの性能や処理能力を要求される処理量に応じて増強したり縮減したりすることを意味する。 ↩︎

  5. ACID特性とは、関連する複数の処理を一つの単位として管理するトランザクション処理に求められる4つの特性 “Atomicity”(原子性)、“Consistency” (一貫性)、“Isolation”(独立性)、“Durability”(耐久性)の頭文字をつなぎ合わせたもの。 ↩︎

  6. ORM(Object/RDB Mapping)とは、オブジェクト指向プログラミング言語におけるオブジェクトとリレーショナルデータベース(RDB)の間でデータ形式の相互変換を行うこと。そのための機能やソフトウェアを「O/Rマッパー」という。 ↩︎

GitHubで編集を提案

Discussion