I benchmarked importing 1 million CSV rows with Scriptella, JDBC, csvsql, and PostgreSQL COPY
I maintain Scriptella, an open-source Java ETL tool, and wanted to establish a reproducible performance baseline for CSV imports.
I compared 11 import configurations using PostgreSQL and MariaDB, with 1 million rows per test.
Some results from the latest CI run:
| Method | PostgreSQL | MariaDB |
|---|---|---|
| Scriptella (batched) | 12.36s | 7.40s |
| Handwritten JDBC (batched) | 9.24s | 4.72s |
| csvsql (chunked) | 400.68s | 389.35s |
| PostgreSQL COPY | 1.33s | N/A |
Native COPY was fastest for PostgreSQL, as expected. Handwritten JDBC also outperformed Scriptella, while both were substantially faster than the tested csvsql workflow.
These are end-to-end timings, not isolated framework overhead measurements. The comparison uses one workload and one CI run, with different import mechanisms.
I've published the source code, Docker Compose setup, raw measurements, charts, and reproduction instructions:
https://github.com/scriptella/scriptella-benchmarks
I'd be interested in feedback from people working with ETL pipelines, particularly on which additional workloads would make this comparison more useful.