NoSQLとは何か
NoSQL("Not only SQL"の略)データベースは関係テーブルとは異なる方法でデータを保存します。NoSQLデータベースには、データモデルに基づいたさまざまなタイプがあります。主なタイプは、ドキュメント、キーバリュー、ワイドカラム、グラフです。柔軟なスキーマを利用でき、大量のデータや高いユーザー負荷がある場合には簡単に拡張できます。
この記事では、NoSQL データベースの概要、NoSQL データベースを使用する必要がある理由(およびタイミング)、使用を開始する方法について説明します。
目次
- NoSQLデータベースとは何ですか?
- NoSQL データベースの種類
- NoSQL データベースの簡単な歴史
- NoSQL データベースの機能
- リレーショナルデータベースと NoSQL データベースの例
- RDBMS データベースと NoSQL データベースの違い
- NoSQL のユースケース
- NoSQL はどのような場合に使用すべきでしょうか?
- NoSQLデータベースに関する誤解
- NoSQL クエリチュートリアル
- まとめ
- よくある質問
NoSQLデータベースとは何ですか?
「NoSQLデータベース」という用語は、一般的に非リレーショナルデータベースを指す言葉として使用されます。「NoSQL(NoSQL)」が「non SQL」を意味すると考える人もいれば、「not only SQL」を意味すると考える人もいます。いずれにしても、NoSQL データベースではより自然かつ柔軟な方法でデータを保存することにほとんど同意します。NoSQL は、SQL とは対照的にデータベースマネージメントアプローチであり、SQL は単なるクエリ言語です。これは、NoSQL データベースのクエリ言語に似ています。
データベースの種類 — NoSQL
時が経つにつれて、主に4つのタイプの NoSQL データベース、具体的にはドキュメントデータベース、キーバリューデータベース、ワイドカラムストア、グラフデータベースが登場しました。近年では、マルチモデルデータベースも非常に人気が高まっています。
ドキュメント指向データベース
ドキュメント指向データベースは、JSON(JavaScript Object Notation)オブジェクトに似たドキュメントにデータを保存します。各ドキュメントにはフィールドと値のペアが含まれます。値は通常、文字列、数値、ブール値、配列、あるいはその他のオブジェクトなど、さまざまなタイプになります。ドキュメントデータベースは柔軟なデータモデルを提供し、半構造化されたデータセットや通常は非構造化のデータセットに適しています。また、ネスト構造をサポートしているため、複雑な関係や階層的なデータも表現しやすいです。
ドキュメントデータベースの例としては、MongoDBやCouchbaseなどが挙げられます。一般的なドキュメントは次のようになります。
キーバリューデータベース
キーバリュー型ストアは、各項目にキーと値が含まれる、より単純なタイプのデータベースです。各キーは一意であり、単一の値に関連付けられています。これらはキャッシングとセッションマネジメントに使用され、メモリ内に保存する傾向があるため、読み取りと書き込みで高パフォーマンスを提供します。例としては、Amazon DynamoDB と Redis があります。キーバリュー型データベースに格納されたデータの簡単な例を以下に示します。
ワイドカラムストア
ワイドカラムストアでは、データをテーブル、行、および動的な列に保存します。データはテーブルに保存されます。ただし、従来の SQL データベースと異なり、ワイドカラムストアは柔軟であり、行ごとに異なる列のセットを持つことができます。これらのデータベースでは、列圧縮手法を使用してストレージ容量を削減し、パフォーマンスを向上させることができます。ワイドカラムの行と列により、スパースで幅広いデータを効率的に取得できます。ワイドカラムストアの例としては、Apache Cassandra、HBase があります。ワイドカラム形式でデータが格納される典型的な例は以下の通りです。
グラフデータベース
グラフデータベースは、データをノードとエッジの形で格納します。ノードは通常、人、場所、物事に関する情報(名詞など)を保存するのに対し、エッジはノード間の関係に関する情報を保存します。これらは、当初は関係やパターンがあまり明らかでない場合でも、相互に関連性の高いデータに対して有効です。グラフデータベースの例としては、Neo4J と Amazon Neptune があります。MongoDB では、集計パイプラインの $graphLookup ステージを使用して、グラフの探索機能も提供しています。以下に、データがどのように保存されるかの例を示します。
マルチモデルデータベース
マルチモデルデータベースは複数のタイプの NoSQL データモデルをサポートしているため、開発者は自分のアプリケーション要件に基づいて選択できます。これらのデータベースには、データベースインスタンス内で複数のデータモデルを取り扱うことができる統合データベースエンジンがあります。例としては、CosmosDB と ArangoDB が挙げられます。
データベースの種類の簡単な比較 — NoSQL
それぞれの NoSQL データベースは異なる機能を提供しています。例として、グラフデータベースはエンティティ間の複雑な関係やパターンを分析するのに適していますが、ドキュメントデータベースはドキュメントと同様のタイプの大量のデータをより柔軟で自然な方法で保存および取得できます。データベースの選択は、開発するユースケースによって異なります。
詳細についてはさまざまな種類の NoSQL データベースを理解するをご覧ください。
NoSQLデータベースの簡単な歴史
NoSQLデータベースは、ストレージの価格が大幅に下がった2000年代後半に登場しました。データの重複を避けるために複雑で管理が難しいデータモデルを作成する必要があった時代は終わりました。NoSQL データベースは開発者の生産性向上に最適化されました。
ストレージのコストが急速に下がる中で、アプリケーションが保存およびクエリする必要があるデータの量は増加しました。このデータは、構造化、半構造化、非構造化など形やサイズがさまざまに異なっており、事前にスキーマを定義しておくことがほぼ不可能になりました。NoSQLデータベースを使用すると、開発者は構造化されていないデータを大量に保存できるため、柔軟性が大きく向上します。
2000年代初頭、Google がワイドカラムデータベースである BigTable について発表した論文では、分散されたストレージシステムのレンジの可能性が探究されました。2009年には NoSQL データベースが大幅に増加し、MongoDB と CouchDB という2つの主要なドキュメント指向データベースが登場しました。
2010年代までに、さまざまなタイプの NoSQL データベースが登場し、NoSQL の受け入れが広まり、企業はよりデータ駆動型になりました。
加えて、アジャイルマニフェストの人気が高まり、ソフトウェアエンジニアはソフトウェアの開発方法を考え直していました。エンジニアは変化する要件に迅速に対応し、迅速に反復処理し、ソフトウェアスタック全体でデータベースまで変更を加える必要がありました。この柔軟性をもたらしたのがNoSQLデータベースでした。
また、クラウドコンピューティングも一般化し、開発者がパブリッククラウドを使用してアプリケーションとデータをホストするようになりました。求められたのは、複数のサーバーやリージョンにデータを分散してアプリケーションの復元力を高め、スケールアップではなくスケールアウトし、データを地理的な場所にインテリジェントに配置する機能でした。そのような機能を提供していたのが、MongoDB Atlas などの一部の NoSQL データベースでした。
デジタル化の指数関数的な成長により、企業は可能な限り多くの非構造化データを収集するようになりました。このようなビッグデータを分析し、実行可能なリアルタイムの洞察を導き出すためには、企業は単なるストレージを超えた最新のソリューションを必要としています。企業には、データをスケール、変換、可視化しやすく、ダッシュボード、レポート、チャートを作成し、AIやビジネスインテリジェンスツールと連携して、ビジネスの生産性を加速させるプラットフォームが必要です。柔軟で分散型の特性を持つ NoSQL データベース(例:MongoDB)はこれらのタスクに適しています。
NoSQL データベースの機能
NoSQL データベースは、柔軟でスケーラブルな、かつ分散されたデータベースです。NoSQL データベースのさまざまなタイプには、独自の機能があります。
大まかに、NoSQL データベースは通常、以下の機能を持ちます。
BASE コンプライアンス
NoSQL データベースは BASE に準拠しています。すなわち、Basic(基本的な)Availability(可用性)、Soft state(一時的な状態)、Eventual consistency(最終的な整合性)を確保します。基本的な可用性とは、システムが部分的な障害(ノードの喪失など)に耐える能力を指します。一時的な状態とは、システムが一時的な不整合を許容しつつ、時間の経過とともに最終的に自動的に整合性を達成することを指します。BASE コンプライアンスにより、高可用性、データ処理の高速化、スケーラビリティ、柔軟性が確保されます。しかし、MongoDB はマルチドキュメントの ACID 準拠を提供するように設定することも可能です。
NoSQL データベースの利点の詳細をご覧ください。
リレーショナルデータベースと NoSQL データベースの例
ユーザーやその趣味に関する情報を保存する例を考えてみましょう。ユーザーの名前(名)、名字、携帯電話番号、都市、趣味を保存する必要があります。
リレーショナルデータベースマネジメントシステム(RDBMS)では、通常、2つのテーブルを作成します。1つはユーザー用、もう1つは趣味用のテーブルです。
ユーザーとその趣味に関するすべての情報を抽出するには、[ユーザー]テーブルと[趣味]テーブルの情報を結合する必要があります。
NoSQL データベース用に設計するデータモデルは、選択した NoSQL データベースのタイプによって異なります。MongoDB のようなドキュメントデータベースにユーザーとその趣味に関する同じ情報を保存する方法を検討しましょう。
ユーザーとその趣味に関するすべての情報を抽出するには、データベースから1つのドキュメントを取得できます。結合が必要ないため、クエリが高速化されます。
このデータモデリングの例のより詳細なバージョンを見るには、SQL から MongoDB への用語と概念のマッピングをご覧ください。
RDBMS データベースと NoSQL データベースの違い
リレーショナルデータベースマネジメントシステムと非リレーショナルデータベースにはさまざまな違いがあります。主な違いの1つは、データベースでのデータのモデル化の方法です。各機能の主な違いを以下に示します。
データモデリング
NoSQL:データモデルは、使用するNoSQLデータベースの種類(例:キーバリュー型、ドキュメント型、グラフ型、ワイドカラム型など)によって異なり、半構造化データや非構造化データに適しています。
RDBMS:RDBMS は、行と列の集合で表される表形式のデータ構造を用いており、構造化データに適しています。
スキーマ
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 と SQL データベースを読んでください。
NoSQL のユースケース
NoSQL データベースシステムは、ほぼすべての業界で、リアルタイムアナリティクス、コンテンツ管理、IoT アプリケーション、レコメンデーションシステム、不正検出、製品カタログマネジメント、その他多くの用途に使用されています。ユースケースは、非常に重要なもの(例:金融データや医療レコードの保存)から、より軽いもの(例:スマート猫トイレのIoTデータを保存する)まで多岐にわたります。
NoSQL はどのような場合に使用すべきでしょうか?
データベースの選択を決定する際、意思決定者は通常、NoSQL データベースを選択する次の要因の1件を特定します。
- 高速なアジャイル開発
- 構造化データおよび半構造化データのストレージ
- 膨大な量のデータ
- スケールアウトアーキテクチャの要件
- マイクロサービスやリアルタイムストリーミングなどの最新のアプリケーションパラダイム
上記の理由の詳細については、NoSQL データベースを使用するタイミングとNoSQL データベースの事例紹介をご覧ください。
NoSQLデータベースに関する誤解
長年にわたり、NoSQL データベースに関する多くの誤解が開発者コミュニティ全体に広まってきました。このセクションでは、最も一般的な誤解の2つについて説明します。
誤解:関係データはリレーショナルデータベースに最適である
よくある誤解に、NoSQLデータベースつまり非関係データベースでは、関係データをうまく保存できないというものがあります。しかし、NoSQLデータベースも関係データを保存できます。単に関係データベースとは保存方法が異なるだけです。
実際、リレーショナルデータベースと比較すると、関係データをテーブル間で分裂する必要がないため、NoSQL データベースではリレーショナルデータベースよりも関係データのモデリングが容易だと考える人が多いです。NoSQLデータモデルでは、関連するデータを単一のデータ構造内にネストできます。
誤解:NoSQL データベースは ACID トランザクションをサポートしていない
もう一つのよくある誤解は、NoSQLデータベースがACIDトランザクションをサポートしていないというものです。MongoDBのような一部のNoSQLデータベースは、実際に ACIDトランザクションをサポートしています。
NoSQL データベースでのデータのモデリング方法により、多くのユースケースでマルチレコードトランザクションの必要性がなくなります。関係モデルとドキュメントストアの両方にユーザーとその趣味に関する情報を保存した前の例を考えてみましょう。ユーザーとその趣味に関する情報がリレーショナルデータベースでまとめてアップデートされるようにするには、トランザクションを使用して2つのテーブルのレコードをアップデートする必要があります。ドキュメントストアで同じ操作を行うには、単一のドキュメントをアップデートします。マルチレコードトランザクションは必要ありません。
よくある誤解について詳しく学ぶには、「MongoDBについてあなたが知っていることはすべて間違っている」をお読みください。
NoSQL クエリのチュートリアル
世界で最も人気のある NoSQL データベース(DB-Engines 評)の MongoDB から始めることができます。MongoDB を始める最も簡単な方法は MongoDB Atlas です。Atlas は、MongoDB の完全管理型データベースサービスです。Atlas には永久無料階層があり、これを使用してさまざまなユースケースを試せます。まずは MongoDB Atlas チュートリアルをご覧ください。
Atlas Data Explorer を使用して、新しいドキュメントの挿入、既存のドキュメントの編集、ドキュメントの削除を行うことで、データを引き続き操作することができます。
データを集計するより高度なクエリを試す準備ができたら、集計パイプラインを作成してください。集約フレームワークは、データを分析するための非常に強力なツールです。さらに詳しく知りたい場合は、無料の MongoDB University コース「M121 MongoDB アグリゲーションフレームワーク」を受講してください。
データを可視化したいなら、MongoDB Charts をチェックしてみましょう。Charts を使用すると、データの可視化が含まれたダッシュボードを作成できます。
まとめ
NoSQL データベースは、柔軟なデータモデル、水平拡張、高速クエリ、開発者向けの使いやすさなど、さまざまなメリットを提供します。NoSQL データベースには、ドキュメントストア、キーバリュー型データベース、ワイドカラムストア、グラフデータベース、マルチモデルデータベースなど、さまざまなタイプがあります。
MongoDB は世界で最も人気のあるNoSQLデータベースです。MongoDB Atlas の詳細を確認し、無料ティアもぜひお試しください。
Atlas アカウントを取得した後で詳細を確認されたいですか?MongoDB University 移動し、MongoDB エンジニアによる無料のオンライン訓練を受け、MongoDB の認定資格を取得しましょう。クイックスタートもまた良い出発点です。好みのプログラミング言語で素早く実行できます。