1日5%を書き替えて1年ぶんの版を残すと、置き場は19.31倍になりました。
書き替えが0.2%なら1.74倍です。残す日数より、書き替える割合のほうが効きます。
過去に戻れる代わりに、古い塊が積み上がります。効くのは日数より書き替える割合です。
Delta Lakeでは、過去の版に戻れます。公式は時間旅行。データの版管理により、巻き戻し、完全な履歴の監査、再現できる機械学習の実験ができると述べています。
戻れるのは、古い塊が残っているからです。どれだけ積み上がるのか実際に数えてみました。
表は 4,000 個の塊でできている(1個 24MB、合計 93.8GB) 1日1回書き替える。書き替えた塊は差し替わり、古い版が残る 1日に書き替える割合 1日ぶん残す 7日ぶん残す 30日ぶん残す 90日ぶん残す 365日ぶん残す 0.2% 93.9GB (1.00倍) 95.3GB (1.02倍) 99.0GB (1.06倍) 112.3GB (1.20倍) 162.9GB (1.74倍) 1.0% 94.8GB (1.01倍) 100.5GB (1.07倍) 122.8GB (1.31倍) 178.5GB (1.90倍) 436.3GB (4.65倍) 5.0% 99.0GB (1.06倍) 124.4GB (1.33倍) 237.1GB (2.53倍) 513.9GB (5.48倍) 1809.9GB (19.31倍)
1日5%を書き替えて1年ぶん残すと19.31倍です。93.8GBが1809.9GBになりました。
同じ1年でも、0.2%なら1.74倍で止まります。割合が25分の1になると、増え方も大きく変わります。
横に見ると、30日までは0.2%で1.06倍、5%でも2.53倍です。短く残すぶんには、どちらでも軽く済みます。
長く残すと差が開きます。何日残すかを決める前に、1日に何%書き替えているかを測ることになります。
古いものを消す判断そのものはParquetの記事で扱った区切り方とも関わり、消す単位が細かいほど削りやすくなります。
1年ぶん残す場合、書き替える割合で倍率が大きく変わる。
Time travel: Data versioning enables rollbacks, full historical audit trails, and reproducible machine learning experiments.原文Delta Lake 公式ドキュメント「Welcome to the Delta Lake documentation」 この内容の有効期限2027-02-18
まとまった書き込みが効きます。やり直しの割合は増えても、確定した回数は増えました。
Delta Lakeは、まとまった書き込みを提供します。公式はDelta Lakeは、S3・ADLS・GCS・HDFSといった既存のデータレイクの上に、まとまった書き込み、大きく育つ管理情報の扱いを提供し、流し込みと一括処理をひとつにすると述べています。
同時に書けば衝突します。どれだけやり直しになるのか実際に動かして数えました。
600分ぶん。同じ表へ複数の書き手が同時に書き込む 先に確定したほうが勝ち、あとの1つはやり直す(同じ塊に当たった場合だけ) 書き手の数 1回5秒 1回30秒 1回120秒 2人 確定10634回 / やり直し26% 確定1777回 / やり直し26% 確定433回 / やり直し28% 4人 確定15291回 / やり直し47% 確定2555回 / やり直し47% 確定647回 / やり直し46% 8人 確定20954回 / やり直し64% 確定3471回 / やり直し64% 確定870回 / やり直し64% 16人 確定27337回 / やり直し76% 確定4544回 / やり直し76% 確定1134回 / やり直し76%
16人にすると、やり直しは76%まで上がります。4回に3回は無駄になります。
それでも確定した回数は10,634回から27,337回です。2.6倍に増えました。
横に見ると、1回5秒でも120秒でも、やり直しの割合はほぼ同じです。26%・47%・64%・76%が並びます。
決めているのは書き手の数だけでした。1回を短くしても、やり直しの割合は下がりません。
下げたいなら、当たる相手を減らすことになります。表を細かく分けて、書き手ごとに触る塊をずらします。
Delta Lake provides ACID transactions, scalable metadata handling, and unifies streaming and batch data processing on top of existing data lakes, such as S3, ADLS, GCS, and HDFS.原文Delta Lake 公式ドキュメント「Welcome to the Delta Lake documentation」 この内容の有効期限2027-02-18
形の食い違いを止める仕組みがあります。止めるのは、こうしたずれが起きるからです。
Delta Lakeには、形の食い違いを止める仕組みがあります。公式は形の強制。取り込みの際に悪い記録が入らないよう、形の違いを自動で扱うと述べています。
止めなければ何が起きるのか。実際に読み直して整理しました。
形を先に決めておく方式で、あとから項目を変えた場合 古い読み手が新しい記録を読めるかを整理する 変え方 古い読み手 理由 末尾に項目を足す 読める 知らない項目を飛ばせる形なら 途中に項目を足す 読めない 位置で読む形では、以降がすべてずれる 項目名を変える 読めない 名前で引く形では見つからなくなる 項目を消す 読めない 必須として読んでいれば失敗する 既定値つきで足す 読める 古い記録にはその値が入っているものとして扱える
5つのうち読めるのは2つだけです。末尾に足す場合と、既定値をつけて足す場合です。
残りの3つは読めません。形を止める仕組みは、この3つを取り込みの時点で弾きます。
位置で読む形で、3番目に「通貨」を足した場合 位置 古い読み手が期待 新しい記録の中身 一致 1番目 番号 番号 ○ 2番目 分類 分類 ○ 3番目 金額 通貨 × 4番目 日 金額 × 5番目 個数 日 ×
1項目足しただけで、5項目のうち3項目がずれます。足した位置より後ろは全部です。
しかも読めなくなるのではなく、別の値が読めてしまいます。金額のつもりで通貨を読むので、気づきにくくなります。
3つの計測はいずれも手元で書いた模型で、実際のDelta Lakeを動かしたものではありません。塊4,000個・1個24MBや、同じ塊に当たる確率35%はすべて置いた値です。書き替える塊が一様に散らばると置いており、実際には偏ります。偏っていれば、同じ割合でも積み上がる量は小さくなります。ここで見せているのは、版を残す量は日数より書き替える割合で決まるという点と、やり直しの割合が上がっても確定した総数は増えるという点の2つです。
Schema enforcement: Automatically handles schema variations to prevent insertion of bad records during ingestion.原文Delta Lake 公式ドキュメント「Welcome to the Delta Lake documentation」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る