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
75
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)開発チーム
2025.09.02_AIコーディングを利用した開発自動化を目指しての座談会
pharma_x_tech
5
160
AIコーディングを前提にした開発プロセス再設計〜開発生産性向上に向けた試行錯誤〜
pharma_x_tech
4
270
AIエージェントの評価・改善サイクル
pharma_x_tech
2
410
MCP & Computer Useをフル活用した社内効率化事例〜現在地と将来の展望
pharma_x_tech
1
320
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
6
2.1k
Roo CodeとClaude Code比較してみた
pharma_x_tech
5
2.8k
Roo Codeにすべてを委ねるためのルール運用
pharma_x_tech
1
960
Cline&CursorによるAIコーディング徹底活用―Live Vibe Coding付き
pharma_x_tech
3
1.9k
Computer Use〜OpenAIとAnthropicの比較と将来の展望〜
pharma_x_tech
6
1.2k
Other Decks in Technology
See All in Technology
AWS Top Engineer、浮いてませんか? / As an AWS Top Engineer, Are You Out of Place?
yuj1osm
1
120
about #74462 go/token#FileSet
tomtwinkle
1
430
From Prompt to Product @ How to Web 2025, Bucharest, Romania
janwerner
0
120
綺麗なデータマートをつくろう_データ整備を前向きに考える会 / Let's create clean data mart
brainpadpr
2
260
SOC2取得の全体像
shonansurvivors
1
410
Azure Well-Architected Framework入門
tomokusaba
1
330
Adminaで実現するISMS/SOC2運用の効率化 〜 アカウント管理編 〜
shonansurvivors
3
340
VCC 2025 Write-up
bata_24
0
180
GA technologiesでのAI-Readyの取り組み@DataOps Night
yuto16
0
280
生成AIを活用したZennの取り組み事例
ryosukeigarashi
0
210
データエンジニアがこの先生きのこるには...?
10xinc
0
450
Optuna DashboardにおけるPLaMo2連携機能の紹介 / PFN LLM セミナー
pfn
PRO
2
900
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
189
55k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
850
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Building Adaptive Systems
keathley
43
2.8k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Code Review Best Practice
trishagee
72
19k
Designing for Performance
lara
610
69k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
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にしてるからいけそう
完
最後に
クエリパターンを最初に考えましょう