🚴🏻‍♀️

【DynamoDB】AWSの基礎を学ぼう 温故知新編

2021/11/01に公開

概要

内容

「AWS エバンジェリストシリーズ AWSの基礎を学ぼう」で”温故知新編 DynamoDB”のイベントに参加した感想ページです。

「AWS エバンジェリストシリーズ AWSの基礎を学ぼう」とは

AWS エバンジェリストシリーズ AWSの基礎を学ぼう

以下、Connpassページより引用

Amazon Web Services (AWS)は現在200を超えるサービスを提供し、日々サービスの拡充を続けています。
このAWS エバンンジェリストシリーズでは週次でAWSのサービスをひとつづつ取り上げながらその基礎を説明していく 初心者、中級者をターゲットとした講座です。午後の仕事前にスキルアップを一緒にしませんか?
注意点 登壇者による発表内容はアマゾン ウェブ サービス ジャパンとして主催しているものではなく、コミュニティ活動の一環として勉強会の主催を行っているものです。

毎週ありがとうございます!

DynamoDB

DynamoDBで難しいって思うところ。

私的にですが、DynamoDBで難しいのは、操作方法よりもDB設計だと思うのですよね。
Twitterでも紹介したのですが、
https://twitter.com/OutputSeq/status/1454305264652341251

AWSさんが公開している資料、- イチから理解するサーバーレスアプリ開発 - サーバーレスアプリケーション向きのDB 設計ベストプラクティスを設計で悩んでいる方は試してみるのことがオススメします。
個人でやるよりチームでワークショップで「わかんねぇー」って言いながらやるのが楽しい。

設計ではなく、基本操作振り返り

基本的なキーワード

言葉 意味
テーブル SQLのテーブルの意味
アイテム SQLでのレコードの意味
属性 SQLでのカラムの意味、ただしパーティションキーのみ必須であり、他項目は不揃いでもOK
パーティションキー 必須項目。データをこのキーで分割するため、データのばらつきがある方が望ましい。
ソートキー 豊富なQueryやSort条件をサポート

代表的なオペレーション

言葉 意味
GetItem パーティションキーを条件で1件のアイテムを取得
PutItem 1件のアイテムを書き込み
Update 1件のアイテムを更新
Delete 1件のアイテムを更新
Query パーティションキーとソートキーを複合条件に合致するアイテムを取得(最大1MB)
Scan テーブルを全件取得(最大1MB)

LSI(Local Secondary Index)、GSI(Global Secondary Index)

言葉 意味
LSI パーティションキー+ソートキー以外のでの項目で検索を行うことが出来る
GSI パーティションを跨いで検索を行うことが出来る。

データ操作

データ準備

データ操作

  • パターン1:「パーティションキー(項目:EmployeeNo)」で抽出する。
    SQLで表現すると、「SELECT * FROM Employee WHERE EmployeeNo = '001'」のイメージ

  • パターン2:「パーティションキー(項目:EmployeeNo)」と「ソートキー(項目:InsDate)」で抽出する。
    SQLで表現すると、「SELECT * FROM Employee WHERE EmployeeNo = '001' AND InsDate like '2021-01-%'」のイメージ

  • パターン3:「パーティションキー(項目:EmployeeNo)」で抽出し、「キー以外(項目:EmployeeAge)」でフィルタをする。
    SQLで表現すると、「SELECT tmp.* FROM (SELECT * FROM Employee WHERE EmployeeNo = '001') as tmp WHERE tmp.EmployeeAge = 11」のイメージ
    キー以外でも検索することは可能。ただしデータとしては一度抽出するので、コストは2行分払うことになる。

  • パターン4:LSIで「パーティションキー(項目:EmployeeNo)」、「ソートキー(項目:EmployeeAge)」を設定し、抽出する。
    SQLで表現すると、「SELECT * FROM Employee WHERE EmployeeNo = '001' AND EmployeeAge = 11」のイメージ

    LSIの場合、パーティションキーはテーブルと合わせる必要があるが、ソートキーが選択できる。

  • パターン5:GSIで「パーティションキー(項目:EmployeeName)」、「ソートキー(項目:EmployeeAge)」を設定し、抽出する。
    SQLで表現すると、「SELECT * FROM Employee WHERE EmployeeName = 'Name001' AND EmployeeAge = 11」のイメージ
    GSIの場合、パーティションキーはテーブルと合わせる必要がない。

感想

データ10件入れたけど、2件しか使ってねぇな。。。

Discussion