reproducible benchmark of database-like ops
See the codeRepository for reproducible benchmarking of database-like operations in single-node environment.
Benchmark report is available at duckdblabs.github.io/db-benchmark.
We focused mainly on portability and reproducibility. Benchmark is routinely re-run to present up-to-date timings. Most of solutions used are automatically upgraded to their stable or development versions.
This benchmark is meant to compare scalability both in data volume and data complexity.
Contribution and feedback are very welcome!
If you would like your solution to be included, feel free to file a PR with the necessary setup-solution/ver-solution/groupby-solution/join-solution scripts. If the team at DuckDB Labs approves the PR it will be merged. In the interest of transparency and fairness, only results from open-source data-science tools will be merged.
virtualenv as $solution/py-$solution, example for pandas use virtualenv pandas/py-pandas --python=/usr/bin/python3.10$solution/setup-$solution.sh scripts by hand, they are not automatic scripts.run.conf to define solutions and tasks to benchmarkgroupby use Rscript _data/groupby-datagen.R 1e7 1e2 0 0 to create G1_1e7_1e2_0_0.csv, re-save to binary format where needed (see below), create data directory and keep all data files there_control/data.csv to define data sizes to benchmark using active flag./run.shvirtualenv for better isolationlibrary("dplyr", lib.loc="./dplyr/r-dplyr") or library("data.table", lib.loc="./datatable/r-datatable") worksdplyr requires data.table and similarly pandas requires (py)datatable_data/*-datagen.R scripts, for example, Rscript _data/groupby-datagen.R 1e7 1e2 0 0 creates G1_1e7_1e2_0_0.csv, put data files in data directory./_launcher/solution.R --solution=data.table --task=groupby --nrow=1e7--k=1e2 --na=0 --sort=0--quiet=true to suppress script's output and print timings only, using --print=question,run,time_sec specify columns to be printed to console, to print all use --print=*--out=time.csv to write timings to a file rather than console./data dirSRC_DATANAME=G1_1e7_1e2_0_0 R, if desired replace R with python or juliaThe benchmark will now be updated upon request. A request can be made by creating a PR with a combination of the following.
The PR must include
The PR must include one of the following
To facilitate creating an instance identical to the one with the current results, the script _utils/format_and_mount.sh was created. The script does the following
db-benchmark-metal on the nvme drive. This directory is a clone of the repository. Having a clone of the benchmark on the nvme drive enables the solutions to load the data faster (assuming you follow the steps to copy the data onto the nvme mount).Once the db-benchmark-metal directory is created, you will need to
./_utils/format_and_mount.sh -c the datasets will be created for you. Creating every dataset will take at least >1hrpublic.The PR will then be reviewed by the DuckDB Labs team where we will run the benchmark again ourselves to validate the new results. If there aren't any questions, we will merge the PR and publish a new report!
Timings for solutions from before the fork have been deleted. You can still view them on the original h2oai/db-benchmark fork. Including these timings in report generation resulted in errors, and since all libraries have been updated and benchmarked using new hardware, the decision was made to start a new results file. Timings for some solutions might be missing for particular data sizes or questions. Some functions are not yet implemented in all solutions so we were unable to answer all questions in all solutions. Some solutions might also run out of memory when running benchmark script which results the process to be killed by OS. There is also a timeout for single benchmark script to run, once the timeout value is reached script is terminated. Please check exceptions label in the original h2oai repository for a list of issues/defects in solutions, that makes us unable to provide all timings. There is also no documentation label that lists issues that are blocked by missing documentation in solutions we are benchmarking.
In the interest of transparency and fairness, only results from open-source data-science tools will be included in the benchmark.
R
41.5%
Python
39.3%
Shell
10.4%
Julia
5.5%
Haskell
3.3%
reproducible benchmark of database-like ops
See the codeRepository for reproducible benchmarking of database-like operations in single-node environment.
Benchmark report is available at duckdblabs.github.io/db-benchmark.
We focused mainly on portability and reproducibility. Benchmark is routinely re-run to present up-to-date timings. Most of solutions used are automatically upgraded to their stable or development versions.
This benchmark is meant to compare scalability both in data volume and data complexity.
Contribution and feedback are very welcome!
If you would like your solution to be included, feel free to file a PR with the necessary setup-solution/ver-solution/groupby-solution/join-solution scripts. If the team at DuckDB Labs approves the PR it will be merged. In the interest of transparency and fairness, only results from open-source data-science tools will be merged.
virtualenv as $solution/py-$solution, example for pandas use virtualenv pandas/py-pandas --python=/usr/bin/python3.10$solution/setup-$solution.sh scripts by hand, they are not automatic scripts.run.conf to define solutions and tasks to benchmarkgroupby use Rscript _data/groupby-datagen.R 1e7 1e2 0 0 to create G1_1e7_1e2_0_0.csv, re-save to binary format where needed (see below), create data directory and keep all data files there_control/data.csv to define data sizes to benchmark using active flag./run.shvirtualenv for better isolationlibrary("dplyr", lib.loc="./dplyr/r-dplyr") or library("data.table", lib.loc="./datatable/r-datatable") worksdplyr requires data.table and similarly pandas requires (py)datatable_data/*-datagen.R scripts, for example, Rscript _data/groupby-datagen.R 1e7 1e2 0 0 creates G1_1e7_1e2_0_0.csv, put data files in data directory./_launcher/solution.R --solution=data.table --task=groupby --nrow=1e7--k=1e2 --na=0 --sort=0--quiet=true to suppress script's output and print timings only, using --print=question,run,time_sec specify columns to be printed to console, to print all use --print=*--out=time.csv to write timings to a file rather than console./data dirSRC_DATANAME=G1_1e7_1e2_0_0 R, if desired replace R with python or juliaThe benchmark will now be updated upon request. A request can be made by creating a PR with a combination of the following.
The PR must include
The PR must include one of the following
To facilitate creating an instance identical to the one with the current results, the script _utils/format_and_mount.sh was created. The script does the following
db-benchmark-metal on the nvme drive. This directory is a clone of the repository. Having a clone of the benchmark on the nvme drive enables the solutions to load the data faster (assuming you follow the steps to copy the data onto the nvme mount).Once the db-benchmark-metal directory is created, you will need to
./_utils/format_and_mount.sh -c the datasets will be created for you. Creating every dataset will take at least >1hrpublic.The PR will then be reviewed by the DuckDB Labs team where we will run the benchmark again ourselves to validate the new results. If there aren't any questions, we will merge the PR and publish a new report!
Timings for solutions from before the fork have been deleted. You can still view them on the original h2oai/db-benchmark fork. Including these timings in report generation resulted in errors, and since all libraries have been updated and benchmarked using new hardware, the decision was made to start a new results file. Timings for some solutions might be missing for particular data sizes or questions. Some functions are not yet implemented in all solutions so we were unable to answer all questions in all solutions. Some solutions might also run out of memory when running benchmark script which results the process to be killed by OS. There is also a timeout for single benchmark script to run, once the timeout value is reached script is terminated. Please check exceptions label in the original h2oai repository for a list of issues/defects in solutions, that makes us unable to provide all timings. There is also no documentation label that lists issues that are blocked by missing documentation in solutions we are benchmarking.
In the interest of transparency and fairness, only results from open-source data-science tools will be included in the benchmark.
R
41.5%
Python
39.3%
Shell
10.4%
Julia
5.5%
Haskell
3.3%