Cơ sở dữ liệu 22/09/2026 6 phút

BRIN index trong PostgreSQL: index 40 kB thay cho B-tree 214 MB trên bảng 10 triệu dòng

BRIN chỉ lưu min/max cho mỗi khối trang thay vì một mục cho mỗi dòng, nên index nhỏ hơn hàng nghìn lần B-tree. Với bảng log/time-series đã sắp theo thứ tự tự nhiên, nó nhanh gần bằng B-tree mà tốn gần như không có dung lượng — đo thật trên PostgreSQL 16.

Lập trình Go 22/09/2026 11 phút

Golden file testing trong Go: lưu đầu ra kỳ vọng vào tệp, so tự động

Hàm sinh đầu ra lớn (báo cáo, HTML, JSON, mã sinh) khó viết assertion bằng tay. Golden file lưu đầu ra kỳ vọng vào một tệp, test so từng byte; đổi có chủ đích thì chạy -update ghi lại. Đo thật trong Go: sinh golden, so pass, đổi code thì test bắt khác biệt kèm diff, và -update chấp nhận thay đổi.

Lập trình 22/09/2026 6 phút

Nén trong HTTP: vì sao trang web tải nhanh gấp 10 lần mà bạn không thấy gì

Mỗi lần trình duyệt tải một trang, nó và server âm thầm thương lượng nén qua header Accept-Encoding và Content-Encoding. Bài này đo thật trên coffeecode.vn: trang chủ 245KB tải về chỉ còn 25KB nhờ gzip (nhỏ 9.8 lần). Và so gzip với brotli trên chính HTML đó — brotli nhỏ hơn gzip 24%. Cơ chế thương lượng, vì sao Vary: Accept-Encoding là bắt buộc, và chỉ nén text.