Bài viết mới nhất

Tổng 2300 bài
Cơ sở dữ liệu 22/09/2026 7 phút

Nạp dữ liệu lớn vào PostgreSQL: vì sao bỏ index rồi tạo lại nhanh gần gấp đôi

Mỗi index phải cập nhật theo từng dòng chèn, nên nạp khối lượng lớn vào bảng đã đầy index rất chậm. Đo thật: nạp 3 triệu dòng với 4 index sẵn mất 12,6 giây; bỏ index thứ cấp rồi tạo lại sau khi nạp chỉ 7 giây và bảng còn nhỏ hơn. Và một điểm bất ngờ về maintenance_work_mem. PostgreSQL 16.

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

Khôi phục từ pg_dump đo thật: 80% thời gian là COPY, index và khoá ngoại được dựng lại chứ không được chép, -j nhanh 1,3 lần khi một bảng chiếm 73% và 1,77 lần với tám bảng đều, planner đoán sai 5 lần tới khi ANALYZE, và một role thiếu là một lỗi

Khôi phục bản dump custom 75 MB của cơ sở dữ liệu 613 MB vào CSDL trống: 2,85 giây tuần tự, 2,18 giây với -j, không nhanh hơn vì một bảng chiếm 73%; tám bảng bằng nhau thì -j4 nhanh 1,77 lần rồi chạm trần. Tách theo section: pre-data 25 ms, COPY 2,27 giây, dựng index và khoá ngoại 731 ms. Sau khôi phục planner ước lượng 5.000 dòng cho truy vấn trả 1.001 và chọn Bitmap Scan, ANALYZE 254 ms sửa thành Index Scan với 943. work_mem đặt ở mức database biến mất, sequence giữ nguyên 4000, và khôi phục vào cụm trống báo đúng một lỗi role không tồn tại, nạp pg_dumpall --globals-only trước thì 0 lỗi.

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

Kim tự tháp kiểm thử đo thật: cấy 8 lỗi vào một dịch vụ Go — unit bắt 2, integration bắt 4, end-to-end bắt cả 8, nhưng một test chạm PostgreSQL đắt gấp 184 lần unit và lỗi end-to-end chỉ nói triệu chứng

Mở sê-ri kiểm thử backend bằng số thay vì hình vẽ. Một gói Go nhỏ với logic tính giá, repo PostgreSQL và handler HTTP, ba tầng test tách bằng build tag, tám lỗi cấy vào từng cái một. Unit bắt 2/8, integration 4/8, end-to-end 8/8. Giá đo bằng go test -count=100: unit 12,5 µs một test, integration 2,3 ms, end-to-end trong tiến trình 2,25 ms, tức bước nhảy 184 lần nằm ở chỗ chạm cơ sở dữ liệu chứ không ở HTTP. Cùng một lỗi làm tròn, unit nói đúng hàm và đầu vào, end-to-end chỉ nói tổng sai 1 xu; lỗi quên cột NOT NULL làm cả 5 test end-to-end đỏ mà không dòng nào nói vì sao.

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

Coverage nâng cao trong Go: đo phủ theo hàm, và vì sao 100% không đủ

go test -cover cho một con số tổng, nhưng không nói phần nào chưa phủ. go tool cover -func chỉ ra chính xác hàm/nhánh nào yếu để thêm test. Và cạm bẫy lớn nhất: 100% phủ dòng không bằng test tốt. Đo thật: coverage 75% lên 87.5% có mục tiêu, và một test 100% phủ dòng vẫn để lọt bug giá âm -500.

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

CAS và cấu trúc lock-free trong Go: một stack không khóa, và sự thật rằng nó chậm hơn mutex

Xây một stack lock-free bằng vòng lặp Compare-And-Swap. Đo thật: nó đúng đắn (10000 phần tử không mất, -race sạch) nhưng dưới tranh chấp cao lại chậm hơn mutex ~3,5 lần vì bão retry. Giá trị của lock-free là bảo đảm tiến triển, không phải tốc độ. Go 1.23.