Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
シンプルを極める。アンチパターンなDB設計の本質
Search
Facilo Inc.
December 01, 2025
Technology
17k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
シンプルを極める。アンチパターンなDB設計の本質
Facilo Inc.
December 01, 2025
More Decks by Facilo Inc.
See All by Facilo Inc.
Facilo Company Deck202607_採用サイト用
facilo_inc
0
2k
AIで信頼と次の一手をつくるUX
facilo_inc
0
70
Other Decks in Technology
See All in Technology
Meet AgentCore Identity Consent Portal
hironobuiga
3
150
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
2
490
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1.1k
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
230
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
640
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
150
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
370
OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは届かない場所へ
yutakaosada
0
140
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
220
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
1
160
2026-10-01_MagicPod_QAハーネスエンジニアリングとQA組織の未来像
ynisqa1988
1
280
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
220
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
41k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
250
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
380
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Optimising Largest Contentful Paint
csswizardry
37
4k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
From π to Pie charts
rasagy
1
380
Navigating Weather and Climate Data
rabernat
0
540
Transcript
シンプルを極める。 アンチパターンなDB設計の本質 1
CTO/Co-Founder 梅林 泰孝 @ystk_u - 2013年 Google に新卒⼊社、検索の品質チームに参画 - 2014年
サイバーエージェントに転職後、AirTrack の開 発責任者として開発‧プロダクト戦略にも携わり、国内 最⼤規模の位置情報プラットフォームに成⻑させる - 2018年 SmartNews の TechLead としてシリコンバレー に移住し、⽶国エンジニアチームを⽴ち上げ、 MAU 2000万超の Push 通知基盤をマネジメント - 2021.10 Facilo を共同創業 - 2024.2 シリーズ A 12億資⾦調達 - 2025.2 帰国 - 2025.11 従業員64⼈(内エンジニア19⼈) 2
associationとcache 親会社 ⼦会社 従業員 機能の on/off や default の振る舞いが設定可能で 親の設定を⼦供が上書きできる形で利⽤されている
3 機能の出し分けなんかだと毎 session で必要な情報だったりするので 親の親までアクセスするのを cache を利⽤して不必要な DB アクセスを絞る
associationとcache 4 pseudo code
associationとcache ALB App Sticky Session この cache は FileCache を使⽤
脱Redis FileCache 5 File なので User が round robin された違うサーバーに request するともちろんcache hit しなくなるかも。(同一親会社や子会社の hit率は高そうだけど) → ALB のSticky Session を使うことで同じサーバーに基本的に向くようにする ?「でもそれって、偏りがでるんじゃ」「 cache hit 率そもそも低すぎ....」 → 10万 DAU でも余裕で 2vCPU 1台でさばけている。 そんなに立派なリクエスト数捌いてる?、縦になるべく大きくして Redis 依存減らすほうがメ リット大きくない?( Redis ってマネージドってほどマネージドじゃないよね .... リシャー ディ....)、そして local file は早い...
ModelとDB設計 - DB 外部キーはいれない - トランザクションあんまり貼らない 6 - dependent: :destroy
でだいたい⼗分。外部キーあると、実⾏順序とか気にしないといけない 認知コスト増える。書き込み速度落ちる(すこしでも気にする理由後述) ぼっち record できたとしても参照失ってることも多いので、実害が出にくい。 トランザクションいるほど⼤切な依存ですか?これも認知コストが⾼くなる。 お⾦とか扱うとか critical な依存や、ぶっ壊れる可能性があり、ユーザーインパクトが多い ときのみ利⽤くらいでいんじゃない。
ModelとDB設計 - DB にunique 制約を⼊れて、model にはunique 制約をいれない 7 - 複数のサーバーだったり、マルチプロセスだったりマルチスレッドだったりで、そもそも
model の制約は厳密ではない。DB で守っていたら、無駄な select の発⾏も抑えられるし、い らないと思う。form 等のエラーメッセージが⼤切ならなにか⼯夫をいれる。 DB の unique 制約も uuid とかだったらまず被らないので index だけにしたほうが書き込み早 くていいと思う(すこしでも気にする理由後述)
ModelとDB設計 - 検索対象にならない項⽬は json field のような スキーマレスな column を使う( store
にする) 8 - store のいいところは json みたいなスキーマレスなも のでも、何がはいっているかを型として明⽰できるこ とにある。queryable でないデータって全部 json に 突っ込んでもいいと思っている。不可逆な変更ではな い。query したくなったら add column してパッチ当 てたらどうだろ。( json も index つけれたりするけど ね) かと⾔ってスキーマレスだから DynamoDB !とい うのもすこし違うと思う。latency もそうだけど、 パッチ当てづらい、schemaの versioning 管理しにく い。iteration が回しにくい。
パッチ⽤のAd-hoc Runner schemaless なjson field とパッチの持続可能な運⽤はセットで考える 9 - rails g
で作れるようにして、⽣成物の header に generate コマンドを書くことで ⽂化として根付かせる。同じ template で作ることで実⾏の管理をしやすくする。 migration に混ぜると rollback 耐性がなかったりするのでいれない。⽇付 versioning で gitignore した history file で各々管理する座組を作るくらいでわりと⼗分運⽤できる
マルチテナント, マルチプロダクトのDBのインフラ戦略 Product A Product B Product C Single DB
Cluster( Primary + Replica ) ( database 名で product ごとに分割) Primary Replica Replica 10 運⽤コストを極限まで下げる (現実的な⾒積もりを常にする) 複数のクラスターをサービスごとに最適化するのはコスト。 共有で CPU パワーつけたほうがインフラのエコシステムも享 受もしやすい。10年前より、ハイパフォーマンスで縦にもか なり⼤きくなるので、single primary の書き込みがボトル ネックには意外とならない。なるときは分割すればいいし、 そのときは結構組織サイズも⼤きくなっているくらい売上実 際出ているはずである。それくらいの作業は重くないでしょ う....
マルチテナント, マルチプロダクトのDBのインフラ戦略 11 更新系は参照系の5%程度 プロダクトの性質によるが、あと10プロダ クトは同じ Primary に載せられるんじゃな い....
疎結合な⾮同期処理(SQS) SQS Worker - SQS はフルマネージド(安定してる) - SolidQueue を使わないことで DB
の書き込み リソースを節約 - Rails の ActiveJob や Shoryuken のフォー マットに乗らない 再実⾏性をあげ、他 micro service から呼びや すくする。cli でちょろっと json message 送 るだけでも実⾏可能 脱密結合 12
検索は Rails でやらない( OpenSearch ) Rails で頑張りすぎない。 OpenSearch への indexing,
querying, analyzing は interface を汎化させることで multi product で活躍する⼤きなエコシステムになる App SQS Worker (indexing) 13
おしまい Follow me @ystk_u 14