1.1 NoSQL データベースの仕組み

NoSQL データベースは、さまざまなデータ モデルを使用してデータにアクセスし、操作します。これらのタイプのデータベースは、低遅延と柔軟なデータ モデルを必要とするデータ集約型アプリケーション向けに最適化されています。これらはすべて、他の種類のデータベースに特有の厳格なデータ一貫性要件を緩和することによって実現されます。

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

  • リレーショナル データベースでは、多くの場合、書籍エントリは複数の部分に分割され (または「正規化」され)、主キー制約と外部キー制約によって関係が定義される別個のテーブルに格納されます。この例では、BooksテーブルにはISBNBook Title、 Edition Number の列があり、 "ISBN""著者"著者-ISBN、列 が著者名の著者 IDテーブルAuthors。リレーショナル モデルは、データベース内のテーブル間の参照整合性を維持するように設計されています。データは冗長性を減らすために正規化され、通常はストレージ用に最適化されます。

  • NoSQL データベースでは、書籍レコードは通常、JSON ドキュメントとして保存されます。各書籍または要素について、ISBN書籍タイトル版番号著者名、著者ID の値が属性として単一のドキュメントに保存されます。このモデルでは、データは直感的な開発と水平方向のスケーラビリティのために最適化されています。

1.2 NoSQL データベースは何に使用できますか?

NoSQL データベースは、モバイル、ゲーム、Web アプリケーションなど、最大限の使いやすさを提供できる高性能で豊富な機能を備えた柔軟でスケーラブルなデータベースを必要とする多くの最新アプリケーションに最適です。

  • 柔軟性。通常、NoSQL データベースは柔軟なスキーマを提供するため、より迅速な開発が可能になり、段階的な実装が可能になります。柔軟なデータ モデルを使用しているため、NoSQL データベースは半構造化データおよび非構造化データに適しています。

  • スケーラビリティ。NoSQL データベースは、高価で信頼性の高いサーバーを追加するのではなく、分散ハードウェア クラスターを使用して拡張するように設計されています。一部のクラウド サービス プロバイダーはこれらの操作をバックグラウンドで実行し、フルマネージド サービスを提供します。

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

  • 幅広い機能。NoSQL データベースは、それぞれのデータ モデル向けに特別に設計された豊富な API とデータ型を提供します。

1.3 NoSQL データベースの種類

NoSQL データベースは、データをテーブル形式で保存するのが不便な場合に使用されます。したがって、それらは非常に異なる形式で保存されます。通常、NoSQL データベースには 6 つの主要なデータ型があります。

キーと値のペアに基づく DB

キーと値のペアを使用するデータベースは、高い分離性をサポートし、他のタイプのデータベースでは達成できない前例のない水平スケーリングを提供します。Key-Value データベースの適切な使用例は、ゲーム、広告、IoT アプリケーションです。

たとえば、Amazon DynamoDB は、どのような規模でも遅延が数ミリ秒以内で安定したデータベース操作を保証します。この Snapchat 機能は最大のストレージ書き込み負荷に関連しているため、この堅牢なパフォーマンスが Snapchat ストーリーを DynamoDB に移行する主な理由でした。

書類

アプリケーション コードでは、データは開発者にとって効率的で直感的なデータ モデルであるため、JSON のような形式のオブジェクトまたはドキュメントとして表されることがよくあります。ドキュメント データベースを使用すると、開発者は、アプリケーション コードで使用するのと同じドキュメント モデルを使用して、データベースにデータを保存したり、クエリを実行したりできます。ドキュメントとドキュメント データベースは柔軟で、半構造化され、階層的な性質を持っているため、アプリケーションのニーズに合わせて進化できます。

ドキュメント モデルは、各ドキュメントが一意で時間の経過とともに変化するカタログ、ユーザー プロファイル、およびコンテンツ管理システムでうまく機能します。Amazon DocumentDB (MongoDB と互換性あり) および MongoDB は、アジャイル開発のための機能的で直感的な API を提供する一般的なドキュメント データベースです。

グラフデータベース

グラフ データベースを使用すると、複雑なデータのセットを処理するアプリケーションの開発と実行が容易になります。グラフ データベースの使用例としては、ソーシャル ネットワーク、レコメンデーション サービス、不正検出システム、ナレッジ グラフなどがあります。Amazon Neptune は、フルマネージドのグラフ データベース サービスです。Neptune はプロパティ グラフおよびリソース記述フレームワーク (RDF) をサポートし、TinkerPop と RDF/SPARQL の 2 つのグラフ API から選択できます。一般的なグラフ データベースには、Neo4j や Giraph などがあります。

メモリ内のDB

多くの場合、ゲームや広告アプリケーションでは、リーダーボード、セッション ストレージ、リアルタイム分析が使用されます。このような機能では数マイクロ秒以内の応答が必要ですが、トラフィックの急激な増加はいつでも発生する可能性があります。

Amazon MemoryDB for Redis は、Redis と互換性のある信頼性の高いインメモリ データベース サービスで、読み取りレイテンシーをミリ秒まで短縮し、複数のアベイラビリティ ゾーンにわたって耐久性を提供します。MemoryDB は、超高性能と信頼性を実現するために特別に構築されているため、最新のマイクロサービス ベースのアプリケーションのプライマリ データベースとして使用できます。

Amazon ElastiCache は、フルマネージド型の Redis および Memcached と互換性のあるメモリ内キャッシュ サービスで、低レイテンシー、高スループットのワークロードに対応します。アプリがリアルタイムで応答する必要がある Tinder のようなクライアントは、ディスク ストレージ システムではなくインメモリを使用しています。専用のデータ ウェアハウスのもう 1 つの例は、Amazon DynamoDB Accelerator (DAX) です。DAX により、DynamoDB は数倍高速にデータを読み取ることができます。

データベースの検索

多くのアプリケーションは、開発者が問題のトラブルシューティングと修正を容易にするためにログを生成します。Amazon OpenSearch は、半構造化されたログとメトリクスのインデックス作成、集約、検索によって、自動的に生成されたデータ ストリームをほぼリアルタイムで視覚化および分析するための専用サービスです。

さらに、Amazon OpenSearch は、強力で高性能な全文検索サービスです。Expedia は、150 を超える Amazon OpenSearch サービス ドメイン、30 TB のデータ、および 300 億のドキュメントを活用して、運用監視やトラブルシューティングから分散アプリケーション スタックの追跡やコストの最適化まで、さまざまなミッションクリティカルなユースケースを実現しています。

1.4 SQL (リレーショナル) データベースと NoSQL (非リレーショナル) データベースの比較

NoSQL には多くの利点があるため、少なくとも理論的には、必要なツールが自分で作成する前にすでに存在することを知っておく必要があります。以下に NoSQL データベースと SQL データベースの比較を示します。

適切なワークロード

リレーショナル データベースは、トランザクション対応で一貫性の高いリアルタイム トランザクション処理 (OLTP) アプリケーション向けに設計されており、リアルタイム分析処理 (OLAP) に適しています。

NoSQL データベースは、低遅延アプリケーションを含むさまざまなデータ アクセス パターンで動作するように設計されています。NoSQL 検索データベースは、半構造化データの分析用に設計されています。

データ・モデル

リレーショナル モデルはデータを正規化し、行と列で構成されるテーブルに変換します。スキーマは、テーブル、行、列、インデックス、テーブル間の関係、およびその他のデータベース要素を厳密に定義します。このようなデータベースでは、テーブル間の関係における参照データの整合性が保証されます。

NoSQL データベースは、高いパフォーマンスとスケーラビリティを実現するために最適化された、キーと値のペア、ドキュメント、グラフなどのさまざまなデータ モデルを提供します。

ACIDの特性

リレーショナル データベースは、一連の ACID プロパティ (原子性、一貫性、分離性、信頼性) を提供します。

  • アトミック性では、トランザクションが完全に実行されるか、まったく実行されないことが必要です。
  • 一貫性とは、トランザクションが完了するとすぐに、データがデータベース スキーマに準拠する必要があることを意味します。
  • 分離では、並列トランザクションが互いに別々に実行される必要があります。
  • 信頼性とは、予期しないシステム障害または停電の後に最後に保存された状態に回復する能力を指します。

NoSQL データベースは多くの場合、水平スケーリングを可能にするより柔軟なデータ モデルを優先して、ACID プロパティの厳格な要件を緩和するという妥協案を提供します。このため、NoSQL は、単一インスタンスを超えた水平スケーリングを必要とする高帯域幅、低レイテンシーのユースケースに最適な選択肢となります。

パフォーマンス

パフォーマンスは主にディスク サブシステムに依存します。最大のパフォーマンスを得るには、クエリ、インデックス、テーブル構造の最適化が必要になることがよくあります。

通常、パフォーマンスは、基盤となるハードウェア クラスターのサイズ、ネットワーク遅延、呼び出し元のアプリケーションによって決まります。

スケーリング

リレーショナル データベースは通常、ハードウェアの計算能力を向上させるか、読み取りワークロード用に別のコピーを追加することによって拡張します。

NoSQL データベースは通常、分散アーキテクチャに基づくスケーラブルなアクセス パターンを通じて高い分離性をサポートします。これによりスループットが向上し、ほぼ無制限の規模で一貫したパフォーマンスが実現します。

API

データの書き込みおよび取得のリクエストは SQL で記述されます。これらのクエリはリレーショナル データベースによって解析され、実行されます。

オブジェクト指向 API を使用すると、アプリケーション開発者はデータ構造を簡単に作成および取得できます。アプリケーションはパーティション キーを使用して、キーと値のペア、列セット、またはシリアル オブジェクトとアプリケーション属性を含む半構造化ドキュメントを検索できます。