- Tổng hợp những nỗ lực đã thử để tạo nhanh một DB thử nghiệm kích thước lớn
→ Mức tốt nhất hiện tại là 100 triệu bản ghi trong 33 giây (theo MBP 2019)
- Dùng vòng lặp bằng mã Python: 10 triệu bản ghi mất 15 phút
→ Điều chỉnh kích thước batch insert lên 100.000: rút xuống còn 10 phút
- Tối ưu thiết lập SQLite: tắt
journal_mode/synchrounous, điều chỉnh kích thước cache, khóa exclusive
→ Bản vòng lặp: 100 triệu bản ghi trong 10 phút, bản batch: 100 triệu bản ghi trong 8,5 phút
-
Chuyển sang PyPy: bản batch rút xuống còn 2,5 phút cho 100 triệu bản ghi (nhanh hơn 3,5 lần)
-
Viết bằng Rust: bản vòng lặp + tối ưu SQLite đạt 100 triệu bản ghi trong 3 phút
→ Đổi sang Prepared Statement và batch insert 50 hàng mỗi lần, đạt 34,3 giây cho 100 triệu bản ghi
→ Chuyển sang bản đa luồng: 1 luồng Writer, 4 luồng dữ liệu. 32,37 giây
- Đổi nơi lưu DB SQLite sang
:memory:thì giảm thêm 2 giây, còn 29 giây
→ Có vẻ việc flush 100 triệu hàng mất khoảng 2 giây
- Những điều sẽ thử tiếp theo (để đạt 1 tỷ bản ghi trong 1 phút)
→ Thử profiling
→ Thử bản multiprocess để tận dụng 4 lõi
→ Viết bằng Go rồi tắt GC khi chạy
→ Ý tưởng điên rồ: học định dạng file SQLite rồi tự tạo trực tiếp theo đúng định dạng
Chưa có bình luận nào.