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
5分でわかる イミュータブル データモデル
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
akshimo
November 22, 2024
500
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5分でわかる イミュータブル データモデル
akshimo
November 22, 2024
More Decks by akshimo
See All by akshimo
traitは本当に悪者か?
shimomura
0
430
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
220
Re: AIがコードを書いてくれるなら、新米エンジニアは何をする?
shimomura
0
350
新潟の勉強会を盛り上げたい!
shimomura
0
130
その設計、 本当に価値を生んでますか?
shimomura
3
370
私の推し技術(DERTA Gig #18)
shimomura
1
130
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
2
1.6k
アラートの話 をしよう!
shimomura
0
140
serverless
shimomura
1
240
Featured
See All Featured
A Soul's Torment
seathinner
8
3.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
The Invisible Side of Design
smashingmag
301
52k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Producing Creativity
orderedlist
PRO
348
41k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
550
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
How STYLIGHT went responsive
nonsquared
100
6.3k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
Transcript
5分でわかる イミュータブル データモデル Niigata5分Tech #14
• akshimo(あくしも) ◦ X:@akshimo • 東京出身 ◦ 2021年〜新潟へ移住 • 無職
• 好きなもの ◦ アジャイル、スクラム ◦ DDD、BDD、イベント駆動 ◦ 物理学、哲学 ◦ ウイスキー、アブサン 自己紹介
イミュータブル データモデル とは?
Yoshitaka Kawashimaさんが考案したモデリング手法 。 データの更新に注目し、イミュータブル=更新されないモデルを設 計していくことで複雑さに立ち向かうもの。 プログラミングの文脈で語られるイミュータブルなモデル(return this;しないでreturn new…するやつ)とは別物です。 ※今回はKawashimaさん含め複数の方の書籍・記事などを混 ぜて話すので注意してください。参考文献の一読をオススメしま
す Immutable Data Model
イミュータブル データモデリング
イミュータブル データモデリング
永続化 関心 変更 アプローチ データモデリング 意識する 客観的な 事実・データ ゆるやか 部分から全体
ドメインモデリング 意識しない 意味と目的がある データの加工・判断 のロジック 頻繁 全体から部分
ちなみに ドメインモデルと データモデルのギャップを インピーダンスミスマッチと呼ぶが 今回はその話は割愛
イミュータブル データモデリング
更新が複雑さを生み出す CRUDのうちUPDATEがもっともシステムを複雑化する。更新には複雑な ルールが伴うからだ。業務的に複雑なルールが存在するのは仕方ないこと もあるが、システム、設計で複雑さを更に増さないようにしたい。 UPDATEに 着目し、その発生をできるだけ削ることによって複雑さをおさえるためには、 まずデータモデルをそのように設計しておかなけれなならない。 Kawashima 『イミュータブルデータモデル』 https://scrapbox.io/kawasima/イミュータブルデータモデル
とはいえUPDATEを 全くしないことは 現実的ではない …
とはいえUPDATEを 全くしないことは 現実的ではない … =>UPDATEするモデルと しないモデルを分ける
DBに保存するもの リソース (ヒト・モノ) イベント (コト) • 事業活動の当事者 • 業務の関心の対象 •
UPDATE可能 • ユーザー、担当者、商品、店舗... • 過去に起きたこと • これから起こること(約束) • リソースの関係として出現 • UPDATE不可 • 注文、予約、キャンセル...
DBに保存するもの リソース (ヒト・モノ) イベント (コト) • 事業活動の当事者 • 業務の関心の対象 •
UPDATE可能 • ユーザー、担当者、商品、店舗... • 過去に起きたこと • これから起こること(約束) • リソースの関係として出現 • UPDATE不可 • 注文、予約、キャンセル... 重要!
起きたコトは変更されることはない 起きたコト 金額 ユーザーID 日時 入金 3,000円 1 2024/11/21 10:00
入金 4,000円 1 2024/11/21 10:30 出金 6,000円 1 2024/11/21 11:00 入金 2,000円 1 2024/11/21 11:30
起きたコトから今の状態を計算できる 起きたコト 金額 ユーザー ID 日時 入金 3,000円 1 2024/11/21
10:00 入金 4,000円 1 2024/11/21 10:30 出金 6,000円 1 2024/11/21 11:00 入金 2,000円 1 2024/11/21 11:30 残高 3,000円
イチイチ計算は辛いので 計算した結果(リソース)を保存しておく
コトとモノはトランザクション整合性を もたなくても良い =>結果整合性
コトとモノはトランザクション整合性を もたなくても良い =>結果整合性 業務によっては数 ms~数日のタイムラグが あっても問題ない
コトとモノはトランザクション整合性を もたなくても良い =>結果整合性 業務によっては数 ms~数日のタイムラグが あっても問題ない ここからCQRSやイベントソーシングの 話にも発展していく
1. エンティティを抽出する 2. エンティティを分類する 3. イベントエンティティには1つの日時属性しかもたないようにす る 4. リソースに隠されたイベントを抽出する 5.
非依存リレーションシップを交差エンティティにする Kawashima 『イミュータブルデータモデル』 https://scrapbox.io/kawasima/イミュータブルデータモデル イミュータブルデータモデリングの手順
FAQ (よく尋ねられると思われる質問)
これはそのまま RDB設計にするの?
NO! RDBにはRDBの都合があるので、そのままRDBの設計にはしなくて 良いです。 むしろ、データモデリングはエンジニア以外にも理解できるものにす る必要があります。 具体的には、性能などの課題解決のために RDB設計は適宜最適化 します。 これはそのまま RDB設計にするの?
DDDのモデリングとは相反するもの?
NO! レイヤーが違うと自分は思っています。 両立は可能で、むしろ互いに補完するものかと思います。 DDDのモデリングとは相反するもの?
Kawashima 『イミュータブルデータモデル』 https://scrapbox.io/kawasima/イミュータブルデータモデル Kawashima 『WEB+DB PRESS Vol.130 実践データモデリング』 増田 亨
『現場で役立つシステム設計の原則』 参考文献
CREDITS: This presentation template was created by Slidesgo, and includes
icons by Flaticon, and infographics & images by Freepik Thanks! Do you have any questions? Please keep this slide for attribution