たいきゅんの日記

ITエンジニアの積み上げ日記

Amazon DynamaDBに入門してみた。

今回はAmazon DynamaDBに関してまとめていこうと思います。

最近開発を任されたプロジェクトが、DynamaDBを使用しておりました。

開発するにあたり最低限の知識は抑えたいということで、アウトプットしていきたいと思います。

 

 

Amazon DynamaDBとは

DynamaDBは、AWSが開発したマネージドデータベースサービスの一つです。NoSQLに分類されます。

DynamaDBはAmazonのCTOによって開発されました。その背景はCAP定理という「一貫性」「可用性」「ネットワーク分断耐性」を全て達成することはできないという考えがあります。この中で可用性」「ネットワーク分断耐性」を重視して開発されたのがDynamaDBです。

AmazonECにおいて、”いつでもカートに追加できる=可用性”、”カートに入れたデータを失わない=ネットワーク分断耐性”を、大量に処理することができるDBを目的として開発されました。

 

DynamoDBの特徴

得意なこと

1. フルマネージドサービスのため、自動的に容量の拡張やレプリケーションが実施される。その他目運用負荷の軽減が可能。

 

2. key-value およびドキュメントデータモデルをサポートしている点

 

3.  一行ミリ秒単位のレイテンシーを要求するアプリケーションにも対応していおり、DBMSと異なり非常に高速に実施することが可能な点

 

4.高可用性

・データの保管時にはデフォルトでデータが暗号化がされる(追加料金不要)

・ポイントインタイムリカバリ (PITR) を使用することで、オペレーションによって DynamoDB テーブルが誤って上書きされたり削除されたりしないようにできる。

・オンデマンドバックアップおよび復元で、DynamoDB テーブルのデータの完全なバックアップを作成してアーカイブできる。

・3つのAZに保存するためデータの信頼性も高い

 

苦手なこと

1. データのジョインができない

2. トランザクション・コミット・ロールバックができない。

3. 柔軟な検索ができない

4. 集計処理ができない

 

向いているシステム

1. ミリ秒単位のアクセスレイテンシーが求められるシステム

2. RDBMSのような複雑なデータ構造は扱わないシステム

3. データの容量が予測しにくいシステム

 

(具体例)

・モバイルゲームにおけるデータ収集

・アカウント管理

・web広告におけるクリックストリーミング

・IOT機器の利用

 

DynamoDBの設計上の考慮点(キー設計)

DynamoDBはテーブルのデータをパーティションと呼ばれる領域に分けて保持します。つまりデータがどのパーティションに保存されるかはパーティションキーによって決定されます。またパーティションにデータを保存する際は、ソートキーで指定した順序によって保存されます。

このパーティションキー・ソートキーの設定がDynamoDBにおいて重要です。DynamoDBだとクエリが柔軟に発行できないので、設計段階から各種データにどのようにアクセスできるかをきちんと考えておく必要があります。データが多すぎるパーティションはクエリに時間がかかってしまう可能性が発生します。

 

ポイントインタイムリカバリ (PITR) 

DynamoDB テーブルを、偶発的な書き込みや削除のオペレーションから保護できる機能のこと。過去35日間の任意の時点にテーブルを復元することができます。直近の最も遅い復元日時は約5分前までの指定が可能。

既存のテーブルに書き戻しができるわけではなく、あくまでバックアップを復元し、データを確認することができるにとどまります。

 

キャパシティモード

キャパシティーユニットとは、事前に設定しておく読み込み/書き込み容量のこと。オンデマンドキャパシティープロビジョニング済みキャパシティーという 2 種類のキャパシティーモードがあり、これらの二つの料金体系が存在する。

 

1. オンデマンドキャパシティー

システムがAmazon DynamoDBに対してデータを読み書きした回数に対して料金が発生するプラン。アプリケーションのI/Oの予測がつかないもの向き。

 

2. プロビジョニング済みキャパシティ

システムがAmazon DynamoDBに対する1秒あたりのデータ読み書き回数を指定し、指定した回数を元に料金が算出されるプラン。Auto Scaling を使用すれば、指定した利用率に応じてテーブルのキャパシティーが自動的に調整されるので、アプリケーションのパフォーマンスを確保しつつコスト削減が可能。

 

料金体系

料金を決める要素は下記の3つになる。

 

1. キャパシティーユニット

2. ストレージ容量

3. データ転送量

 

まとめ

DynamoDBの説明は以上です。

個人的には最初のNoSQLでしたがかなり掴みやすく、直感的な操作が可能なサービスとなっておりました。Dockerにて公式イメージもあるので、ローカル環境でNoSQLを試すのもいいかもしれません。

ただし設計となると話は変わってくるため、導入のハードルは高いものとなっているなという印象です。

最後まで読んでいただきありがとうございました。