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
93
0
Share
NoSQLの付き合い方
2022.06.30 LT会 江藤さん発表資料
PharmaX(旧YOJO Technologies)開発チーム
August 24, 2022
More Decks by PharmaX(旧YOJO Technologies)開発チーム
See All by PharmaX(旧YOJO Technologies)開発チーム
PdMによるLiveバイブコーディング〜プロトタイプ開発実践〜
pharma_x_tech
1
70
2025.10.28_CodexとClaude Codeの比較検討 社内座談会
pharma_x_tech
2
600
LLMのアウトプットの評価と改善 〜DSPyによるプロンプト最適化入門によせて〜
pharma_x_tech
6
1.2k
2025.09.02_AIコーディングを利用した開発自動化を目指しての座談会
pharma_x_tech
5
340
AIコーディングを前提にした開発プロセス再設計〜開発生産性向上に向けた試行錯誤〜
pharma_x_tech
4
430
AIエージェントの評価・改善サイクル
pharma_x_tech
2
600
MCP & Computer Useをフル活用した社内効率化事例〜現在地と将来の展望
pharma_x_tech
1
440
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
7
2.6k
Roo CodeとClaude Code比較してみた
pharma_x_tech
5
6.2k
Other Decks in Technology
See All in Technology
『家族アルバム みてね』における インシデント対応との向き合い方 / Approach incident response in Family Album
kohbis
2
220
JEP 522 Deep Dive - G1 GC同期コスト削減によるスループット向上を徹底検証&解説
tabatad
1
130
まだ道半ば、AI-DLCを歩み始めている話
news_it_enj
2
200
Python開発環境にハーネス適用を検討する
yuuka51
1
530
はじめてのAI-DLC
yoshidashingo
2
570
CloudFront VPCオリジンとVPC Latticeサービスの内部ALBをマルチアカウントで一元利用しよう
duelist2020jp
5
240
TypeScript で Platform SDK を作る技術
toiroakr
1
320
AI時代に求められる思考のパラダイムシフト
nrinetcom
PRO
1
160
権限管理設計を完全に理解した
rsugi
2
220
freee-mcpを Local→Remote で出してわかった MCP認可実装のリアル
terara
3
740
形式手法特論:公平性制約の位相的特徴づけ #kernelvm / Kernel VM Study Kansai 12th
ytaka23
1
430
イベントストーミングとKiroの仕様駆動開発で実現する要件の認識合わせプロセス
syobochim
6
690
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
エンジニアに許された特別な時間の終わり
watany
107
240k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
200
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
190
The SEO identity crisis: Don't let AI make you average
varn
0
470
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
190
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Skip the Path - Find Your Career Trail
mkilby
1
130
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
430
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
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にしてるからいけそう
完
最後に
クエリパターンを最初に考えましょう