#optimize
9 bài viết về chủ đề này
Cursor Pagination — phân trang triệu dòng không chậm
OFFSET càng sâu càng chậm vì DB vẫn phải quét qua từng dòng. Keyset/cursor pagination chỉ tốn một lần index seek — kèm code Go và SQL thật.
Nén payload API — gzip, Brotli hay zstd cho backend?
Bật gzip chưa chắc đã nhanh. So sánh gzip, Brotli, zstd, cái bẫy Vary header, middleware nén trong Go và 3 cạm bẫy hay gặp.
Cache-Aside: Vì sao bọc Redis ngoài DB vẫn có thể chậm
Cache-aside tưởng đơn giản mà dính Cache Stampede, thiếu TTL jitter, ghi nhầm thứ tự. 3 cái bẫy làm chậm hệ thống dù đã bọc Redis.
Connection Pool — Vì sao mở kết nối DB mỗi lần là chậm ngất?
Vì sao mở kết nối PostgreSQL mỗi lần request là chậm? Học cách tinh chỉnh connection pool trong Go: MaxOpenConns, MaxIdleConns, ConnMaxLifetime và các cái bẫy dễ dính.
Idempotency Keys — Chống ghi trùng khi API retry an toàn
Hướng dẫn dùng Idempotency-Key + unique constraint để API retry an toàn, không ghi trùng order hay thanh toán 2 lần — kèm code Go + PostgreSQL.
Cache-Aside với Redis — Giảm tải database cực kỳ đơn giản
Tìm hiểu pattern Cache-Aside với Redis: cách đọc/ghi cache đúng chuẩn, tránh cache stampede, kèm code ví dụ và kinh nghiệm triển khai thực tế.
EXPLAIN ANALYZE — Vũ khí săn query chậm trong database
Tối ưu SQL query bằng EXPLAIN ANALYZE: đọc execution plan, tìm sequential scan, thêm index đúng chỗ, biến query 3 giây thành 30ms.
Connection pooling — Tại sao app chậm dù database khỏe re?
Connection pooling tái sử dụng kết nối database, giảm latency và tránh lỗi 'too many connections'. Kinh nghiệm config pool đúng cách trong Go.
Thundering Herd — Khi cache hết hạn là cả hệ thống sụp
Thundering herd là gì? Khi một key cache 'nóng' hết hạn, hàng chục nghìn request cùng đổ vào database. Kèm cách chặn: singleflight, Redis lock và jitter TTL.