Amazon Web Services ブログ
DynamoDB ShellでAmazon DynamoDB global tablesを扱う
DynamoDB ShellでAmazon DynamoDB global tablesを扱う
global tablesはAmazon DynamoDBのグローバルなフットプリントを基盤として構築され、フルマネージド型のマルチリージョン、マルチアクティブデータベースを実現し、大規模にスケーリングされたグローバルなアプリケーションに高速でローカルな読み取りと書き込みのパフォーマンスを提供します。global tablesは、選択した AWS リージョンで DynamoDB tableを自動的にレプリケーションします。
DynamoDB Shellは DynamoDB 用のインタラクティブなコマンドラインインターフェイスです。DynamoDB Shell を使用してデータ定義言語 (DDL) とデータ操作言語 (DML) の操作を実行でき、global tables操作の DDL がサポートされるようになりました。DynamoDB Shellを使用してデータをクエリする方法の概要については、「 Query data with DynamoDB Shell – a command line interface for Amazon DynamoDB」を参照してください。
この記事では、DynamoDB Shell の一部の機能を簡単に要約し、global tablesのサポート方法を紹介し、DynamoDB の新規ユーザーがglobal tablesを使い始める方法を簡単に説明しています。
DynamoDB global table
グローバルアプリケーションには、データを顧客に近いところに置くことがメリットとなります。顧客層がグローバルに分散しているため、アプリケーション設計者は、顧客をグローバルで一貫した方法で管理できるデータベースを必要としています。DynamoDB global tablesを使用すると、多くのリージョンで動作し、フルマネージドでマルチアクティブなtableを作成できます。任意のリージョンのデータへの更新は、DynamoDB によって他のすべてのリージョンに自動的にレプリケーションされます。データは最終的に一貫していることが保証され、同じアイテムが複数のリージョンでほぼ同時に更新された場合は、後の更新が優先されます。DynamoDB global tablesの詳細については、Amazon DynamoDB global tablesを参照してください。
DynamoDB global tablesには 2つのバージョンがあります。DynamoDB Shell は、現在の 2019.11.21 バージョンのみ DDL をサポートしています。これにより、柔軟性と効率性が向上し、以前のバージョンよりも書き込み容量が少なくなります。
DynamoDB Shell use case
global tablesで DynamoDB Shell を使用する例として、航空会社のフライトを追跡するアプリケーションを考えてみましょう。次の例では、DynamoDB Shellでアプリケーションのtableを作成します。DynamoDB Shell では、プロンプトには接続されたリージョンの名前が含まれていることを思い出してください。セッションは1つのリージョンにのみ接続さますが、connect
コマンドを使用してリージョンを切り替えることもできます。この例では米国東部 (オハイオ) us-east-2
リージョンへ接続しています。
次に、いくつかのデータをtableに入力します。
このtableは us-east-2
リージョンに作成されているため、このデータにアクセスしたいアプリケーションは、us-east-2
リージョン に接続する必要があります。
それでは、このtableを 欧州 (パリ)eu-west-3
リージョンとアジアパシフィック (ムンバイ) ap-south-1
リージョンにレプリカを持つglobal tablesに変換してみましょう。
describe
コマンドをglobal tables変換後すぐに実行すると、作成中のレプリカを確認することができます。
DynamoDB global tablesが 3つのロケーションすべてにtableを設定し、ロケーション間でマルチアクティブレプリケーションを確立するまで数分かかります。レプリカを追加するときにtableに大量のデータがある場合は、レプリケーションが確立されるまでに少し時間がかかる場合もあります。既存のレプリカ (この場合は us-east-2
) は、新しいレプリカが作成されてデータが入力されている間も引き続き使用できます。
数分後に再度確認すると次のように結果を確認することが出来ます。
それでは、ap-south-1
リージョンのデータを見てみましょう。
DynamoDB は us-east-2
リージョンから ap-south-1
リージョンへのデータのレプリケーションに成功しました。
ここで、フライトがBLRからDOH(インドのバンガロールからカタールのドーハへ)に出発したとします。これで、アプリケーションはQR573便のステータスを出発済みに切り替える必要があります。そのさいインドにあるコンポーネントはap-south-1
リージョン のデータベースに論理的に接続して更新を実行します。
このフライトの乗客の家族がたまたまボストンにいてフライトの状況を確認する場合、us-east-2
リージョンにホストされているWebページにアクセスして、QR573便のステータスを調べます。
結果が示すようにDynamoDB のglobal tablesは、アプリケーションからap-south-1
リージョンへの更新なしに us-east-2
リージョン への書き込みをレプリケーションしています。
飛行機がDOHに着陸すると、eu-west-3
リージョンにホストされているアプリケーションがtableを更新します。
この更新はほぼ瞬時に行われ、us-east-2
リージョンにも反映されて確認することが出来ます。
このように、複数のリージョンにデータがあるグローバルに分散されたアプリケーションは、完全にアクティブ-アクティブに動作できます。このレプリケーションはすべて DynamoDB global tablesによって自動的に処理されます。コンフリクトの解決は「最後のwriteが優先される」という基準で進められます。データは非同期で伝播され、最終的には一貫性が保たれます。
us-west-2
リージョン に別のレプリカを追加したいとしましょう。DynamoDB Shellはこれを実行することもできます (もう 1 つの ALTER TABLE の呼び出し方です)。そして、DynamoDB Shellは EXPLAIN コマンドもサポートしています。これにより、実行される API 呼び出しがわかります。
explain
コマンドは、新しい DynamoDB ユーザーが DynamoDB API を学習するうえで便利な方法です。
最後に、us-west-2
リージョンにレプリカを追加して、レプリカのtable classを DynamoDB 標準-低頻度アクセス (DynamoDB Standard-IA) に設定してみましょう。
コマンドが完了すると、us-west-2
リージョンに Standard-IA table classを使用するtableが作成されます。
この例では、us-east-2
リージョン にtable (on-demandまたはpay-per-request table) を作成し、DynamoDB Shellを使用して ap-south-1
リージョン と eu-west-3
リージョン に 2 つのglobal tablesレプリカを作成しました。
us-east-2
リージョンに挿入されたデータが、他の 2 つのレプリカに自動的に伝播されることを確認しました。任意のリージョンのデータに加えられた更新は、すべてのリージョンにレプリケーションされます。
DynamoDB Shellでは、local tableと同様に、regional tablesとglobal tableで SELECT
、INSERT
、UPDATE
、UPSERT
、REPLACE
、DELETE
がサポートされています。すべての変更は、DynamoDB global tablesによってすべてのレプリカに自動的に反映されます。
まとめ
DynamoDB global tablesは、グローバルに分散されたアプリケーションを構築できる強力な構造です。データのレプリケーションは DynamoDB によって完全に管理され、コンフリクトの解決は「最後のwriteが勝つ」方式で行われます。データは非同期で伝播され、最終的には一貫性が保たれます。
DynamoDB Shell は、DynamoDB と DynamoDB のglobal tablesを使い始めたり、フルマネージドデータベースサービスで提供される機能や機能を調べたりするのに役立ちます。
DynamoDB Shellを試したことはありますか?Shellでサポートしてほしい機能を教えてください。DynamoDB Shellの使用を開始するには、Query data with DynamoDB Shell – a command line interface for Amazon DynamoDB を参照するか、GitHub repoの README.mdファイルの指示に従ってください。
著者について
Amrith Kumar はアマゾンウェブサービスのシニアプリンシパルエンジニアとして活動し、 Amazon DynamoDB に従事しています |
本記事は 2023/04/19に投稿された Use Amazon DynamoDB global tables in DynamoDB Shellを翻訳した記事です。翻訳はソリューションアーキテクトのTakahiro Iwaseが担当しました。