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
大容量データをDynamoDBで扱う際のMomento導入検討
Search
k1nakayama
June 22, 2023
Technology
910
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
大容量データをDynamoDBで扱う際のMomento導入検討
k1nakayama
June 22, 2023
More Decks by k1nakayama
See All by k1nakayama
Amazon Q Developerを活用したアーキテクチャのリファクタリング
k1nakayama
2
390
GitLab Duo with Amazon Q の機能実装を試してみた
k1nakayama
0
190
GitLab Ultimateを用いたDevSecOps実践事例
k1nakayama
0
230
GitLabを活用したDevSecOps
k1nakayama
1
490
GitLabを活用したクラウドネイティブ アプリケーションセキュリティ
k1nakayama
0
220
サーバーレス開発を円滑に進めるための実践DevSecOps
k1nakayama
1
560
Deep Dive on DevOps for Serverless Applications
k1nakayama
0
390
Access to multiple microservices on AWS
k1nakayama
3
1.6k
Other Decks in Technology
See All in Technology
protovalidate-es を導入してみた
bengo4com
0
160
あなたの AI ワークスペースに、 専門コーダーを連れてくる - Amazon Quick Desktop 最新情報
kawaji_scratch
1
120
2026 TECHFRESH 畢業分享會 - 開發日常大解密!從領域驅動到企業級上線
line_developers_tw
PRO
0
150
2026TECHFRESH畢業分享會 - Lightning Talk - E起 See See : 電商推薦讀心術? 數據說了算
line_developers_tw
PRO
0
140
実装は速くなった、レビューはどうする? ― 自身のレビューをAIで再現させるサーヴァントエンジニアリングのすゝめ / Implementation got faster. So what about reviews? — An invitation to Servant Engineering: Recreating your own code reviews with AI
nrslib
8
4.4k
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
830
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
1.9k
ChatworkとBPaaS 異なる特性で学んだAI機能開発の ベストプラクティス
kubell_hr
2
3.4k
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
140
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
450
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
150
MIERUNE JCT 発表資料「宇宙から伊能忠敬ごっこ」
syuchimu
0
200
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
140
The Curious Case for Waylosing
cassininazir
1
380
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
A Soul's Torment
seathinner
6
2.9k
Everyday Curiosity
cassininazir
0
230
WCS-LA-2024
lcolladotor
0
620
The Curse of the Amulet
leimatthew05
1
13k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
210
Transcript
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 大容量データをDynamoDBで扱う際 のMomento導入検討 Keiichi
Nakayama Vice General Manager Cloud Partner Group CHARA-WEB Co., Ltd.
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 自己紹介 • 中山
桂一 ( @k1nakayama ) • 株式会社キャラウェブ クラウドパートナーグループ 副部長 • クラウドインテグレーション事業をリード • AWS Community Builders (Serverless) • AWS x Serverless / GitLab / DevSecOps
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 本日のテーマ
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証内容
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. サンプルデータ
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証1-1:DynamoDBから常にScanし、一部を返却 472.16ms $0.00009134467
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証1-2:Momentoにキャッシュがあったら取り出し 564.06ms $0.0000923
32.38ms $0.00000068
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証1:まとめ Ø 毎回スキャンをするより、キャッシュがあったらLambdaの実行時間で15分の1、コ
ストは134分の1に削減できる Ø キャッシュを作成する際は、毎回スキャンをするより、100msほど長く掛かるが、 コストはほぼ同じ Ø 実質10行前後のコード追加で大幅なパフォーマンス改善ができる!
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2:1MB以上のデータを対象とする Momentoはデフォルトで1MB/アイテムが上限となるため、1MB以上のデータをキャッシュさ せたい場合は、データを圧縮して出し入れする必要がある
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2-1:1MB以上のデータをScanして返却する 1,606,475 1658.31ms
$0.00010123502
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2-2:キャッシュがあったら取り出し(データ圧縮) 1,606,475 2344.75ms
$0.000107 237.99ms $0.000002293
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2-3:Momentoの代わりにS3使用(圧縮せず) 1,606,475 1927.87ms
$0.000104 219.49ms $0.00000206
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2:まとめ Ø 圧縮・解答の処理に100ms弱かかる
Ø S3に保存する場合と比べて、ほぼ同等レベルの速度・コストで処理可能 Ø Momentoのスループット制約等を考慮し、キャッシュする容量やI/Oの頻度を照ら し合わせて検討する。容量が大きい場合は、Momentoが向かない可能性もある Ø いずれにしても、何らかのキャッシュ先を作って保存するべき
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証3-1:1レコードをGetItemして返却 23.93ms $0.0000005425
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証3-2:キャッシュがあったら取り出し(GetItem) 30.87ms $0.000000601
16.78ms $0.00000034183
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証3:まとめ Ø 一番DynamoDBのパフォーマンスが出そうなGetItemでも、キャッシュがあったら
Lambdaの実行時間で30%、コストは37%削減できる Ø キャッシュを作成する際は、毎回スキャンをするより、7msほど長く掛かるが、コス トはほぼ同じ Ø キャッシュを作成する場合を含めて、Lambdaの実行時間より、API Gateway等と のインテグレーションやAWSリソースまでの通信によるレイテンシーが大きいため、 時間はキャッシュをしてもしなくても誤差の範囲だが、間違いなくコストは削減でき るので、Momentoを併用する価値は大きい 検証3と似た検証をして、同じような結果を報告している公式ブログ https://jp.gomomento.com/blog/oops-momento-ate-60-percent-of-my-lambda- latencies
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. DynamoDB + Momentoの活用(ここまでのまとめ)
Ø 検証結果からDynamoDBを利用する際に、Momentoを組み合わせることは、相 性が非常によい Ø 特にGetItemや100KB程度の結果となるクエリ結果のキャッシュは、UX、コスト共 にメリットが得られる DynamoDBを使う際は、Momentoとセットで使っていくと、みんなハッピー!! ほんとに? キャッシュされているアイテムが更新されたらどうするの!?
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. アイテムの更新アーキテクチャ (PutItem /
GetItem)
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. アイテムの更新アーキテクチャ (Query /
PutItem)
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. こんなことが出来たら良さそうアーキテクチャ
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 他にも欲しい機能 Ø RedisのKEYS
そもそもKeyの存在チェックをするAPIはあるが、Keyの一覧を返すAPIは存在しな いため、キャッシュを能動的にクリアしたい場合などにオペレーションがしにくい KeysのAPIがあり、パターン一致した一覧を取得できる場合、簡易的なクエリを キャッシュアイテムに対して行うことも出来るため、ユースケースが広がりそう Ø DynamoDBのプロキシ的な機能 今回のQuery結果のアイテムを含め、DynamoDBのキャッシュを透過的に扱える ようになったら、もはやMomentoを使わない理由がなくなってくる Ø 検索機能(ロードマップにあった?) ElasticsearchやAlgoliaのような検索エンジン的なものをサーバーレスで!
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. Momentoを使う上でのTips Ø SDKは言語毎にサポートされているAPIが異なる
https://docs.momentohq.com/ja/develop/api-reference/language-support Ø ドキュメントはたまに細かな点で間違っていたり、どこにも記載されていないものも ある GitHubのSDKのリポジトリは、それなりにしっかりとテストコードが書かれている ので、テストコードを参考に実装してみると解決が早い ドキュメントの間違いを見つけたら、ドキュメントのリポジトリでPR出していこう Ø わからないことや、期待したいことなどは、積極的に発信していくとよい Discord上や場合によってはTwitter上などで、Momentoについて発信していくと、 驚異的なスピードで解決できるので、悩む前に聞くが一番!
Accelerate your business with the cloud.