More Related Content More from Masahiro Nagano More from Masahiro Nagano (20) Isucon makers casual talks6. サイドバーの攻略
• 割と重めなクエリをキャッシュしたい
SELECT a.id, a.title FROM comment c
INNER JOIN article a ON c.article = a.id
GROUP BY a.id ORDER BY MAX(c.created_at) DESC LIMIT 10
• ページまるごとキャッシュはNG
• 1秒で”どこか”のページに確認が行われる
• キャッシュの”単位”を考える
9. SSI + memcached
Router
memcached
App
POST時にcache更新
SSI Engine
internal request
POST requestはバイパス
18. 購入トランザクション
$dbh->begin_work;
$dbh->query('INSERT INTO order_request (member_id) VALUES (?)',$member_id);
my $order_id = $dbh->last_insert_id;
my $rows = $dbh->query(
‘UPDATE stock SET order_id = ? WHERE variation_id = ? AND order_id IS
NULL ORDER BY RAND() LIMIT 1',
$order_id, $variation_id,
);
if ($rows > 0) {
my $seat_id = $dbh->select_one(
'SELECT seat_id FROM stock WHERE order_id = ? LIMIT 1',
$order_id,
);
$dbh->commit;
} else {
$dbh->rollback;
}
わざと複雑に書いた
23. データの量と難易度
• ISUCON1
• 記事数 3,000、コメント数 16万
• dumpデータが129MB
• ISUCON2
• 座席数(=在庫数) 40960
• 同時購入処理 200