10 điểm bởi xguru 2021-07-19 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • 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.

Chưa có bình luận nào.