DynamoDB の概要 - AWS 規範的ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

DynamoDB の概要

Amazon DynamoDB は、シームレスなスケーラビリティで高速で予測可能なパフォーマンスを提供するキーSQLバリューなしのドキュメントデータベースです。フルマネージド、マルチリージョン、マルチアクティブ、耐久性のあるデータベースです。(DynamoDB のグローバルテーブル機能は、1 つの AWS リージョンで行われた変更を他のすべての選択したリージョンに自動的に同期し、マルチアクティブサポートを提供します。) DynamoDB には、セキュリティ機能、バックアップおよび復元オプション、インターネット規模のアプリケーション用のインメモリキャッシュが組み込まれています。

NoSQL Database のスキーマレスな性質により、データベース (リードスキーマ) の変更を本番環境にプッシュするために必要な時間とプロセスが短縮され、迅速なアプリケーション開発 () が可能になりますRAD。DynamoDB などのSQLデータベースは、高性能の読み取り/書き込みオペレーション用に構築されていません。

特徴と利点

DynamoDB には、以下の機能と利点があります。

  • 管理するサーバーなし – DynamoDB はフルマネージドの NoSQL データベースサービスです。つまり、サーバーのメンテナンスオーバーヘッドは発生しません。

  • Schemaless – DynamoDB は、迅速なアプリケーション開発とデプロイをサポートします。

  • 大規模なパフォーマンス – DynamoDB は、シームレスなスケーラビリティを備えた高速で予測可能なパフォーマンスを提供します。

  • ACID サポート – DynamoDB は、データの正確性を維持するために、原子性、整合性、分離、耐久性 (ACID) トランザクションをサポートしています。

  • 高可用性と耐久性 – データはソリッドステートディスク (SSDs) に保存され、リージョン AWS 内の複数のアベイラビリティーゾーンに自動的にレプリケートされるため、高可用性とデータの耐久性が組み込まれています。

  • 自動スケーリング – DynamoDB は AWS Application Auto Scaling サービスを使用して、トラフィックパターンに応じてプロビジョニングされたスループット容量を動的に調整します。

  • 柔軟な料金オプション – DynamoDB は、オンデマンドキャパシティモードとプロビジョニングされたキャパシティモードの 2 つのキャパシティモードに特定の請求オプションを提供します。

  • Point-in-time リカバリ – リカバリを使用して point-in-time継続的なバックアップを有効にして、テーブルを誤って書き込みまたは削除操作から保護し、過去 35 日間の任意の時点にテーブルを復元できます。

  • Time to Live (TTL) – 指定した期間後に DynamoDB テーブルから項目を自動的に削除できます。

  • グローバルテーブル – 独自のレプリケーションソリューションを構築することなく、複数のレプリカを AWS リージョンにデプロイできます。

  • グローバルセカンダリインデックス – DynamoDB テーブルのクエリは、テーブル自体のパーティションキーとソートキーとは異なるパーティションキーとソートキーを使用して実行できます。

  • DAX – DynamoDB Accelerator (DAX) キャッシュサービスは、読み取りオペレーションにミリ秒未満の応答時間を提供します。

  • DynamoDB Streams – この機能は、DynamoDB テーブルの変更のリアルタイム追跡と通知をサポートするために、ログに項目レベルの変更の時系列を提供します。

これらの利点の詳細については、 AWS ウェブサイトの「Amazon DynamoDB の機能」を参照してください。以下のセクションでは、 から DynamoDB RDBMSに移行することで、データベースワークロードのモダナイズに関連する機能の一部について説明します。

パーティションキー

DynamoDB はスキーマレスであるため、テーブルのすべての属性を定義する必要はありません。パーティションキー属性は必須です。ソートキーはオプションです。残りの属性は任意で、項目ごとに異なる場合があります。頻繁にアクセスされる項目が同じパーティションに存在しないように、カーディナリティの高いパーティションキーを選択することをお勧めします。この練習は、データアクセスの不均衡やホットパーティションを回避するのに役立ちます。詳細については、DynamoDB ドキュメントの「パーティションキーを効果的に設計して使用するためのベストプラクティス」を参照してください。

インデックス

インデックスを使用すると、代替クエリパターンにアクセスでき、クエリを高速化できます。リレーショナルデータベースと DynamoDB のどちらを使用しているかにかかわらず、インデックスは慎重に作成する必要があります。テーブルに対して書き込みオペレーションが発生するたびに、そのテーブルのすべてのインデックスを更新する必要があります。

グローバルセカンダリインデックスには、ベーステーブルから選択した属性が含まれていますが、テーブル自体のプライマリキーとは異なるプライマリキーによって編成されます。DynamoDB では、グローバルセカンダリインデックスはデフォルトでスパースです。つまり、ソートキーはオプションであり、すべてのテーブル項目に表示されるわけではありません。この機能を利用するには、必要な属性のみを保存および投影するグローバルセカンダリインデックスを作成できます。DynamoDB テーブルには、最大 20 個のグローバルセカンダリインデックスを設定できます。この機能の詳細については、DynamoDB ドキュメントの「DynamoDB でのグローバルセカンダリインデックスの使用」を参照してください。 DynamoDB

有効期限

DynamoDB テーブルの Time to Live (TTL) プロパティを設定して、項目ごとに (レコード) タイムスタンプを定義し、項目が不要になったタイミングを指定できます。指定されたタイムスタンプの直後、DynamoDB は追加のキャパシティユニットを消費することなく、テーブルから項目を削除します。この機能の詳細については、DynamoDB ドキュメントの「DynamoDB Time to Live」を使用してアイテムの有効期限が切れる「」を参照してください。 DynamoDB

料金モデル

DynamoDB には、プロビジョニングされた容量とオンデマンド容量の 2 つの料金モデルがあります。料金モデルの選択は、予測されるワークロードによって異なります。

料金モデル ワークロードタイプ コスト 読み取り/書き込みスループット
プロビジョンドキャパシティー 予測可能 Lower

読み取りキャパシティーユニット (RCUs) と書き込みキャパシティーユニット () の点で、1 秒あたりの読み取り/書き込みオペレーションの数を指定しますWCUs。例:

  • 最大 4 KB の項目の場合、1 RCUは最終的に 1 秒あたり 2 回の一貫した読み取りを実行できます。

  • 最大 1 KB の項目の場合、1 WCUは最終的に 1 秒あたり 2 回の一貫した読み取りを実行できます。

自動スケーリングを有効にして、トラフィックの変化に応じて容量を調整できます。

オンデマンドキャパシティ 動的 より高い

スループット要件は指定しません。DynamoDB はワークロードを自動的に対応します。

読み取りリクエストユニットと書き込みリクエストユニットの観点から、アプリケーションがテーブルで実行する読み取りと書き込みには料金がかかります。例:

  • 8 KB 項目には、最終的に一貫した読み取りには 1 つの読み取りリクエストユニット、トランザクション以外の書き込みオペレーションには 8 つの書き込みリクエストユニットが必要です。

これらの 2 つのモデルの詳細については、DynamoDB ドキュメントの「読み取り/書き込み容量モード」を参照してください。

トランザクション

DynamoDB は、1 つの AWS アカウントと AWS リージョン内の 1 つ以上のテーブルにわたる原子力、整合性、分離、耐久性 (ACID) トランザクションをサポートします。

テーブル内およびテーブル間で複数の項目に対する変更を管理するには、DynamoDB トランザクション TransactWriteItemsTransactGetItems を使用できますAPIs。

  • TransactWriteItems は、1 つ以上の PutItem、、および DeleteItemアクションを含む書き込みセットを含むバッチオペレーションです。 TransactWriteItemsはオプションでUpdateItem、更新を行う前に満たす必要がある前提条件をチェックできます。これらの条件には、書き込みセット内の項目と同じ項目、または異なる項目が含まれる場合があります。条件が満たされない場合、トランザクションは拒否されます。

  • TransactGetItems は、1 つ以上のGetItemアクションを含むリードセットを含むバッチオペレーションです。アクティブな書き込みトランザクションの一部である項目に対してTransactGetItemsリクエストを発行すると、読み取りトランザクションはキャンセルされます。以前にコミットされた値を取得するには、標準の読み取りオペレーションを使用できます。

これらの の詳細についてはAPIs、DynamoDB ドキュメント」の「Amazon DynamoDB トランザクション: その仕組み」を参照してください。 DynamoDB

制約事項

DynamoDB トランザクションAPIオペレーションには以下の制約があります。

  • トランザクションは 100 個を超える一意の項目を更新することはできません。

  • トランザクションには、4 MB を超えるデータを含めることはできません。

  • トランザクション内の 2 つのアクションを、同じテーブルの同じ項目に対して実行することはできません。例えば、1 つのトランザクションで同じ項目に対して ConditionCheck と の両方のUpdateアクションを実行することはできません。

  • トランザクションは、複数の AWS アカウントまたはリージョンのテーブルでは動作できません。

  • トランザクションオペレーションは、書き込みオペレーションが最初に実行される AWS リージョン内でのみACID保証を提供します。グローバルテーブルのリージョン間では、トランザクションはサポートされていません。

  • オブジェクト永続性モデルはトランザクションをサポートしていません。トランザクション機能を使用するには、DynamoDB 低レベル APIを使用してデータベースとテーブルにアクセスする必要があります。

大きなコンポーネント

DynamoDB のサイズ制限は、項目ごとに 400 KB です。この制限には、属性名 (UTF-8 エンコーディングのバイナリ長) と属性値 (バイナリ長) の両方が含まれます。属性名はサイズ制限にカウントされます。例えば、値「IN」を持つ「国コード」という名前の属性と値「91」を持つcountry-phone-prefix「」という名前の属性の 2 つの属性を持つ項目を考えてみましょう。その項目の合計サイズは 36 バイトです。

回避策

項目が多くの属性とプロパティ、または大量のデータに関連付けられている場合、そのサイズは 400 KB を超える可能性があります。この場合、シリアル化された項目を Amazon Simple Storage Service (Amazon S3) JSON形式で保存し、Amazon S3 の場所を項目に属性 (S3Location) として保存できます。その項目の読み取りおよび書き込みオペレーションは S3 オブジェクトを取得し、JSON文字列を更新します。ローカルインデックスとグローバルセカンダリインデックスで使用されるプライマリキー、ソートキー、およびすべての属性は、 S3Location 属性とともにテーブルに保存する必要があります。これには、 S3Location 属性をチェックし、Amazon S3 から完全な項目データを取得するために、アプリケーション (データアクセスレイヤー) に追加のロジックが必要です。

バックアップと復元

バックアップと復元のサポートは、どのデータベースでも一般的な機能です。DynamoDB は、同じアカウント内のバックアップおよび復元オペレーションをネイティブにサポートしますが、他のオプションまたはプロセスを使用して、複数のアカウント間でテーブルコピーを実行できます。これらのプロセスでは、読み取り/書き込みキャパシティーユニットは消費されません。詳細については、 AWS 「規範ガイダンス」ウェブサイトの「Amazon DynamoDB のクロスアカウントフルテーブルコピーオプション」ガイドを参照してください。

制約事項

DynamoDB は現在、 を使用してクロスアカウントバックアップと復元をサポートしていますがAWS Backup、アカウントは同じ組織の一部である必要があります。この制限に対処するには、次のいずれかのソリューションを使用します。

  • を使用してNET、任意のプログラミング言語 (.、Java、Python など) でカスタム実装しますAWS SDK。アカウント A のソーステーブルから項目をスキャンし、アカウント B のテーブルに項目 (BatchWrite) を書き込むことができます。このコードは、サーバー、オンプレミスコンピュータ、または で実行できます AWS Lambda (データベースが小さく、スクリプトの実行に 15 分未満の時間がある場合)。詳細については、 AWS 「規範ガイダンス」ウェブサイトの「カスタム実装を使用したアカウント間の Amazon DynamoDB テーブルのコピー」パターンを参照してください。

  • の使用 AWS Glue。このオプションの詳細については、 AWS 「規範ガイダンス」ウェブサイトの「Amazon DynamoDB のクロスアカウントフルテーブルコピーオプション」ガイドを参照してください。

言語とSDKサポート

は、 AWS .NET、Java、、Node.js JavaScript、Python、、および Ruby のサービスPHPおよびサポートへのシンプルなプログラミングインターフェイスAWS SDKsを提供します。

オブジェクト永続性モデル (高レベルインターフェイス)、ドキュメントインターフェイス、低レベルインターフェイス AWS SDKの 3 つのパターンから選択して、DynamoDB テーブルにアクセスできます。詳細については、このガイドの後半の「アクセスパターン」を参照してください。