Repository navigation
Expand file tree
/
Copy pathbenchmarks.html
More file actions
133 lines (129 loc) · 7.91 KB
/
Copy pathbenchmarks.html
File metadata and controls
133 lines (129 loc) · 7.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>CSV import benchmarks: Scriptella</title>
<meta name="description" content="Reproducible million-row CSV import results for Scriptella 1.7.0, JDBC, Pandas, and native PostgreSQL and MariaDB loaders.">
<link rel="canonical" href="https://scriptella.org/benchmarks.html">
<meta property="og:title" content="CSV import benchmarks: Scriptella">
<meta property="og:description" content="Reproducible million-row CSV import results for Scriptella 1.7.0, JDBC, Pandas, and native PostgreSQL and MariaDB loaders.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://scriptella.org/benchmarks.html">
<meta property="og:image" content="https://scriptella.org/images/scriptella-og.jpg">
<meta property="og:image:type" content="image/jpeg">
<meta property="og:image:alt" content="Scriptella lightweight Java ETL tool with SQL to JSON, CSV and database pipeline">
<meta property="og:image:width" content="1720">
<meta property="og:image:height" content="897">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://scriptella.org/images/scriptella-og.jpg">
<meta name="twitter:title" content="CSV import benchmarks: Scriptella">
<meta name="twitter:description" content="Reproducible million-row CSV import results for Scriptella 1.7.0, JDBC, Pandas, and native PostgreSQL and MariaDB loaders.">
<link rel="icon" href="favicon.ico" sizes="32x32">
<link rel="icon" type="image/png" href="favicon-192.png" sizes="192x192">
<script src="theme.js"></script>
<link rel="stylesheet" href="style.css?v=20261022">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to content</a>
<header class="site-header">
<nav class="primary-nav" aria-label="Primary navigation">
<div class="site-header__inner">
<a class="site-logo" href="index.html" aria-label="Scriptella home">
<img class="site-logo__dark" src="images/scriptella-logo.svg" width="190" height="38" alt="Scriptella">
<img class="site-logo__light" src="images/scriptella-logo-light.svg" width="190" height="38" alt="Scriptella">
</a>
<ul>
<li><a href="reference/index.html">Documentation</a></li>
<li><a href="tutorial.html">Tutorial</a></li>
<li><a href="installation.html">Install</a></li>
<li><a href="download.html">Download</a></li>
<li><a href="https://github.com/scriptella/scriptella-etl">GitHub</a></li>
</ul>
<div class="header-controls">
<button class="theme-toggle" type="button" data-theme-toggle data-theme-current="system" aria-label="Color theme: System. Switch to Light." title="System theme: switch to Light">
<span class="visually-hidden">Change color theme</span>
</button>
</div>
</div>
</nav>
</header>
<main id="main-content" class="page-shell page-shell--reading">
<article class="page-content">
<h1>CSV import benchmarks</h1>
<p class="lede">One million CSV rows imported in 8.747 seconds on PostgreSQL and 7.950 seconds on MariaDB with Scriptella 1.7.0.</p>
<p>Handwritten JDBC was faster, at 7.642 and 5.755 seconds. Pandas took 31.551 and 20.377 seconds. PostgreSQL COPY took 1.750 seconds, and MariaDB LOAD DATA LOCAL took 3.287 seconds.</p>
<h2 id="ci-results">Benchmark results</h2>
<p>Benchmark v5: median of two runs on 2026-11-03, Intel Mac, Colima x86_64 with 4 CPUs and 6 GiB. Lower is faster.</p>
<figure>
<img src="images/benchmarks/v5-local.svg" width="806" height="490" alt="Median import times. PostgreSQL: Scriptella 8.747 seconds, JDBC 7.642 seconds, Pandas 31.551 seconds, COPY 1.750 seconds. MariaDB: Scriptella 7.950 seconds, JDBC 5.755 seconds, Pandas 20.377 seconds, LOAD DATA LOCAL 3.287 seconds.">
<figcaption>Linear duration axis starting at zero. Bars are medians; dots are the two runs.</figcaption>
</figure>
<div class="table-scroll" tabindex="0" role="region" aria-label="Benchmark v5 median durations">
<table>
<thead>
<tr>
<th scope="col">Database</th>
<th scope="col">Scriptella 1.7.0</th>
<th scope="col">JDBC</th>
<th scope="col">Pandas</th>
<th scope="col">Native reference</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">PostgreSQL</th>
<td>8.747 s</td>
<td>7.642 s</td>
<td>31.551 s</td>
<td>COPY: 1.750 s</td>
</tr>
<tr>
<th scope="row">MariaDB</th>
<td>7.950 s</td>
<td>5.755 s</td>
<td>20.377 s</td>
<td>LOAD DATA LOCAL: 3.287 s</td>
</tr>
</tbody>
</table>
</div>
<p><small>Same million-row CSV, pre-created tables, one transaction per import, no indexes or transformations. Timings include client startup, CSV parsing, insertion, and commit; setup and verification are excluded. Scriptella and JDBC use batch size 1000. PostgreSQL batch rewriting is enabled for both; MariaDB uses driver defaults. Pandas reads 10,000-row chunks and writes 1,000-row chunks. Values are medians of two runs. Results depend on workload and environment. COPY and LOAD DATA LOCAL are database-specific references with different parsing and error semantics.</small></p>
<p>See the <a href="https://github.com/scriptella/scriptella-benchmarks">benchmarks repository</a> for <a href="https://github.com/scriptella/scriptella-benchmarks/tree/main/docs/results/2026-11-03-local-v5">full results and environment details</a>, methodology, and instructions to reproduce the comparison.</p>
<p>For tuning advice, see the <a href="https://github.com/scriptella/scriptella-etl/blob/master/docs/batching-performance.md">batching and insert performance guide</a>.</p>
<p>Further reading: <a href="https://pvrlabs.xyz/articles/importing-a-million-csv-rows.html">Importing a million CSV rows</a> and <a href="https://pvrlabs.xyz/java-performance/experiments/postgresql-batch-rewrite.html">how PostgreSQL batch rewriting improved import performance</a> on PVR Labs.</p>
<!-- GitHub star prompt: keep in sync with github-prompt.html -->
<aside class="github-prompt" aria-label="Support Scriptella">
<p>Scriptella useful? <a href="https://github.com/scriptella/scriptella-etl">Star it on GitHub</a> to help others discover it.</p>
</aside>
</article>
</main>
<footer class="site-footer">
<div class="site-footer__inner">
<p><strong>Scriptella</strong> · Licensed under the Apache License, Version 2.0.</p>
<p class="site-footer__credit">Built by <a class="pvrlabs-wordmark" href="https://pvrlabs.xyz" aria-label="PVR Labs"><span class="pvrlabs-wordmark__accent">PVR</span><span class="pvrlabs-wordmark__light">Labs</span></a></p>
<nav aria-label="Footer navigation">
<ul>
<li><a href="reference/index.html">Documentation</a></li>
<li><a href="faq.html">FAQ</a></li>
<li><a href="docs/api/index.html">API Docs</a></li>
<li><a href="docs/dtd/index.html">DTD Reference</a></li>
<li><a href="https://github.com/scriptella/scriptella-etl">GitHub</a></li>
<li><a href="benchmarks.html">Benchmarks</a></li>
<li><a href="changes.html">Change History</a></li>
<li><a href="license.html">License</a></li>
<li><a href="support.html">Support</a></li>
</ul>
</nav>
</div>
</footer>
<!-- StatCounter: existing Scriptella project configuration -->
<script>
var sc_project = 10775960;
var sc_invisible = 1;
var sc_security = "53eaed1c";
</script>
<script defer src="https://secure.statcounter.com/counter/counter.js"></script>
<!-- End StatCounter -->
</body>
</html>