AWSのDynamoDBについてまとめています。
AWSのDynamoDBは、NoSQLデータベース 大容量で高速読み書きが可能な非リレーションDB
Amazon DynamoDB は、NoSQLデータベース。key-valueとドキュメントデータモデルをサポートしています。Amazon DynamoDBは、ペタバイトレベルの大容量データの読み書きが可能なデータベース。通常のリレーショナルデータベースなら、高負荷で処理時間がかかりすぎるような、1秒あたり数千万の読み込み・書き込みリクエストに対応できます。大容量データのデータをリアルタイムレスポンスでアクセスすることが求められるインターネットアプリケーションなどに最適です。
関連)Amazon DynamoDB(マネージド NoSQL データベース)| AWS
NoSQLデータベースでは、キー値とドキュメントと呼ばれるデータがペアになって格納されます。以下は、書籍情報の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 } } ]
NoSQLデータベースは、商品カタログのようなデータごとに属性が異なるデータを保管するのに向いています。例えば商品データベースに「食品」と「パソコン」のデータを格納する場合、「食品」なら原材料や賞味期限といった属性が必要になりますし、「パソコン」なら、CPUやメモリのスペック、ディスク容量や対応OSといった属性が必要になります。このように異なった属性数を持つデータを1つのデータベースに格納できるため、高速で読み込みが可能なんですね。
属性数のことなる情報を1つの「ドキュメント」としてまとめて格納することで、テーブル構造を変えることなく、全てのデータを同一のデータベースに格納できます。
AWS DynamoDBの料金
DynamoDB には「オンデマンド」と「プロビジョニング済み」という 2 種類のキャパシティーモードがあります。
オンデマンドは、テーブルに対して実行したデータの読み取り・書き込みに対して課金されます。実行した処理の分だけ支払いが発生するモードです。プロビジョニング済みモードは、1秒あたりの読み込みと書き込みの回数を指定する方式。読み書きの速度を調整することで発生するコストをコントロールできます。
アプリケーショントラッフィクが予測できない場合や、使った分のみ支払うほうが都合が良い場合はオンデマンドモードが良いでしょう。アプリケーションのトラフィックが予測できる場合は、トラフィック変化の割合がゆるやかな場合はプロビジョニング済みモードでコストが節約できます。
オンデマンドモードで、リージョンが米国東部(オハイオ)の場合、読み書きに発生する料金は以下のとおりです。
- 書き込み要求単位 書き込み要求ユニット 100 万あたり 1.25USD
- 読み出し要求単位 読み出し要求ユニット 100 万あたり 0.25USD
月間355万回の書き込みで、4.44USD(100 万回あたり 1.25 USD × 3.55)、355万回の読み取りで0.89 USD (100 万回あたり 0.25 USD × 3.55)となります。
AWSの見積もりツールで、具体的な金額の見積もりが可能です。見積もりに必要な情報は、DynamoDBの機能、データストレージの容量、読み込み、書き込みの設定です。
【関連記事】
▶AWSの見積もりは、AWS Pricing Calculatorで自動計算 ユースケースから流用も可能
AWS Dynamoの使い方
Amazon Dynamoへのデータ書き込みやデータ読み取りは、対応したプログラミング言語を使ってAPI経由で実行可能です。
以下は、Pythonを使ってデータを格納する例です。boto3モジュールを使用して、書籍情報をDynamoDBに書き込んでいます。
import boto3 dynamodb = boto3.resource('dynamodb', region_name='us-east-1') table = dynamodb.Table('Books') with table.batch_writer() as batch: batch.put_item(Item={"Author": "John Grisham", "Title": "The Rainmaker", "Category": "Suspense", "Formats": { "Hardcover": "J4SUKVGU", "Paperback": "D7YF4FCX" } }) batch.put_item(Item={"Author": "John Grisham", "Title": "The Firm", "Category": "Suspense", "Formats": { "Hardcover": "Q7QWE3U2", "Paperback": "ZVZAYY4F", "Audiobook": "DJ9KS9NM" } }) batch.put_item(Item={"Author": "James Patterson", "Title": "Along Came a Spider", "Category": "Suspense", "Formats": { "Hardcover": "C9NR6RJ7", "Paperback": "37JVGDZG", "Audiobook": "6348WX3U" } }) batch.put_item(Item={"Author": "Dr. Seuss", "Title": "Green Eggs and Ham", "Category": "Children", "Formats": { "Hardcover": "GVJZQ7JK", "Paperback": "A4TFUR98", "Audiobook": "XWMGHW96" } }) batch.put_item(Item={"Author": "William Shakespeare", "Title": "Hamlet", "Category": "Drama", "Formats": { "Hardcover": "GVJZQ7JK", "Paperback": "A4TFUR98", "Audiobook": "XWMGHW96" } })
以下は、pythonでデータを読み出すPythonコードの例です。Author=John Grisham、Title=The Rainmakerのデータを読み込み、表示しています。
import boto3 dynamodb = boto3.resource('dynamodb', region_name='us-east-1') table = dynamodb.Table('Books') resp = table.get_item(Key={"Author": "John Grisham", "Title": "The Rainmaker"}) print(resp['Item'])
実行結果は以下のようになります。
$ python get_item.py {'Title': 'The Rainmaker', 'Formats': {'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX'}, 'Author': 'John Grisham', 'Category': 'Suspense'}
AWS DynamoDBのまとめ
- Amazon DynamoDBはNoSQLデータベースサービス
- データベースへの書き込みと読出しはプログラミング言語からAPI経由で実行可能
- 料金体系は、オンデマンドとプロビジョニング済みモードの2つが選べる