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 10 phút

Prepared statement caching trong Go: chuẩn bị một lần, chạy nhiều lần

Một câu lệnh có tham số đi qua hai pha ở DB: PREPARE (phân tích + lập kế hoạch, đắt) và EXECUTE (rẻ). Chạy cùng câu lệnh N lần mà prepare lại mỗi lần là lãng phí. Đo thật trong Go: 500 truy vấn với prepare mỗi lần mất 1.98s (500 prepare), prepare một lần rồi tái dùng chỉ 673ms (1 prepare) — nhanh 2.9 lần.

Bảo mật 22/09/2026 5 phút

AES-GCM: mã hóa vừa giấu vừa chống sửa — và vì sao nonce không được lặp

CBC giấu được nội dung nhưng không biết bản mã có bị sửa. AES-GCM giải quyết: mã hóa và tạo tag xác thực trong một bước, sửa một byte là giải mã từ chối. Bài này đo thật bằng python cryptography: bản mã kèm tag, tamper cho InvalidTag, và cái bẫy chết người — lặp nonce làm lộ XOR hai bản rõ mà không cần khóa.