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
NoSQLの付き合い方
Search
PharmaX(旧YOJO Technologies)開発チーム
August 24, 2022
Technology
0
72
NoSQLの付き合い方
2022.06.30 LT会 江藤さん発表資料
PharmaX(旧YOJO Technologies)開発チーム
August 24, 2022
Tweet
Share
More Decks by PharmaX(旧YOJO Technologies)開発チーム
See All by PharmaX(旧YOJO Technologies)開発チーム
AIエージェントの評価・改善サイクル
pharma_x_tech
1
70
MCP & Computer Useをフル活用した社内効率化事例〜現在地と将来の展望
pharma_x_tech
1
200
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
6
1.7k
Roo CodeとClaude Code比較してみた
pharma_x_tech
3
940
Roo Codeにすべてを委ねるためのルール運用
pharma_x_tech
1
540
Cline&CursorによるAIコーディング徹底活用―Live Vibe Coding付き
pharma_x_tech
3
1.8k
Computer Use〜OpenAIとAnthropicの比較と将来の展望〜
pharma_x_tech
6
1.2k
AIコーディングの最前線 〜活用のコツと課題〜
pharma_x_tech
4
3.4k
AIエージェント開発のノウハウと課題
pharma_x_tech
10
7.5k
Other Decks in Technology
See All in Technology
TableauLangchainとは何か?
cielo1985
1
140
Getting to Know Your Legacy (System) with AI-Driven Software Archeology (WeAreDevelopers World Congress 2025)
feststelltaste
1
180
衛星運用をソフトウェアエンジニアに依頼したときにできあがるもの
sankichi92
1
210
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
2
7.8k
Contributing to Rails? Start with the Gems You Already Use
yahonda
2
120
オフィスビルを監視しよう:フィジカル×デジタルにまたがるSLI/SLO設計と運用の難しさ / Monitoring Office Buildings: The Challenge of Physical-Digital SLI/SLO Design & Operation
bitkey
1
290
Enhancing SaaS Product Reliability and Release Velocity through Optimized Testing Approach
ropqa
1
250
Delta airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
deltahelp
0
1.1k
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
0
150
LLM時代の検索
shibuiwilliam
2
620
CDK Toolkit Libraryにおけるテストの考え方
smt7174
1
360
AWS CDK 入門ガイド これだけは知っておきたいヒント集
anank
4
490
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
72
4.9k
Typedesign – Prime Four
hannesfritz
42
2.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
GraphQLとの向き合い方2022年版
quramy
49
14k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Designing for humans not robots
tammielis
253
25k
Six Lessons from altMBA
skipperchong
28
3.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Transcript
NoSQLのテーブル設計
ある時期のNoSQL
None
NoSQL is 素晴らしい • 早い + 軽量 ◦ 分散処理 •
シンプル ◦ 巨大なjson = 扱いやすい ◦ 学習コストも低い • 柔軟性が高い ◦ json形式で巨大なデータも突っ込める
今のNoSQL
None
NoSQL is 辛い • 検索が貧弱 ◦ 絞り込みの制約が辛い • トランザクション ◦
保証できないもの ▪ 昔NoSQLでトランザクションを実現する黒魔術があった • 拡張性がありすぎる ◦ 同じテーブルでも 値の形が違ったりする
つまりNoSQLには 特有の向き合い方が必要
今回はテーブル設計(dynamo)のお話
• table ◦ RDBのテーブルに相当する。この中にデータを入れる • parimary key ◦ データを一意に絞るためにキーで partion
key, sort key がある ▪ 後述 • Attribute ◦ primary key 以外のカラムのこと ◦ dynamoはカラムに対して型を指定できる。 • index ◦ GSI, LSI があるが、目的は検索条件を増やすため ◦ 今回はGSIを使っている(以下indexと呼称) 基礎概念
• partion key(pk), sort key(sk)を使ってテーブルを作る ◦ pkは一意なIDでこれで検索をかける ▪ PKを指定したらひもづく Attributeが全て取得できる
◦ skはソートに使うキーで range検索やdescなどができる ▪ skだけで検索を行うことはできない。 • indexでwhere対象を増やす ◦ indexをカラムに当てるとそのカラムで検索がかけられるようになる • 検索上限は取得サイズで決まる ◦ 一度の検索で最大1MG dynamoのクエリ制約
pk
index
クエリパターンから考えるしかない!
サンプル(ユーザーの記事投稿サービス) • ユーザーの一覧情報を取得したい • ユーザーの一覧を登録した順にソートしたい • ユーザーの記事一覧を最新順で取得したい • ユーザーの記事一覧でいいねが多い順に取得したい
キーの設計 概念名 PK SK user user_name register_at post user_name post_at
サンプル(ユーザーの記事投稿サービス) • ユーザーの一覧情報を取得したい ◦ dynamoはデフォルトで全件取得があるからいけそう • ユーザーの一覧を登録した順にソートしたい • ユーザーにひもづく記事一覧を最新順で取得したい •
ユーザーにひもづく記事一覧でいいねが多い順に取得したい
テーブル設計 PK SK Attribute user user_nam e(john) resgiter_at (20210312 )
birth_day (1月2日) profile (こんにち わ) post user_nam e(john) post_at (20221203 ) title (記事1) content (テスト) like_count (12)
サンプル(ユーザーの記事投稿サービス) • ユーザーの一覧情報を取得したい ◦ dynamoはデフォルトで全件取得があるからいけそう • ユーザーの一覧を登録した順にソートしたい ◦ userテーブルでregister_atをsortkeyにしてるからいけそう •
ユーザーにひもづく記事一覧を最新順で取得したい ◦ postテーブルでpost_atをsort keyにしてるからいけそう • ユーザーにひもづく記事一覧でいいねが多い順に取得したい
indexの設計 PK SK Attribute post user_nam e like_count title content
post_at
サンプル(ユーザーの記事投稿サービス) • ユーザーの一覧情報を取得したい ◦ dynamoはデフォルトで全権取得があるからいけそう • ユーザーの一覧を登録した順にソートしたい ◦ userテーブルでregister_atをsortkeyにしてるからいけそう •
ユーザーにひもづく記事一覧を最新順で取得したい ◦ postテーブルでpost_atをsort keyにしてるからいけそう • ユーザーにひもづく記事一覧でいいねが多い順に取得したい ◦ index貼って,user_nameから検索がかけられる ◦ like_countをskにしてるからいけそう
完
最後に
クエリパターンを最初に考えましょう