ドキュメントデータベースは、NoSQL データベースの一種で、データを JSON のようなドキュメントとして保存し、クエリするために使用できます。JavaScript Object Notation (JSON) は、人間と機械で読み取り可能なオープンデータ交換形式です。デベロッパーは JSON ドキュメントをコード内で使用して、ドキュメントデータベースに直接保存できます。ドキュメントおよびドキュメントデータベースは柔軟性があり、半構造化され、階層的な性質を持つため、アプリケーションのニーズに合わせて進化させることができます。

JSON ドキュメントデータベース
JSON ドキュメントデータベースクエリ

ドキュメントデータベースの利点

ドキュメントデータベースを使用すると、柔軟なインデックス作成、強力なアドホッククエリ、およびドキュメントのコレクションに対する分析が可能になります。利点の詳細については以下をお読みください。

開発のしやすさ

JSON ドキュメントは、ほとんどのプログラミング言語で一般的なデータ型であるオブジェクトにマッピングされます。アプリケーションを構築する際、デベロッパーはコードから直接ドキュメントを柔軟に作成および更新できます。つまり、事前にデータモデルを作成する時間を短縮できます。したがって、アプリケーション開発はより迅速かつ効率的になります。

柔軟性のあるスキーマ

ドキュメント指向データベースでは、同じコレクション内に異なるフィールドを持つ複数のドキュメントを作成できます。これは、メールやソーシャルメディアの投稿などの非構造化データを保存する場合に便利です。ただし、一部のドキュメントデータベースはスキーマの検証機能を備えているため、構造にいくつかの制限を課すことができます。

スケールに応じたパフォーマンス

ドキュメントデータベースには配布機能が組み込まれています。パフォーマンスに影響を与えずに複数のサーバーに水平にスケールできるため、コスト効率も向上します。さらに、ドキュメントデータベースは、組み込みのレプリケーションによって耐障害性と可用性を提供します。

ドキュメントデータベースのユースケース

ドキュメントモデルは、コンテンツ管理、カタログ、センサー管理などのユースケースに適しています。ユースケースごとに、各ドキュメントは一意的で、時間の経過とともに進化していきます。

コンテンツ管理

ドキュメントデータベースは、ブログや動画プラットフォームなどのコンテンツ管理アプリケーションに最適です。ドキュメントデータベースでは、アプリケーションが追跡する各エンティティを 1 つのドキュメントとして保存できます。ドキュメントデータベースは、デベロッパーが要件の進化に合わせてアプリケーションを更新するための、より直感的な方法です。さらに、データモデルを変更する必要がある場合に更新する必要があるのは、影響を受けるドキュメントのみです。スキーマの更新は不要で、変更を加えるためにデータベースのダウンタイムは必要になりません。

カタログ

ドキュメントデータベースは、カタログ情報の保存に関して効率的かつ効果的です。例えば、e コマースアプリケーションでは、異なる製品の属性数は、通常は異なっています。リレーショナルデータベースで数千の属性を管理することは非効率的であり、読み取りのパフォーマンスは影響を受けます。ドキュメントデータベースの使用時には、容易な管理と読み取り速度向上のため、各製品の属性を 1 つのドキュメント内に記述できます。1 つの製品の属性を変更しても、他の製品に影響しません。

センサー管理

モノのインターネット (IoT) により、企業はセンサーやメーターなどのスマートデバイスから定期的にデータを収集するようになりました。センサーデータは通常、変数値の連続ストリームとして入力されます。レイテンシーの問題により、一部のデータオブジェクトが不完全であったり、重複していたり、または欠落している場合があります。さらに、分析用にフィルタリングまたは集計する前に、大量のデータを収集する必要があります。

この場合、ドキュメントストアの方が便利です。センサーデータは、クリーニングしたり、あらかじめ決められたスキーマに準拠させたりすることなく、そのまますばやく保存できます。必要に応じてスケールしたり、分析が完了したらドキュメント全体を削除したりすることもできます。

ドキュメントデータベースの仕組み

ドキュメントデータベースは、データを JSON 形式の key-value ペアとして保存します。JSON ドキュメントをデータベースに、プログラムにしたがって読み込みまたは書き込みできます。

JSON ドキュメントの構造

JSON は次の 3 つの方法でデータを表します。

キー値

key-value ペアは中括弧内に記録されます。キーは文字列で、値は整数、10 進数、ブール値などの任意のデータ型にすることができます。たとえば、単純な key-value は {"year": 2013} です。

配列

配列は、左 ([) と右 (]) の括弧内に定義された、順序付けられた値のコレクションです。配列内の項目はカンマで区切られます。たとえば、{"fruit": ["apple","mango"]} です。

オブジェクト

オブジェクトは key-value ペアのコレクションです。基本的に、JSON ドキュメントを使用すると、デベロッパーはオブジェクトを埋め込み、ネストされたペアを作成できます。たとえば、{"address": {"country": "USA","state": "Texas"}} です。

JSON ドキュメントの例

次の例では、JSON のようなドキュメントが映画データセットを記述しています。

[
    {
        "year" : 2013,
        "title" : "Turn It Down, Or Else!",
        "info" : {
            "directors" : [ "Alice Smith", "Bob Jones"],
            "release_date" : "2013-01-18T00:00:00Z",
            "rating" : 6.2,
            "genres" : ["Comedy", "Drama"],
            "image_url" : "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg",
            "plot" : "A rock band plays their music at high volumes, annoying the neighbors.",
            "actors" : ["David Matthewman", "Jonathan G. Neff"]
        }
    },
    {
        "year": 2015,
        "title": "The Big New Movie",
        "info": {
            "plot": "Nothing happens at all.",
            "rating": 0
        }
    }
]

JSON ドキュメントには、単純な値、配列、オブジェクトが非常に柔軟に保持されていることがわかります。JSON オブジェクトを含む配列を作成することもできます。したがって、ドキュメント指向のデータベースでは、埋め込み JSON オブジェクトの階層を無制限に作成できます。ドキュメントストアにどのスキーマを与えるかは完全に、ユーザー次第です。

ドキュメントデータベースの操作

データベースに保存されているドキュメント全体を作成、読み取り、更新、削除できます。ドキュメントデータベースは、デベロッパーが次の操作を実行できるようにするクエリ言語または API を提供します。

作成

データベースにドキュメントを作成できます。各ドキュメントには、キーとして機能する一意の識別子があります。

読み取り

API またはクエリ言語を使用してドキュメントデータを読み取ることができます。フィールド値またはキーを使用してクエリを実行できます。また、データベースにインデックスを追加して読み取りパフォーマンスを向上させることもできます。

更新

既存のドキュメントを柔軟に更新できます。ドキュメント全体を書き換えたり、個々の値を更新したりできます。

ドキュメントデータベースと key-value ストアの違い

key-value データベースは、NoSQL データベースの一種で、単純なキー値方法を使用してデータを保存します。データを key-value ペアのコレクションとして保存し、キーは一意の識別子として機能します。キーと値のどちらも、単純なものから複雑な複合オブジェクトまで、何であってもかまいません。

ドキュメント指向データベースは、キーが文字列のみである特殊なタイプの key-value ストアです。さらに、ドキュメントは JSON などの標準や XML などの関連言語を使用してエンコードされます。PDF、画像ファイル、またはテキストドキュメントを値として直接保存することもできます。

ドキュメントストアにクエリを実行すると、値または値の一部を読み取ることができます。特に、値が別の JSON オブジェクトである場合です。たとえば、{"book": {"id": 1,"price": $10}} を指定して book.price をクエリすると、データベースは値 10 を返します。key-value データベースは、常に ID と価格情報を含む値全体を返します。

AWS がお客様のドキュメントデータベース要件をサポートする方法

Amazon DocumentDB (MongoDB 互換) はフルマネージドネイティブ JSON ドキュメントデータベースサービスで、MongoDB を含むドキュメントのワークロードをサポートしています。デベロッパーは、同じ MongoDB アプリケーションコード、ドライバー、ツールを使用して、Amazon DocumentDB でワークロードを実行、管理、スケールすることができます。基盤となるインフラストラクチャの管理を心配することなく、向上したパフォーマンス、スケーラビリティ、可用性を活用できます。Amazon DocumentDB では以下のことが可能になります。

  • Amazon DocumentDB エラスティッククラスター では、パフォーマンスにほとんどまたはまったく影響を与えず、基盤となるインフラストラクチャの管理も一切行わずに、1 秒あたり数百万の読み取り/書き込みリクエストにスケールできます。
  • ストレージとコンピューティングを分離することで、同じ基盤となるストレージを共有する最大 15 個のリードレプリカで読み取りパフォーマンスを向上させることができます。レプリカノードで書き込みを実行する必要はありません。
  • ハードウェアのプロビジョニング、パッチ適用、セットアップなど、差別化されていない手動のデータベース管理タスクをライセンス料なしで自動化します。
  • Amazon DocumentDB グローバルクラスターにより 99.99% の高い可用性を実現し、高速ローカル読み取りパフォーマンスをサポートするグローバルに分散されたアプリケーションを実現します。 
  • 自動レプリケーション、継続的なバックアップ、および厳格なネットワーク分離により、99.99% の可用性を実現します。
  • 耐障害性と自己修復機能を備えたストレージ、ポイントインタイムリカバリ、継続的なバックアップなど、高い信頼性と耐久性を備えています。Amazon DocumentDB は、1 つのコピーに対してのみお支払いいただくだけで、新しい書き込みを 6 つの方法でレプリケートすることで、リージョン内の 3 つの AZ にまたがるデータの耐久性を高めます。
  • 保存時のデフォルトの暗号化、ネットワークの分離、高度な監査により高い安全性を実現すると同時に、きめ細かいアクセスでリソースレベルのアクセル許可を制御できます。
  • SOC (1、2、3)、PCI DSS、HIPAA 対応など、幅広いコンプライアンスに対応しています。

今すぐ無料アカウントを作成して、AWS でのドキュメントデータベースの使用を開始しましょう。

Amazon DynamoDB によるデータモデリング
Amazon DocumentDB エラスティッククラスターの紹介