イミュータブルデータモデル(世代編)

16
イミュータブルデータモデル ジェネレーションズ(世代編) kawasima

Transcript of イミュータブルデータモデル(世代編)

Page 1: イミュータブルデータモデル(世代編)

イミュータブルデータモデルジェネレーションズ(世代編)

kawasima

Page 2: イミュータブルデータモデル(世代編)

たくさんの方々に見ていただきありがとうございます!

http://www.slideshare.net/kawasima/ss-40471672

Page 3: イミュータブルデータモデル(世代編)

入門編の続編として、リレーショナルデータモデルでもっとも厄介な「世代」を扱いかた

についてお話します。

入門編まだの方はそちらをまずご覧ください!

Page 4: イミュータブルデータモデル(世代編)

ありがちな例

日付属性をもったリソース?イベントではないよなぁ…

商品コード適用開始日商品名価格

注文番号注文日

注文番号商品コード適用開始日

注文

注文明細商品(R)

Page 5: イミュータブルデータモデル(世代編)

「イベントは更新不可」の性質を利用

「過日のイベント」と「未来の予定イベント」は区別して扱おう

● 過去の価格は変更できない● 未来の価格は変更できるし、変更の予定を取り消すこともできる

Page 6: イミュータブルデータモデル(世代編)

イベントの予実として扱う

商品コード商品名

商品コード適用予定日価格

注文番号注文日

商品コード適用開始日(適用終了日)価格

値付け実績(E)商品(R)

注文番号商品コード

予定価格

注文明細

注文

適用予定日が来たものを値付け実績として反映させる

Page 7: イミュータブルデータモデル(世代編)

簡単ですね!

Page 8: イミュータブルデータモデル(世代編)

もう少し複雑な例

Page 9: イミュータブルデータモデル(世代編)

例題

番組ID番組名

番組ID芸能人ID

芸能人ID芸能人名

番組名も、出演者の名前も改編期やウッチャンによって変えられるが、名前が変わっても同じものとみなして扱いたい。

番組 レギュラー出演 芸能人

番組名 適用開始日

ウンナンの気分は上々。 1996年7月19日 - 1999年3月19日

新・ウンナンの気分は上々。 1999年3月26日 - 2003年3月28日

ウンナンの気分は上々。 2003年4月4日 - 2003年9月26日

芸能人名 適用開始日

海砂利水魚 〜2001年9月27日

くりぃむしちゅ〜 2001年9月28日〜

Page 10: イミュータブルデータモデル(世代編)

ありがちな汚モデル

番組ID適用開始日(適用終了日)番組名

番組ID番組適用開始日芸能人ID芸能人適用開始日レギュラー出演開始日レギュラー出演終了日

芸能人ID適用開始日(適用終了日)出演者名

番組 芸能人レギュラー出演

※ちなみにこの適用開始日・終了日の問題は、”動的参照関係”を考慮しなくてはならないという、難しめの問題もあります。

http://watanabek.cocolog-nifty.com/blog/2011/12/post-a77b.html

Page 11: イミュータブルデータモデル(世代編)

サロゲートキーを導入する

番組ID番組コード適用開始日(適用終了日)番組名

番組コード芸能人コードレギュラー出演開始日レギュラー出演終了日

芸能人ID芸能人コード適用開始日(適用終了日)出演者名

番組 芸能人レギュラー出演

課題: ID属性がIdentifiableではない。少しはスッキリしたが…

Page 12: イミュータブルデータモデル(世代編)

イミュータブルモデルfashion

番組ID

番組ID出演者IDレギュラー出演開始日レギュラー出演終了日

番組ID適用開始日番組名

芸能人ID

芸能人ID適用開始日芸能人名

番組 芸能人

レギュラー出演

番組属性 芸能人属性

Page 13: イミュータブルデータモデル(世代編)

こういうモデルをキレイめに扱いたくばイミュータブルなデータベースを使おう!

Page 14: イミュータブルデータモデル(世代編)

こういうモデルをキレイめに扱いたくばイミュータブルなデータベースを使おう!

Page 15: イミュータブルデータモデル(世代編)

Datomic● UPDATEというものは存在しない。● スキーマ全体でトランザクション管理され

ており、履歴が積み重なっていてもデフォルトで最新のデータにアクセスされる。

● すべてのデータはEAVTのタプルで格納される。

http://www.datomic.com

E EntityA AttributeV ValueT Transaction

Page 16: イミュータブルデータモデル(世代編)

ノーデプロイ分散ジョブ実行環境JobStreamer

job-streamer.github.io

近日発表

そんなDatomicを使ったプロダクトを作っております…

よろしくお願いします!