ISUCON8本選は6位でした

本選で戦ってきました

img_4761

ss 2018-10-20 23 40 13

結果は6位 13,281点

ss 2018-10-20 23 35 21

悔しい負け

今年こそは優勝したい!と思っていましたが結果は惨敗でした。マジで悔しいです。

予選の感じで3人がそれぞれの力を出せれば優勝はできそうだなという感触があったし、songmuさん、najeiraさんという超強力なメンバーで本選だったので今年こそは何としてもと思っていましたが、結果は力及ばずでした。

講評や懇親会で話を聞くとISULOGGER/send_bulkに気付いていなかった為にどんなに改善しても頭打ちだったとのこと。RunTradeInfoローソク足チャートを表示するGetCandlestickDataの改善は対応していたのにログで頭打ちなのでスコアは伸びずで悔しい結果になってしまった。(懇親会で話した感じではおそらく/send_bulkになっていれば3.5万は超えた気がする)

マニュアルをちゃんと読んでいれば/send_bulkに気付けたはずなのに、なんかボリューム多そう、Dockerかーとか思ってしまったばっかりに早く手を動かなさなきゃという気持ちでいっぱいで私はマニュアルを流し読みしてしまった。この辺りは力不足ですぐに構成を把握することができればそんなにテンパらなかったと思う。あと、429: Too Many Requestsのログが出ていてもすぐにピンと来なかったのは単純に力不足。その時はん〜なんだろうとしか思えなかった。。。今マニュアルを見返すと制限とかもきっちり書かれてるしー。

今回の問題はボトルネックがわかっても私はいまいち改善策が思い浮かばず、結構な時間を悩んでいるだけで消費してしまった。

RunTradeの改善方法に私は突破口が見いだせなかったのでsongmuさん、najeiraさんに完全にお任せし、私の得意なDB検索問題であるInfoローソク足チャートを表示するGetCandlestickDataの改善をした。結果的には私はこれくらいしか効果的な改善ができなかった。

GetCandlestickDataの改善

問題のSQLは下記

SELECT m.t, a.price, b.price, m.h, m.l
FROM (
    SELECT
        STR_TO_DATE(DATE_FORMAT(created_at, '%s'), '%s') AS t,
        MIN(id) AS min_id,
        MAX(id) AS max_id,
        MAX(price) AS h,
        MIN(price) AS l
    FROM trade
    WHERE created_at >= ?
    GROUP BY t
) m
JOIN trade a ON a.id = m.min_id
JOIN trade b ON b.id = m.max_id
ORDER BY m.t

次のような結果のテーブルを作成し

CREATE TABLE IF NOT EXISTS trade_stat (
  id              INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at      DATETIME(6)      NOT NULL,
  first_price     INTEGER UNSIGNED ,
  last_price      INTEGER UNSIGNED ,
  low_price       INTEGER UNSIGNED NOT NULL,
  high_price      INTEGER UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

下記のSQLに変更した

SELECT
  STR_TO_DATE(DATE_FORMAT(created_at, '%s'), '%s') AS t,
  MIN(first_price),
  MAX(last_price),
  MAX(high_price) AS h,
  MIN(low_price) AS l
FROM trade_stat
WHERE created_at >= ?
GROUP BY t
ORDER BY t

これも最初仕様を勘違いしてしまっていて1時間くらい無駄にしてしまった。もっと早く入れれていればログに気付くきっかけがあったかも知れなかった。

ISUCON8の運営チームは最高でした

予選、本選ともにトラブルはなかったし、ベンチマークもサクサクで快適でした。問題はどちらも様々なボトルネックが作り込まれているのと負荷に耐えれるとアクセス数がどんどん増えるというのがスムーズで納得感のある動きでした。シェア機能はすごく面白いギミックでした。

準備が本当に大変だったと思うのですが、ありがとうございました。

メンバーに感謝

songmuさん、najeiraさんと一緒に戦えてよかった。二人ともめっちゃ強いので足引っ張るわけにはいかないなーと思っていた。本選では私は気付いていなかった点を二人は気付いてて懇親会ではあー実はそうだったんだーと言うような話も多くて力の差を感じた。go慣れしていないというのもあるけど、視野や発想が私よりだいぶ上だなと感じたので精進しないと。

楽しい良い経験をさせてもらいました。ありがとう。