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
履歴を持つデータの設計
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yoshitaka Kawashima
April 12, 2019
Programming
27k
59
Share
履歴を持つデータの設計
酔いどれ設計ナイト2019の発表資料です。
Yoshitaka Kawashima
April 12, 2019
Other Decks in Programming
See All in Programming
ふつうのFeature Flag実践入門
irof
6
3.3k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
2.9k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
310
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
390
AI 時代のソフトウェア設計の学び方
masuda220
PRO
28
11k
OCRを使ってゲームのアイテムをデータ化する
kishikawakatsumi
0
120
要はバランスからの卒業 #yumemi_grow
kajitack
0
200
JavaDoc 再入門
nagise
0
190
バックエンドにElysiaJSを採用して気付いた、良い点・悪い点
wanko_it
1
190
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.8k
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
250
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
210
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Embracing the Ebb and Flow
colly
88
5.1k
The Limits of Empathy - UXLibs8
cassininazir
1
340
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
The Cult of Friendly URLs
andyhume
79
6.9k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
520
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
190
Transcript
履歴を持つデータの設計 kawasima 酔いどれ設計ナイト2019
課題 • 適用開始日 • 変更履歴 • 削除フラグ • …
ありがちなアドバイス • 最新のものだけ残して、あとはKVSに 入れろ • フラグじゃなくてステータスにしろ • ビュー (マテビュー)でなんとかしろ •
…
業務を考えずにパターンは決まらない イミュータブルデータモデルに沿って、まずは エンティティを分類 会員ID 姓 名 郵便番号 住所 電話番号 注文ID
会員ID 注文日時 リソース イベント 会員 注文 https://www.slideshare.net/kawasima/ss-40471672
イベントとリソースそれぞれで、 「履歴」について考えてみます
イベントの履歴 イベントはそもそも履歴だ。
リソースの変更イベント リソースエンティティに更新日時をもたせたくなるのは、リソー スにまつわるイベントが洗い出せていないことが原因です。 会員ID 姓 名 郵便番号 住所 電話番号 更新日時
会員 • 会員が自分自身で会員情報変更ペー ジから変更する • 規約に違反した会員であったため、 お客さまセンターのオペレータが強 制退会をおこなう。 • 会員からの「誤った退会をしてし まったので取り消して欲しい」との 問合せを受けて、お客さまセンター のオペレータが会員の復会をおこな う。
業務に沿ってイベントを設計する 会員ID 姓 名 郵便番号 住所 電話番号 会員 会員変更ID 会員ID
姓 名 郵便番号 住所 電話番号 変更日時 会員変更 強制退会ID 会員ID 強制退会日時 強制退会理由 強制退会 復会ID 会員変更ID 復会日時 復会
子リソースをたくさんもつリソースの 変更イベント 全部のエンティティ分、変更履歴テーブルもつの?
こういうリソースの変更履歴用途 • カスタマ問い合わせ対応 • 変更トリガーでのストリーム処理 (検索インデックス作成など ) • 属性での複雑な検索はいらない •
時系列DBやドキュメントデータベースに 突っ込む
ロングタームイベントパターン • イベントでもステータス管理が必要なケース • 長期間で完結するイベントはステータスをもち ステータス遷移のイベントを詳細イベントとし て記録する
None
リソースの履歴 • 買ったときの商品価格を参照したい。 • 駅テーブルに2020年〜高輪ゲートウェイが追 加される。 などなど →「履歴」というよりは「世代」になる。
デメリット大きいので、適用することは少ない。 が、マスタ管理機能など入力のみのものであれば用いる ことあるかな…
過去と予定を分けて扱えれば シングル世代テーブルパターンでもOK
バックエンド業務では世代が 必要で、コンシューマ向けの 機能では最新のもののみがあ ればよい、というパターンで は活用できる。
Gitのバージョンとタグの関係性のイメージ 古い世代や未来の世代も画一的に扱う業務に おいては、このパターンを用いる。
まとめ 「履歴」というワードで思考停止して、 実装手段の話を始めてはいけない 業務での利用用途を突き詰めて考え、 イミュータブルデータを出来るだけ作るように がんばりましょう。