【DynamoDB】AWSの基礎を学ぼう 温故知新編
概要
内容
「AWS エバンジェリストシリーズ AWSの基礎を学ぼう」で”温故知新編 DynamoDB”のイベントに参加した感想ページです。
「AWS エバンジェリストシリーズ AWSの基礎を学ぼう」とは
以下、Connpassページより引用
Amazon Web Services (AWS)は現在200を超えるサービスを提供し、日々サービスの拡充を続けています。
このAWS エバンンジェリストシリーズでは週次でAWSのサービスをひとつづつ取り上げながらその基礎を説明していく 初心者、中級者をターゲットとした講座です。午後の仕事前にスキルアップを一緒にしませんか?
注意点 登壇者による発表内容はアマゾン ウェブ サービス ジャパンとして主催しているものではなく、コミュニティ活動の一環として勉強会の主催を行っているものです。
毎週ありがとうございます!
DynamoDB
DynamoDBで難しいって思うところ。
私的にですが、DynamoDBで難しいのは、操作方法よりもDB設計だと思うのですよね。
Twitterでも紹介したのですが、
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