sor4chi / isucon13

ISUCON13 本戦のリポジトリ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

postLivecommentHandler の N+1

Ryoga-exe opened this issue · comments

livecomment_handler.go の postLivecommentHandler

var hitSpam int
for _, ngword := range ngwords {
query := `
SELECT COUNT(*)
FROM
(SELECT ? AS text) AS texts
INNER JOIN
(SELECT CONCAT('%', ?, '%') AS pattern) AS patterns
ON texts.text LIKE patterns.pattern;
`
if err := tx.GetContext(ctx, &hitSpam, query, req.Comment, ngword.Word); err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, "failed to get hitspam: "+err.Error())
}
c.Logger().Infof("[hitSpam=%d] comment = %s", hitSpam, req.Comment)
if hitSpam >= 1 {
return echo.NewHTTPError(http.StatusBadRequest, "このコメントがスパム判定されました")
}
}

N+1 ではなく、SQL を正規表現エンジンとして使ってしまっているあれだ