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

Cột thắng hàng đo thật: cùng 5 triệu dòng sự kiện, Parquet nặng 71 MB còn CSV 327 MB và JSON 637 MB, quét SUM theo nhóm trên Parquet mất 20,8 ms so với 248 ms của CSV, và đọc một cột thì Parquet nhanh hơn 13 lần vì chỉ chạm đúng khối cột cần

Bài mở đầu sê-ri xử lý dữ liệu lớn: vì sao định dạng cột Parquet nhỏ và quét nhanh hơn định dạng hàng CSV và JSON. Đo thật trong DuckDB 2.0 trên 5 triệu dòng sự kiện 7 cột: Parquet 71 MB so với CSV 327 MB (4,6 lần) và JSON 637 MB (9 lần); quét SUM(amount) GROUP BY country mất 20,8 ms trên Parquet so với 248 ms CSV và 357 ms JSON; đọc một cột thì Parquet 18 ms so với CSV 242 ms. Cột nén tốt nhờ dictionary và RLE, quét nhanh nhờ đọc ít byte và chỉ đọc cột cần.

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

Column projection đo thật: trên bảng Parquet rộng 31 cột và 5 triệu dòng, tính tổng một cột mất 17,8 ms còn kéo cả 30 cột mất 388 ms, tỉ lệ theo số cột đọc, trong khi CSV đọc một cột vẫn mất 749 ms vì phải tách cả dòng, nên SELECT sao là phản mẫu

Định dạng cột chỉ đọc đúng cột cần, nên thời gian tỉ lệ với số cột truy vấn, không phụ thuộc độ rộng bảng. Đo thật trong DuckDB 2.0 trên bảng 5 triệu dòng, 31 cột: tính tổng một cột mất 17,8 ms, mười cột 133 ms, cả 30 cột 388 ms; đọc một cột nhanh hơn đọc 30 cột 22 lần. CSV ngược lại: đọc một cột mất 749 ms, cả 30 cột 1121 ms, chọn ít cột gần như vô ích vì cấu trúc hàng. Parquet đọc một cột nhanh hơn CSV 42 lần, và count sao đọc số dòng trong metadata chỉ 1,2 ms.