karszawa / sign-of-horns

ISUCON 7 Qual Repository :metal:
0 stars 1 forks source link

JobQueueを用いた遅延書き込み #27

Open karszawa opened 6 years ago

karszawa commented 6 years ago

なにをやるか

書き込みだけしか行わないエンドポイントではその部分をJobとして非同期実行する

なぜやるか

大量に書き込んで一度だけ読み込むような問題設定の場合、劇的な効用が見込める。 問題がそのようなシナリオであれば手をつける価値があると思う。 アクセスログの分析でそれらしいとわかることもあるが、リクエストのタイミングに依存するので難しい。

どうやるか

goをつければ良いらしい。

func f(i int) {
  // fucking process
}

func main() {
  go func(0)
}

ラムダ式を使うともっと簡単

func oldFunction(...) {
  // insert query
}

func newFunction(...) {
  go func(...) {
     // insert query
  }(...)
}

ちょっとほれた。