Upgrade to Pro — share decks privately, control downloads, hide ads and more …

freee申告の税額計算を支える技術 / freee tech day 2023

mosa
April 19, 2023

freee申告の税額計算を支える技術 / freee tech day 2023

mosa

April 19, 2023
Tweet

Other Decks in Programming

Transcript

  1.   A(root node) をキューに詰める A C D B 未到達 更新対象

    差分あり 差分なし ⾊の意味 キュー A
  2.   キューからAを取り出して計算 A C D B 未到達 更新対象 差分あり 差分なし

    ⾊の意味 キュー A • 今回はユーザーが A を⼊⼒したとしているのでAはユーザーの⼊⼒値となり、 差分ありになる
  3.   A C D B 未到達 更新対象 差分あり 差分なし ⾊の意味

    キュー A B C キューの先頭から B を取り出して計算 • 今回は計算の結果、差分があったとする • Bに依存している項⽬は無いので差分ありでもキューに詰める項⽬は無い
  4.   A C D B 未到達 更新対象 差分あり 差分なし ⾊の意味

    キュー A B C キューの先頭から C を取り出して計算 • 今回は計算の結果、差分はなかったとする • Cに依存している項⽬はあるが差分は無いためキューに詰めない
  5.   A C D B 未到達 更新対象 差分あり 差分なし ⾊の意味

    キュー A B C キューが空になったので計算処理を終了してDBに書き込む • 今までの計算によって得られた A, B の差分はメモリ上に保持してある
  6.   RelationalTree作成後 • 問題を解決するためにRelationalTree は下記のアプローチをした ◦ メモリ上に計算過程の結果を保持し最後にまとめてwriteする ▪ → write回数の減少

    ◦ 差分が無い項⽬については依存する項⽬の再計算を⾏わない ▪ → 計算回数の減少 RelationalTreeの導⼊によって数⼗秒かかっていたリクエストが、遅く ても数秒以内に返ってくるようになった!
  7.   RelationalTreeの課題 • パフォーマンス最適化の余地 ◦ 動的に⽊構造を作成しているため read 処理が多い ◦ 部分⽊の計算が繰り返し⾛ることがある

    ◦ 同期的な計算が強制されてしまう • 計算結果の品質担保 ◦ 複数ユーザーが同時に触った時の挙動が担保されていない • 依存関係の表現⽅法 ◦ 依存関係が有向⾮巡回グラフであることを強制できていない