One Billion Row Challenge (1BRC) là một cuộc thi công nghệ được tổ chức vào T1/2024, nhằm kiểm tra hiệu suất và khả năng tối ưu hóa sử dụng ngôn ngữ Java khi xử lý một tập dữ liệu khổng lồ.
Nhiệm vụ: phân tích và tổng hợp dữ liệu nhiệt độ từ một file văn bản chứa 1 tỷ dòng dữ liệu, tương đương 13.8 GB, bao gồm dữ liệu của 413 trạm thời tiết khác nhau.
Thành viên nhóm:
| STT | Họ tên | Mã Sinh viên |
|---|---|---|
| 1 | Nguyễn Hữu Tiến | B22DCCN722 |
| 2 | Lê Hương Giang | B22DCCN248 |
| 3 | Đỗ Lý Minh Anh | B22DCCN012 |
| 4 | Trần Đức Chính | B22DCCN115 |
| 5 | Thái Đoàn Trường | B22DCCN488 |
Slide trình bày: link.
| Phần | Nội dung | Phụ trách | Link |
|---|---|---|---|
| 1 | Giới thiệu đề tài | Giang | Introduce |
| 2.1 | Cách tiếp cận cơ bản | Giang | Basic approach |
| 2.2 | Sử dụng đa luồng | Trường | Multiprocess |
| 2.3 | Các bước tối ưu chương trình | Tiến | Optimization |
| 2.4 | Sử dụng external libraries | Chính | External libraries |
| 3 | So sánh với ngôn ngữ khác | Minh Anh | Compare with Java |
| 4 | Hướng phát triển tiếp theo | Minh Anh | Next step |
│ README.md # Mô tả dự án
│
├───Java solution
│ Blog1.java # Basic approach sử dụng Java
│ Blog2.java # Multithread trên Java
│ Blog6.java # Multithread trên Java đã tối ưu
│
└───Python solution
basicApproach.py # Basic approach sử dụng Python
calculateAverage_v0.py # Multithread trên Python
calculateAverage_v1.py # Cải tiến 1
calculateAverage_v2.py # Cải tiến 2
calculateAverage_v3.py # Cải tiến 3
calculateAverage_v4.py # Cải tiến 4
calculateAverage_v5.py # Cải tiến 5: code Python tối ưu
calculateAverageDuckDB.py # Sử dụng DuckDB
calculateAveragePolars.py # Sử dụng Polars
Cài đặt CPython, Pypy, Java JDK.
Cài đặt các thư viện hỗ trợ
- Mở thư mục
Python solutiontrên cmd - Cài đặt các thư viện trong requirements.txt
pip install -r .\requirements.txt #hoac pypy -m pip install -r .\requirements.txt
Tạo file dữ liệu
- Mở thư mục
Python solutiontrên cmd - Chạy file createMeasurements.py
python createMeasurements.py
Lưu ý: chọn phân vùng có dung lượng trống >= 15Gb.
Chạy chương trình
Chạy và kiểm nghiệm trên thực tế tốc độ các solution Java và Python.
- https://1brc.dev/#%F0%9F%92%AA-the-challenge
- https://www.morling.dev/blog/one-billion-row-challenge/
- https://www.morling.dev/blog/1brc-results-are-in/
- https://www.youtube.com/watch?v=utTaPW32gKY
- https://www.linkedin.com/pulse/from-minutes-seconds-supercharging-python-billion-row-krishan-gupta-2icfe/
- https://jszafran.dev/posts/how-pypy-impacts-the-performance-1br-challenge/
- https://github.com/ifnesi/1brc/tree/main
- https://www.infoq.com/news/2024/01/1brc-fast-java-processing/
- https://towardsdatascience.com/python-one-billion-row-challenge-from-10-minutes-to-4-seconds-0718662b303e
- https://questdb.io/blog/billion-row-challenge-step-by-step/
- https://medium.com/arcticdb/the-1-billion-row-challenge-1brc-on-arcticdb-a31c070af000
- https://benhoyt.com/writings/go-1brc/