Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MangaTechエンジニアの日曜アプリ開発の勧め - AWS Amplify 時代の安くて ...
Search
dublook
May 10, 2019
Programming
4
1.8k
MangaTechエンジニアの日曜アプリ開発の勧め - AWS Amplify 時代の安くて 強いDB設計
S3をデータベースとして使うメリット
・需要予測がいらない!
・料金が安い。めっちゃ安い
・大抵DBが一番高い
・大きなデータも小さなデータも入れられる
・同時大量書き込みでも速い
dublook
May 10, 2019
Tweet
Share
More Decks by dublook
See All by dublook
好きなマンガ読める率100%にするために、AWS AmplifyでVueアプリをデプロイしてみた
dublook
0
150
Other Decks in Programming
See All in Programming
ニーリーにおけるプロダクトエンジニア
nealle
0
570
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
200
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
1
570
LT 2025-06-30: プロダクトエンジニアの役割
yamamotok
0
530
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
560
VS Code Update for GitHub Copilot
74th
1
410
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
370
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
280
5つのアンチパターンから学ぶLT設計
narihara
1
120
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
240
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
250
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
970
Featured
See All Featured
Writing Fast Ruby
sferik
628
61k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
330
24k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
930
Faster Mobile Websites
deanohume
307
31k
Building Adaptive Systems
keathley
43
2.6k
Unsuck your backbone
ammeep
671
58k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Become a Pro
speakerdeck
PRO
28
5.4k
A Tale of Four Properties
chriscoyier
160
23k
Transcript
AWS Amplify 時代の安くて 強いDB設計 MangaTechエンジニアの日曜アプリ開発の勧め 2019-05-10 @TechDo
今日のゴール ◉ 好きなことについてなんかアプリ作ってみよ ◉ AWS Amplify使ってみよ ◉ サーバーレス, DBレスって楽チンだね ってなること!
2
今日やらないこと ◉ FirebaseとAmplifyどっちがいいの? ◦ Firebase使ったことない・・ ◦ 基本AWSに慣れているゆえ 3
好きなマンガ読める率100%へ! スキ100! 1 4
5 自己紹介
6 じゃなくて ねこ紹介!
◉ スキ100!プロジェクトの公式キャラクター ◉ 普段はワインバーを経営 (ソムリエ有資格猫) ◉ マンガ好きが高じて、たまにお客さんに すっとオススメしてくれる ◉ 生みの親はレポ漫画家の伊佐坂みつほ先生
ソムねこ 7 伊佐坂イエローで おなじみ!
8 つまり アプリ作りが盛り上がって キャラまで作っちゃった マンガ好きの悩みを見かねた ソムねこが来てくれた!
自己紹介 9 マンガテック エンジニア! ふーん
“ Amazonのレコメンドもいいけど、 とにかく好きなマンガだけ オススメしてくれよ!!! 10 スキ100!のWhy
こんな人を助けたい! 常に自分の知 らない、ステキ な新刊を見つけ たい! マンガを毎月か なりの数を買っ ている Kindleで マンガを読んで
いる 11
こんな感じ 12
こんな感じ 13
詳細はこちら 14 suki100.com
“ 機能要望、わがまま言ってすいません笑 でも愛用しているが故です! 15 苅田 明史 (マンガ新聞創業者)
新規アプリ?? まずはAWS Amplifyに頼れ! スキ100!アプリで使い方をつかめ 2 16
AWS Amplifyってなに? 17 https://aws-amplify.github.io/docs/
18 いっぱいあり過ぎて どれ使えばいいかわかんない
AWS Amplifyってざっくりいうと、 19 親切な「お節介」 • Amplifyがないとできないことはない • 「単純なアプリ作るなら、これ使いなよ」 • 「どうせこういう使い方するだろうから、ちょっと便
利にしといたよ」
20 Storageは S3かDynamo 認証は Cognito! ホスティングは S3->CloundFront
ナイスおせっかい! 21 • AWSのサービス名を意識しなくていい ◦ (あとから意識することもできる) • 「単純なアプリ作るなら、これ使いなよ」 • 「どうせこういう使い方するだろうから、ちょっと便
利にしといたよ」
認証の追加 22 https://aws-amplify.github.io/docs/js/authentication
データベース (Storage) の追加 23 https://aws-amplify.github.io/docs/js/storage
ウェブアプリのホスティングを追加 24 https://aws-amplify.github.io/docs/cli/hosting?sdk=js
25 このコマンドたちを 打ってできた構成
Amplify Console 26 One more thing... 開発環境 本番環境
バージョンの切り戻しもワンクリックで 27
ハマったポイント 28 ◉ Amplifyのプロジェクト内で一つのStackができる ◦ Serverless frameworkなどで共通のS3をいじった りできない ◦ 対策:
コンソール画面から手動で設定変更 ◦ (ほんとはymlでできると思うが手でやった方が早かった )
AmplifyでNOデータベース Amplify 時代の安くて強いDB設計 3 29
再掲: データベース (Storage) の追加 30 https://aws-amplify.github.io/docs/js/storage
この質問の意図は? 31 S3 or DynamoDB
32 S3って画像とか置くところ じゃないの??
事実: スキ100!はS3だけで作ってます 33 ランキングも ユーザーに合 わせた新刊通 知も ユーザーごと の表示設定も フィルター情報
も
ただの変態プレイじゃない: S3を使うメリット 34 ◉ .需要予測がいらない! ◉ 料金が安い。めっちゃ安い ◦ 大抵DBが一番高い ◉
大きなデータも小さなデータも入れられる ◉ 同時大量書き込みでも速い
AmplifyにおけるS3の権限テンプレ 35 public/ protected/ private/ 誰でもWRITE/READ可 ログインユーザーが自分のと ころだけWRITE/READ可 READは誰でも可能 WRITEはログインユーザーのみ
36 再掲: スキ100!の構成
◉ 整合性 ◦ 当然「結果整合性」 ◦ WRITEは非正規化して一回で済ませる ◦ DELETEは、論理削除データをINSERTする 37 S3でデータモデリングするコツ
◉ 検索性 ◦ インデックスは遅延して作成 ▪ S3 event -> SQS ->
Lambdaで実装 ◦ なるべくワンリクエストで済むデータを事前に作っとく 38 S3でデータモデリングするコツ
◉ パフォーマンス ◦ S3のクエリを理解する ▪ キーによる前方一致検索は可能 ▪ コンテンツの一括取得はできない ◦ 「キー」もデータである
39 S3でデータモデリングするコツ
キー設計 ◉ 「持ってる」ボタンが押された時 ◦ private/futami/onepiece1/20190510164001/have/INSERT.json ◉ 「元に戻す」ボタンが押された時 ◦ private/futami/onepiece1/20190510164003/have/DELETE.json 40
「元に戻す」のデータモデリング
読み込み時 ◉ Storage.vault.list({ prefix: “futami/” }) ◦ private/futami/onepiece1/20190510164001/have/INSERT.json ◦ private/futami/onepiece1/20190510164003/have/DELETE.json
◉ → ロジックでタイムスタンプを比較する ◦ この場合は、”「読まない」ではない” になる 41 「元に戻す」のデータモデリング
◉ データ量が冗長になるので、いつか削除する ◦ Compaction ◦ 日次バッチとかで ◦ それでも長く使うと、めっちゃデータが増えちゃう ▪ なんか対策考える
→ 多分大変 42 「元に戻す」のデータモデリング
43 データモデリングの話は Qiitaに書きたい
大きな視座: 「頼る」ことで歴史が進む 44 https://slideship.com/users/@marcy-terui/presentations/2017/11/5vUYExsSUrPbyjyjKA7J99/?p=6
45 好きなマンガ読める率 100%へ!
46 さあ、みんな Amplifyで日曜エンジニアリング!