NoSQL データベースとは?

NoSQL データベースは特定のデータモデル専用に構築されており、最新のアプリケーションに合わせて簡単にスケールできる柔軟なスキーマにデータを格納します。NoSQL データベースは、開発、機能性、パフォーマンスを大規模かつ容易に実現できるという点で広く評価されています。このページには、NoSQL データベースを理解して使用するための参考資料が含まれています。

NoSQL データベースにはどのような利点がありますか?

モダンアプリケーションは、NoSQL データベースで解決できるいくつかの課題に直面しています。例えば、アプリケーションは、ソーシャルメディア、スマートセンサー、サードパーティのデータベースなどのさまざまなソースからの大量のデータを処理します。このような異なるデータのすべてが、リレーショナルモデルにきちんと合うわけではありません。表形式の構造を適用すると、冗長性、データの重複、および大規模なパフォーマンスの問題が発生する可能性があります。

NoSQL データベースは、非リレーショナルデータモデル専用に設計されており、モダンアプリケーションを構築するための柔軟なスキーマを備えています。NoSQL データベースは、開発、機能性、パフォーマンスを大規模かつ容易に実現できるという点で広く評価されています。NoSQL データベースの利点は以下のとおりです。

柔軟性

NoSQL データベースは、一般的に、より迅速で反復的な開発を可能にする柔軟なスキーマを提供します。NoSQL データベースの柔軟なデータモデルは、半構造化データおよび非構造化データに最適です。

スケーラビリティ

NoSQL データベースは通常、高価で堅牢なサーバーを追加することによってスケールアップするのではなく、分散したハードウェアクラスターを使用してスケールアウトするように設計されています。一部のクラウドプロバイダーは、これらの操作をフルマネージド型サービスとしてバックグラウンドで処理します。

高性能

NoSQL データベースは、特定のデータモデルとアクセスパターンに合わせて最適化されています。これにより、リレーショナルデータベースと同様の機能を実現しようとするよりも高いパフォーマンスが得られます。

高機能

NoSQL データベースは、それぞれのデータモデルごとに専用に設計された機能性に優れた API とデータ型を提供します。

NoSQL データベースのユースケースにはどのようなものがありますか?

NoSQL データベースを使用して、優れたユーザーエクスペリエンスを大規模に提供するさまざまな高性能モバイル、モノのインターネット (IoT)、ゲーム、および ウェブアプリケーションを構築できます。NoSQL データベースの範囲とそれぞれのユースケースは広範囲に及びます。代表的なユースケースを提示するのは困難ですが、以下では考えるためのヒントとなるいくつかの実例を示し、各 NoSQL データベースとそれぞれのユースケースについて詳しく学ぶことをお勧めします。

リアルタイムデータ管理

NoSQL データベースでは、リアルタイムレコメンデーション、パーソナライゼーション、ユーザーエクスペリエンスの向上を実現できます。例えば、Disney+ では、NoSQL データベーステクノロジーを使用して、1 億 5,000 万人以上のサブスクライバーに広範なデジタルコンテンツライブラリを提供しています。Amazon DynamoDB では、途中から視聴する機能、ウォッチリスト、パーソナライズされたレコメンデーションなどの人気のある機能をスケールおよび提供できます。

クラウドセキュリティ

グラフデータベースを使用すると、データ内の複雑な関係をすばやく見つけることができます。例えば、Wiz はクラウドセキュリティを Amazon Neptune を使ったグラフとして再考しました。Wiz は、最も重要なリスクを迅速に特定して修正することで、顧客のセキュリティ体制の改善を支援します。Amazon Neptune に保存されているグラフモデルを使用して、重大なリスクを表すリスク要因の有害な組み合わせを明らかにしています。Wiz リスクエンジンはグラフをトラバースし、数秒以内に相互に関連する一連のリスク要因をセキュリティグラフにまとめます。

高可用性アプリケーション

分散型 NoSQL データベースは、メッセージング、ソーシャルメディア、ファイル共有などのための高可用性で低レイテンシーアプリケーションを構築するのに最適です。例えば、Snapchat には 2 億 9000 万人以上のユーザーが毎日何十億もの写真やビデオメッセージを送信しています。NoSQL データベースシステムを使用して、メッセージ送信のレイテンシーの中央値を 20% 削減します。

NoSQL データベースの仕組み

NoSQL データベースでは、さまざまなデータモデルを使用してデータのアクセスや移行を実行します。 これらのタイプのデータベースは、柔軟なデータモデル、大容量のデータ、低レイテンシーを必要とするアプリケーションに最適化されており、リレーショナルデータベースのデータ整合性制約を緩和することで実現しています。データモデルによって実装に違いがあります。ただし、多くの NoSQL データベースでは Javascript Object Notation (JSON) が使用されています。これは、データを名前と値のペアのコレクションとして表すオープンデータ交換形式です。

NoSQL データベースの例

この単純なブックデータベースのスキーマのモデリングの例を考えてみましょう。

  • リレーショナルデータベースでは、ブックレコードはしばしば分解 (「正規化」) されて、別々のテーブルに格納され、それらの関係がプライマリキーと外部キーの制約によって定義されます。この例では、Books テーブルには ISBNBook TitleEdition Number の列があり、Author テーブルには AuthorIDAuthor Name の列があり、最後に Author-ISBN テーブルに AuthorIDISBN の列があります。リレーショナルモデルは、データベース内のテーブル間で参照整合性を維持し、正規化して冗長性を減らし、全般的にストレージを最適化できるように設計されています。
  • NoSQL データベースでは、ブックレコードは通常ドキュメントとして保存されます。ブックごとに、ISBNBook TitleEdition NumberAuthor NameAuthorID の各項目が、属性として単一のドキュメント内に格納されます。このモデルでは、データが、直感的な開発と水平スケーラビリティのために最適化されています。

SQL とNoSQL の用語

次の表は、SQL データベースによって使用される用語と主要な NoSQL データベースで使用される用語を比較したものです。

SQL MongoDB DynamoDB Cassandra Couchbase
テーブル コレクション テーブル テーブル データバケット
ドキュメント 項目 ドキュメント
フィールド 属性 フィールド
プライマリキー ObjectId プライマリキー
プライマリキー ドキュメント ID
インデックス インデックス セカンダリインデックス インデックス インデックス
ビュー ビュー グローバルセカンダリインデックス マテリアライズドビュー ビュー
ネストされたテーブルまたはオブジェクト 埋め込まれたドキュメント マップ マップ マップ
配列 配列 リスト リスト リスト

NoSQL データベースのタイプにはどのようなものがありますか?

スキーマレスデータを管理、保存する方法の違いから、いくつかの異なる NoSQL データベースシステムが存在します。一般的なタイプのいくつかを以下に説明します。

Key-value データベース

Key-value データベースは分割可能性に優れており、他の NoSQL データベースタイプでは実現できないレベルでの水平スケーリングが可能です。key-value データベースは、データを、キーと値のペアのコレクションとして格納します。ここでキーは、一意の識別子として機能します。キーと値は、単純なオブジェクトから複雑な複合オブジェクトまで、何であってもかまいません。ゲーム、広告技術、IoT などのユースケースは、キー値ストアデータ設計に特に適しています。Amazon DynamoDB は、あらゆる規模のワークロードに対して、ミリ秒単位のレイテンシーで一貫したパフォーマンスを提供するように設計されています。 

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

ドキュメントデータベースは、開発者がアプリケーションコードで使用するのと同じドキュメントモデル形式です。データを JSON オブジェクトとして格納します。これらのオブジェクトは、柔軟性があり、半構造化され、階層化されています。ドキュメントおよびドキュメントデータベースは柔軟性があり、半構造化され、階層的な性質を持つため、アプリケーションのニーズに合わせて進化させることができます。ドキュメントデータベースモデルは、カタログ、ユーザープロファイル、コンテンツ管理システムなど、各ドキュメント固有のものであり、時間の経過とともに進化する場合うまく機能します。Amazon DocumentDB (MongoDB 互換) と MongoDB は、柔軟で反復的な開発のための強力で直感的な API を提供する人気ドキュメントデータベースです。

グラフデータベース

グラフデータベースは、高度に接続されたデータセットを扱うアプリケーションの構築と実行を容易にすることを目的として構築されています。ノードを使用してデータエンティティを格納し、エッジを使用してエンティティ間のリレーションシップを格納します。エッジには常に開始ノード、終了ノード、タイプおよび方向があります。親子関係、アクション、所有権などを記述できます。1 つのノードが持つことができるリレーションシップの数や種類に制限はありません。グラフデータベースを使用して、密接に連結されたデータセットで動作するアプリケーションの構築と実行ができます。グラフデータベースの典型的なユースケースには、ソーシャルネットワーキング、レコメンデーションエンジン、不正行為検出、ナレッジグラフなどがあります。Amazon Neptune はフルマネージド型のグラフデータベースサービスで、プロパティグラフモデルとリソース記述フレームワーク (RDF) の両方をサポートし、2 つのグラフ API (TinkerPop と RDF/SPARQL) を選択できます。

インメモリデータベース

他の非リレーショナルデータベースはデータをディスクや SSD に保存しますが、インメモリデータストアはディスクにアクセスする必要がないように設計されています。マイクロ秒の応答時間を必要とするアプリケーションや、トラフィックが急増するアプリケーションに最適です。リーダーボード、セッションストア、リアルタイム分析などの機能を提供するゲームやアドテクアプリケーションで使用できます。Amazon MemoryDB for Redis は、Redis と互換性があり、耐久性のあるインメモリデータベースサービスで、ミリ秒の読み取りレイテンシー、数ミリ秒台の書き込みレイテンシーと、マルチ AZ の耐久性を提供します。Amazon ElastiCache は、Redis と Memcached の両方と互換性のある、フルマネージドインメモリーキャッシングサービスで、低レイテンシーで高スループットのワークロードに対応します。Amazon DynamoDB Accelerator (DAX) は、DynamoDB の読み取りを桁違いに高速化する専用データストアのもう 1 つの例です。

データベースを検索する

検索エンジンデータベースは、開発者が問題のトラブルシューティングに使用するアプリケーション出力ログなどのデータコンテンツの検索専用の非リレーショナルデータベースの一種です。インデックスを使用してデータ間の類似した特徴を分類し、検索機能を容易にします。検索エンジンデータベースは、画像や動画などの非構造化データの分類に最適化されています。Amazon OpenSearch Service は、半構造化されたログおよび指標のインデックス作成、集約、検索により、機械が生成したデータをほぼリアルタイムで可視化し、分析できるようにする専用サービスです。

NoSQL データベースと SQL データベースにはどのような違いがありますか

何十年もの間、アプリケーション開発における主なデータモデルは、行と列で構成されるテーブルにデータを格納するリレーショナルデータモデルでした。これらのリレーショナルテーブルの作成と編集には、構造化クエリ言語 (SQL) が使用されていました。 SQL データベースは、データ関係をテーブルとしてモデル化します。テーブルの各行は、1 つのオブジェクトまたはエンティティに関連する値のコレクションです。テーブルの各列はデータ属性を表し、フィールド (またはテーブルセル) には属性の実際の値が格納されます。リレーショナルデータベース管理システム (RDBMS) を使用すると、データベーステーブル自体を再編成することなく、さまざまな方法でデータにアクセスできます。

他の柔軟なデータモデルが広く採用され始めたのは、2000 年代半ばから後半にかけてです。これらの新しいクラスのデータベースとデータモデルを区別し、分類するために NoSQL という用語が登場しました。NoSQL は、SQL や非 SQL だけの略ではありません。多くの場合、NoSQL という用語は非リレーショナルと同じ意味です。 リレーショナルデータベースと非リレーショナルデータベースの主な違いを以下の表に示します。

 

リレーショナルデータベース

NoSQL データベース

最適なワークロード

 

 

リレーショナルデータベースは、トランザクショナルで強固な一貫性を持つオンライントランザクション処理 (OLTP) アプリケーション用に設計されています。オンライン分析処理 (OLAP) にも適しています。   

NoSQL のデータベースは、低レイテンシーアプリケーションを含む多数のデータアクセスパターン用に設計されています。NoSQL 検索データベースは、半構造化データの分析用に設計されています。

 

データモデル

リレーショナルモデルでは、データを行と列で構成されるテーブルに正規化します。テーブル、行、列、インデックス、テーブル間の関係などのデータベース要素は、スキーマによって厳密に定義されます。テーブル間の関係によってデータベースの参照整合性が維持されます。

NoSQL データベースでは、キー値、ドキュメント、グラフ、列などのさまざまなデータモデルを利用できます。これらのデータモデルはパフォーマンスと規模に応じて最適化されています。

ACID 特性

リレーショナルデータベースには、アトミック性、一貫性、分離性、および耐久性 (ACID) の特性があります。

  • アトミック性によって、トランザクションは必ず、完全に実行されるか、まったく実行されないかのいずれかになります。
  • 一貫性は、いったんトランザクションが実行されたら、データが必ずデータベーススキーマに従うことを指します。
  • 分離性は、同時発生したトランザクションが相互に独立して実行されることを指します。
  • 耐久性は、予期しないシステム障害や停電が発生しても、異常発生前の最後の状態まで復旧できることを指します。

NoSQL データベースでは、多くの場合、リレーショナルデータベースの ACID 特性の一部を緩和することと引き換えに、水平方向に拡張できるもっと柔軟なデータモデルを実現しています。これによって、NoSQL データベースは、単一インスタンスの制限を超えて水平方向に拡張する必要のある、高スループット、低レイテンシーユースケースの優れた選択肢になっています。

パフォーマンス

パフォーマンスは通常、ディスクサブシステムに左右されます。最善のパフォーマンスを実現するには、多くの場合、クエリ、インデックス、テーブル構造の最適化が必要です。

パフォーマンスは通常、基盤となるハードウェアクラスターのサイズ、ネットワークレイテンシー、呼び出すアプリケーションに依存します。

スケール

リレーショナルデータベースでは通常、ハードウェアの演算機能を増強してスケールアップするか、読み取り専用ワークロードのレプリカを追加してスケールアウトします。

NoSQL データベースは通常、パーティション化可能です。分散型アーキテクチャを使用したアクセスパターンのスケールアウトに基づくパーティション化が可能で、これにより、ほぼ無限の規模でスループットを高め、一貫したパフォーマンスを維持することができます。

API

データの保存および取得のリクエストは、構造化クエリ言語 (SQL) 準拠のクエリを使用して伝えられます。これらのクエリは、リレーショナルデータベースによって解析されて実行されます。

アプリケーション開発者は、オブジェクトベースの API を使用して、データ構造の保存および取得を簡単に行うことができます。アプリケーションはパーティションキーによって、キーと値のペア、列セット、またはアプリケーションのシリアライズされたオブジェクトや属性を含む半構造化ドキュメントを調べます。

SQL データベースよりも NoSQL データベースをどのような場合に選ぶべきですか?

NoSQL データベースは、不確定なデータ、関連性のないデータ、または急速に変化するデータを処理するのに最適です。アプリケーションがデータベーススキーマを指示する場合、開発者は直感的に使用できます。次のようなアプリケーションに使用できます。

  • より迅速で反復的な開発を可能にする柔軟なスキーマが必要です。
  • 強固なデータ整合性やデータテーブル間の関係の維持 (参照整合性) よりもパフォーマンスを優先します。
  • サーバー間のシャーディングによる水平スケーリングが必要です。
  • 半構造化データおよび非構造化データのサポート。

非リレーショナルデータベーススキーマとリレーショナルデータベーススキーマのどちらかを常に選択する必要はありません。アプリケーションでは、SQL データベースと NoSQL データベースを組み合わせて使用できます。このハイブリッドなアプローチは非常に一般的で、各ワークロードが適切なデータベースにマッピングされ、最適なプライスパフォーマンスが得られます。

AWS はお客様の NoSQL データベース要件をどのようにサポートしますか?

AWS は複数の NoSQL データベースサービスを備えており、あらゆる NoSQL の要件に対応することができます。例:

  • Amazon DynamoDB は、サーバーレスでフルマネージド型の key-value データベースサービスで、一貫した 1 桁ミリ秒のパフォーマンスと無限のスケーラビリティを実現します。
  • Amazon DocumentDB (MongoDB 互換) は、フルマネージド型のネイティブ JSON ドキュメントデータベースであり、インフラストラクチャーを管理しなくても、あらゆる規模で、重要なドキュメントワークロードを簡単かつコスト効率よく運用できます。
  • Amazon Neptune はサーバーレスのフルマネージド型のグラフデータベースサービスで、優れたスケーラビリティと可用性を実現し、数十億のリレーションシップを数秒でクエリを実行できます。
  • Amazon MemoryDB for Redis は、マイクロ秒の読み取り/書き込み応答時間を実現する耐久性の高いインメモリデータベースサービスで、超高速なパフォーマンスを実現します。
  • Amazon ElastiCache は、完全マネージド型の Redis と Memcached と互換性のある、インメモリデータストアとキャッシュサービスであり、コスト最適化されたパフォーマンスをリアルタイムで提供します。
  • Amazon Keyspaces (Apache Cassandra 向け) は、サーバーレスのフルマネージド型のワイドカラムデータベースであり、マルチリージョンレプリケーションで最大 99.999% の可用性を実現するように設計されています。スケーラブルで可用性の高い Apache Cassandra 互換のマネージドデータベースサービスです。
  • Amazon Timestream は、サーバーレス、フルマネージド型時系列データベースサービスです。1 日あたり数兆件規模のイベントをリレーショナルデータベースの最大 1,000 倍の速度でより簡単に保存および分析できます。 
  • Amazon OpenSearch Service は、ビジネスデータや運用データのリアルタイム検索、モニタリング、分析を可能にするフルマネージド型の分散型検索および分析スイートです。

今すぐ無料のアカウントを作成して、AWS で NoSQL の使用を開始しましょう。

お客様に合う NoSQL データベースは?
目的別データベースでアプリケーションをモダナイズ