MongoDB World is back in NYC June 7 - 9!MongoDB World is back in NYC June 7 - 9!

NoSQL とは

NoSQL クラスタを無料で起動する
Atlas で NoSQL データベースを試す
NoSQL とは

NoSQL(別名「not only SQL」)は、リレーショナルテーブルとは異なる方法でデータを保存するデータベースの一種です。NoSQL データベースには、データモデルに基づいたさまざまな種類があります。主なものには、ドキュメント型、キーバリュー型、ワイドカラム型、グラフ型があります。これらのデータベースは、柔軟なスキーマを持ち、膨大な量のビッグデータや高いユーザー負荷にも対応できる優れたスケーラビリティを提供します。

この記事では、NoSQL データベースの基本、NoSQL を使用する理由や適したユースケース、導入方法についてわかりやすく説明します。

目次
NoSQL データベースとは

「NoSQL データベース」という用語は、一般的に非リレーショナルデータベース全般を意味する際に使用されます。この「NoSQL」という言葉については、「Non-SQL(SQLではない)」を意味するという説と、「Not Only SQL(SQL だけではない)」を意味するという説があります。いずれにしても、多くの人が NoSQL データベースはデータを自然で柔軟な方法で保存できると認識しています。NoSQL は SQL とは異なり、デー タベース管理のアプローチ全体であり、一方 SQL は NoSQL のクエリ言語と同様に、単なるクエリ言語です。

NoSQL データベースのタイプ

時間の経過とともに、NoSQL データベースには 4 つの主要なタイプが登場しました。ドキュメントデータベース、キーバリューデータベース、ワイドカラムストア、グラフデータベースです。現在では、マルチモデルデータベースも広く普及しています。

ドキュメント指向データベース

ドキュメント指向データベースは、JSON(JavaScript Object Notation)オブジェクトに似たドキュメントにデータを格納します。各ドキュメントには、フィールドと値のペアが含まれます。値は通常、文字列、数値、ブーリアン、配列、あるいは他のオブジェクトなど、さまざまな型にできます。ドキュメントデータベースは柔軟なデータモデルを提供し、半構造化されたデータセットや、一般的に構造化されていないデータセットに適しています。また、ネスト構造をサポートしているため、複雑な関係や階層データを簡単に表現できます。

ドキュメントデータベースの例としては、MongoDB や Couchbase があります。典型的なドキュメントは以下のようになります。

キーバリューデータベース

キーバリューストアは、各項目にキーと値が含まれる、より単純なタイプのデータベースです各キーは一意であり、単一の値に関連付けられます。キャッシュとセッション管理に使用され、メモリに保存する傾向があるため、読み取りと書き込みで高いパフォーマンスを提供します。例としては、Amazon DynamoDB や Redis があります。キーバリューデータベースに格納されたデータの簡単なビューを以下に示します。

ワイドカラム ストア

ワイドカラムストアは、テーブル、行、ダイナミックカラムにデータを格納します。データはテーブルに格納されます。しかし、従来の SQL データベースとは異なり、ワイドカラムストアは柔軟性があり、異なる行が異なるカラムセットを持つことができます。このようなデータベースでは、カラム圧縮技術を採用することで、ストレージ容量を削減し、パフォーマンスを向上させることができます。行やカラムの幅が広いため、疎なデータや幅の広いデータを効率的に検索できます。ワイドカラムストアの例としては、Apache Cassandra や Hbase があります。ワイドカラムにデータが格納される典型的な例を以下に示します。

nameidemaildobcity
Foo bar12345foo@bar.comSome city
Carn Yale34521bar@foo.com12-05-1972

グラフデータベース

グラフデータベースは、ノードとエッジの形式でデータを格納します。グラフデータベースは、ノードとエッジの形式でデータを格納します。ノードは通常、人、場所、物(名詞など)に関する情報を格納し、エッジはノード間の関係に関する情報を格納します。グラフデータベースは、関係やパターンが当初はあまり明らかでないような、高度に接続されたデータに適しています。グラフデータベースの例としては、Neo4J や Amazon Neptune があります。MongoDB も、集約パイプラインの $graphLookup ステージを使ってグラフをトラバーサルする機能を提供しています。以下はデータの格納方法の例です。

グラフデータベースの例
マルチモデルデータベース

マルチモデルデータベースは複数のタイプの NoSQL データモデルをサポートしており、開発者はアプリケーションの要件に応じて選択できます。これらのデータベースは、データベースインスタンス内で複数のデータモデルを扱うことができる統合データベースエンジンを備えています。CosmosDB や ArangoDB などがその例です。

NoSQL データベースのタイプの簡単な比較

NoSQL データベースはそれぞれ異なる特徴を備えています。例えば、グラフデータベースは、エンティティ間の複雑な関係やパターンを分析するのに適している一方で、ドキュメントデータベースは、大量の同種データをドキュメントとして柔軟、自然に保存・検索する方法を提供します。データベースの選択は、開発したいユースケースによって異なります。

NoSQL データベースの種類の比較

データベースの種類について詳しくは、NoSQL データベースのさまざまなタイプをお読みください。

NoSQL データベースの歴史

NoSQL データベースは、ストレージのコストが劇的に低下した 2000 年代後半に登場しました。それ以前のように、データの重複を避けるために複雑で管理が困難なデータモデルを作成する必要がなくなりました。NoSQL データベースは、開発者の生産性を最大化するよう最適化されています。

ストレージコストが急速に低下する一方で、アプリケーションが保存・クエリするデータ量は増加の一途をたどりました。このデータには、構造化、半構造化、非構造化など、あらゆる形やサイズがあり、事前にスキーマを定義することがほぼ不可能になりました。NoSQL データベースは、膨大な量の非構造化データを保存できるため、開発者に大きな柔軟性を提供します。
NoSQL データベースの簡単な歴史

2000 年代初頭、Google が発表したワイドカラムデータベース BigTable に関する論文は、分散ストレージシステムの幅広い可能性が探求されました。2009 年には、MongoDB と CouchDB という 2 つの主要なドキュメント指向データベースが登場し、NoSQL データベースが大きく台頭しました。

2010 年代になると、さまざまなタイプの NoSQL データベースが登場し、データ駆動型のビジネスが増えるなかで NoSQL の受け入れが広がりました。

さらに、アジャイル宣言が普及し、ソフトウェアエンジニアはソフトウェア開発の方法を再考するようになりました。エンジニアは、急速に変化する要件に適応し、迅速にイテレーションを行い、データベースを含むソフトウェアスタック全体にわたって変更を加える必要がありました。NoSQL データベースは、この柔軟性を提供しました。

さらに、クラウドコンピューティングの普及により、開発者はアプリケーションやデータのホスティングにパブリッククラウドを使い始めました。開発者は、アプリケーションの耐障害性を高めるために、複数のサーバーや地域にデータを分散し、スケールアップする代わりにスケールアウトし、データをインテリジェントに地理的に配置する機能を求めていました。MongoDB Atlas のような NoSQL データベースは、これらの機能を提供しています。

デジタル化の急速な進展に伴い、企業は可能な限り多くの非構造化データを収集するようになりました。このようなビッグデータからリアルタイムの実用的なインサイト を分析し活用するためには、単なるデータの保存を超えた、モダンソリューションが必要です。企業には、データを容易にスケールし、変換し、可視化できるプラットフォームが必要です。また、ダッシュボードやレポート、チャートの作成に対応し、AI や BI ツールと連携して業務の生産性を向上させることが求められています。その柔軟かつ分散型の特性により、NoSQL データベース(例:MongoDB)は、これらのタスクにおいて優れた能力を発揮します。

NoSQL データベースの機能

NoSQL データベースは柔軟でスケーラブルな分散型データベースです。NoSQL データベースには、それぞれ独自の機能があります。

NoSQL の機能

NoSQL データベースには、一般的に次のような機能があります。

BASE 準拠

NoSQLデータベースは BASE 準拠、すなわち Basic(基本)、Availability(可用性)、Soft state(ソフトステート) Eventual(仮想一貫性)です。Basic availability(基本的な可用性)は、システムが部分的な障害(例えば、ノードの喪失)を許容できる能力のことです。Soft state(ソフトステート)は、一時的な不整合を許容しつつ、最終的に自動的に整合性を達成するシステムの特性を意味します。BASE 準拠により、高い可用性、迅速なデータ処理、スケーラビリティ、柔軟性が実現されます。しかし、MongoDB は、マルチドキュメント ACID 準拠を提供するように構成することも可能です。

NoSQL データベースの利点について詳しくは、こちらをご覧ください。

リレーショナルデータベースと NoSQL データベースの比較

ユーザーとその趣味に関する情報を保存する例を考えてみましょう。ユーザーの姓、名、携帯電話番号、都市名、趣味を保存する必要があります。 リレーショナルデータベース管理システム(RDBMS)では、Users と Hobbies の 2 つのテーブルを作成します。

ユーザとその趣味に関する全ての情報を取得するには、Users テーブルと Hobbies テーブルの情報を結合する必要があります。

NoSQL データベース用に設計するデータモデルは、選択する NoSQL データベースのタイプによって異なります。MongoDB のようなドキュメントデータベースに、ユーザーとその趣味に関する同じ情報を保存する方法を考えてみます。

ユーザーとその趣味に関する全ての情報を取得するために、データベースから単一のドキュメントを取得できます。結合が不要なため、クエリが高速になります。

RDBMS と NoSQL データベースの違い(ドキュメント)

このデータモデリングの例は、こちらの記事 で詳しく見ることができます。

RDBMS と NoSQL データベースの違い

リレーショナルデータベース管理システムと非リレーショナルデータベースにはさまざまな違いがあります。主な違いの 1 つは、データベースにおけるデータのモデル化方法です。各機能の主な違いを以下に示します。

データモデリング

NoSQL:データモデルは、使用される NoSQL データベースのタイプ(キーバリュー、ドキュメント、グラフ、ワイドカラムなど)によって異なり、半構造化データや非構造化データに適したモデル。

RDBMS:RDBMS は表形式のデータ構造を使用し、データは行と列のセットとして表されるため、構造化データに適したモデル。

スキーマ

NoSQL:NoSQL は柔軟なスキーマを提供し、ドキュメント、行、列、キーバリューのペアの各セットが異なるタイプのデータを含むことができる。柔軟性があるため、必要に応じてスキーマを容易に変更可能。

RDBMS:固定スキーマで、全ての行が同じ定義済みのカラムタイプを含む必要があある。一度データが保存されると、スキーマを変更することは困難。

クエリ言語

NoSQL:使用する NoSQL データベースの種類によって異なる。例えば、MongoDB には MQLがあり、Neo4J には Cypher がある。

RDBMS:構造化クエリ言語(SQL)を使用。

スケーラビリティ

NoSQL:NoSQL は垂直方向にも水平方向にも拡張できるように設計。

RDBMS:RDBMS は垂直スケーリング用に設計。ただし、水平方向のスケーリングには限られた機能のみ。

データリレーションシップ

NoSQL:リレーションシップは入れ子にすることも、明示的にすることも、暗黙的にすることも可能。

RDBMS:リレーションシップは外部キーで定義され、結合を使ってアクセスする。

トランザクションの種類 NoSQL:トランザクションはACIDまたは BASE に準拠。

RDBMS:トランザクションは ACID に準拠。

パフォーマンス

NoSQL:NoSQL はリアルタイム処理、ビッグデータ分析、分散 環境に適している。

RDBMS:RDBMS は、読み取りが多く、トランザクションのワークロードに適している。

データ一貫性

NoSQL:高いデータ一貫性を提供。

RDBMS:ほとんどのケースで最終的な一貫性を提供。

分散コンピューティング

NoSQL:NoSQL が導入された主な理由の 1 つは分散コンピューティングのためで、NoSQL データベースは分散データストレージ、シャーディング、レプリケーション、クラスタリングによる垂直・水平スケーリングをサポートしている。

RDBMS:RDBMS はクラスタリングとレプリケーションによって分散コンピューティングをサポートする。ただし、伝統的に分散型アーキテクチャをサポートするようには設計されていないため、拡張性や柔軟性には欠ける。

フォールトトレランス

NoSQL:NoSQL には、データの複製による耐障害性と高可用性が組み込まれている。

RDBMS:RDBMS はレプリケーション、バックアップ、リカバリーのメカニズムを使用する。ただし、これらのために設計されたものであり、アプリケーション開発時にディザスタリカバリメカニズムのような追加の対策を実装する必要があるかもしれない。

データのパーティショニング

NoSQL:シャーディングとレプリケーションによって行われる。

RDBMS:テーブルベースのパーティショニングとパーティションのプルーニングをサポート。

データパーティショニングについて詳しくは、こちらをご覧ください。

データからオブジェクトへのマッピング

NoSQL:NoSQL は、JSON ドキュメント、ワイドカラムストア、キーと値のペアなど、さまざまな方法でデータを保存する。オブジェクト指向で NoSQL データを扱うために、ODM(オブジェクトデータマッピング)フレームワークによる抽象化を提供。

RDBMS:RDBMS は、データベースのカラムとオブジェクト指向のアプリケーションコードがシームレスに統合されるように、データからオブジェクトへのマッピングに依存している。

リレーショナルデータベースと NoSQL データベースの違いについては、NoSQL vs SQL データベースを参照してください。

NoSQL のユースケース

NoSQL データベースシステムは、リアルタイム分析、コンテンツ管理、IoT アプリケーション、レコメンデーションシステム、不正検出、製品カタログ管理など、あらゆる業界で使用されています。ユースケースは、金融データ医療記録の保存などの非常に重要なものから、猫用のスマートトイレボックスからの IoT データの保存などのより楽しく軽いものまで多岐にわたります。

NoSQL の使用が適しているシナリオ

意思決定者がデータベースを選ぶ際に、以下の理由から NoSQL データベースを選択することがよくあります。

  • 速いペースのアジャイル開発
  • 構造化データおよび半構造化データの保存
  • 膨大なデータ量
  • スケールアウトアーキテクチャの要件
  • マイクロサービスやリアルタイムストリーミングのような最新のアプリケーションパラダイム

上記の理由について詳しくは、NoSQL データベースを使用するタイミングNoSQL データベースの例を参照してください。

NoSQL データベースに関する誤解

長年にわたり、NoSQL データベースに関する多くの誤解が開発者コミュニティに広まってきました。このセクションでは、最も一般的な 2 つの誤解について説明します。

よくある誤解:リレーションシップデータはリレーショナルデータベースに最適である

よくある誤解は、NoSQL データベースや 非リレーショナルデータベースはリレーションシップデータをうまく保存できないというものです。NoSQL データベースはリレーションシップデータを格納できます。しかし、リレーショナルデータベースとは格納方法が異なるだけです。

実際に、リレーショナルデータベースと比較した場合では、関連する データをテーブル間での分割は必要ないため、NoSQL データベースの関係データのモデリングはリレーショナルデータベースよりも簡単であると多くのユーザーが感じています。NoSQL データモデルでは、関連データを単一のデータ構造内に入れ子にできます。

よくある誤解:NoSQL データベースは ACID トランザクションをサポートしていない

もう1つのよくある誤解は、NoSQL データベースは ACID トランザクションをサポートしていないというものです。しかし、MongoDB のような一部の NoSQL データベースは、実際に ACID トランザクションをサポートしています。

NoSQL データベースにおけるデータのモデル化方法によって、多くのユースケースで複数レコードのトランザクションが不要になることに注意してください。先ほどの例で、ユーザとその趣味に関する情報をリレーショナルモデルとドキュメントストアの両方に格納した場合を考えてみましょう。リレーショナルデータベースでユーザーとその趣味に関する情報が一緒に更新されるようにするには、トランザクションを使用して 2 つのテーブルのレコードを更新する必要があります。同じことをドキュメントストアで行うには、1つのドキュメントを更新すればよく、複数レコードのトランザクションは必要ありません。

よくある誤解について詳しくは、こちらの記事をお読みください。

NoSQL クエリチュートリアル

DB-Engines によると、世界で最も人気のある NoSQL データベースである MongoDB から始めることができます。MongoDB を始める最も簡単な方法は MongoDB Atlas です。Atlas は MongoDB のサービスとして完全に管理されたデータベースです。Atlas には永久無料のティアがあります。まずは MongoDB Atlas のチュートリアル をご覧ください。

Atlas Data Explorer を使用して、新しいドキュメントの挿入、既存のドキュメントの編集、ドキュメントの削除など、データ操作を引き続き行うことができます。

データを集約したより高度なクエリーを試す準備ができたら、集約パイプラインを作成します。集約フレームワークは、データを分析するための非常に強力なツールです。さらに詳しく学びたい場合は、無料の MongoDB University コース「 M121 The MongoDB Aggregation Framework」の受講をお勧めします。

データを可視化したい場合は、MongoDB Charts を利用して、ダッシュボードを作成できます。

まとめ

NoSQL データベースは、柔軟なデータモデル、水平スケーリング、高速クエリ、開発者の使いやすさなど、さまざまなメリットを提供します。NoSQL データベースには、ドキュメントストア、キーバリューデータベース、ワイドカラムストア、グラフデータベース、マルチモデルデータベースなど、さまざまなタイプがあります。

MongoDB は世界で最も普及している NoSQL データベースです。MongoDB Atlas について詳しくはは、無料版をお試しください。

Atlasアカウントを取得して、さらに学習を進めたい場合は、MongoDB University で、MongoDBエンジニアによる無料のオンライントレーニングを受講し、MongoDB 認定資格を取得できます。また、Quickstartsでは、MongoDB の導入を迅速にサポートするリソースを提供しており、任意のプログラミング言語で開発をすぐに開始できます。

よくある質問

NoSQL のメリットは?

多くの NoSQL データベースには次のような利点があります。

最終的な一貫性とは何ですか?
最終的な一貫性は分散データベースの特性です。最終的な一貫性とは、データベースに更新が行われた場合に、最終的に分散データベース内の全てのノードにその更新が反映されることを保証するものです。
CAP 定理とは何ですか?
CAP 定理とは、分散コンピューティングシステムが一貫性、可用性、パーティション耐性の 3 つの特性のうち、最大 2 つを提供できるという定理です。consistency(一貫性)、availability(可用性)、partition(パーティショントレランス)の頭文字を取った略語です。
NoSQL の用途は何ですか?

NoSQL データベースは、ほぼ全ての業界でさまざまなユースケースで使用されています。

NoSQL データベースの種類によって、典型的なユースケースが決まります。例えば、MongoDB のようなドキュメントデータベースは汎用データベースです。キーバリューデータベースは、単純なルックアップクエリで大量のデータを扱うのに理想的です。ワイドカラムストアは、大量のデータと予測可能なクエリパターンを使用する ケースに適しています。グラフデータベースは、データ間の関係を分析し、トラバースすることに優れています。詳しくはさまざまなタイプの NoSQL データベースを理解する を参照してください。

NoSQL データベースとは何ですか?
NoSQL データベースとは、リレーショナルテーブル以外の形式でデータを保存するデータベースのことです。
NoSQL クエリはどのように記述するのですか?
NoSQL データベースには、それぞれ独自のクエリの記述方式があります。MongoDB データベースのクエリについて詳しくはは、MongoDB ドキュメントのクエリドキュメントを参照ください。
NoSQL の習得は難しいですか?

いいえ、NoSQL データベースは学ぶのが難しいものではありません。多くの開発者は NoSQL データベースでのデータモデリングが驚くほど直感的だと感じています。例えば、MongoDB のドキュメントは最も一般的なプログラミング言語のデータ構造にマッピングされており、プログラミングがより速く簡単になります。

リレーショナルデータベースのトレーニングや経験がある方は、NoSQLデータベースの新しいデータモデリング方法に適応するために、少し学習が必要になるかもしれません。

JSON は NoSQL ですか?
ドキュメントデータベースは、JSON または BSON ドキュメントにデータを格納する NoSQL データベースの一種です。
NoSQL のクエリにはどの言語を使用しますか?
NoSQL データベースにはさまざまな種類と実装があります。すなわち、NoSQL データベースは多くのクエリ言語や API を使ってクエリできます。世界で最も人気のある NoSQL データベースである MongoDB は、MongoDB Query Language(MQL)を使用してクエリできます。
NoSQL にはスキーマがありますか?
NoSQL データベースは通常、柔軟なスキーマを持っています。MongoDB のようないくつかの NoSQL データベースはスキーマ検証をサポートしているため、開発者はスキーマの準備が整った時点で、スキーマを好きなだけロックできます。

この記事は、MongoDB Developer Advocate の Lauren Schaefer によって執筆されたものです。

NoSQL と SQL の主な違いについて詳しくは、こちら をご覧ください。

NoSQL の関連リソース
その他のリソース

MongoDB Atlas
チュートリアル

NoSQL データベースの最高峰 MongoDB を
クラウドで利用するメリットを体験できます
無料トライアル