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
5分でわかる イミュータブル データモデル
Search
a.shimomura
November 22, 2024
2
130
5分でわかる イミュータブル データモデル
a.shimomura
November 22, 2024
Tweet
Share
More Decks by a.shimomura
See All by a.shimomura
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
1
560
アラートの話 をしよう!
shimomura
0
68
serverless
shimomura
1
200
機械翻訳との付き合い方
shimomura
0
240
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
210
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Practical Orchestrator
shlominoach
188
11k
Scaling GitHub
holman
459
140k
Building Adaptive Systems
keathley
43
2.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Site-Speed That Sticks
csswizardry
10
660
Agile that works and the tools we love
rasmusluckow
329
21k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
How to Ace a Technical Interview
jacobian
277
23k
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