You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit aec8d83
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: bench/BENCHMARKS-windows.md
+4-1Lines changed: 4 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -143,7 +143,10 @@ prune -af` between entries.
143
143
| clickhouse | PASS (`ClickHouse (via ODBC) 26.7.5.10`), clickhouse-odbc 1.5.5 from the GitHub MSI, server at 1 GB (97 MB used); pyodbc ingest at one HTTP request per row was at 3,501 rows after 15 min and was capped (`--pyodbc-timeout 120`) | 159,763 | 107,933 | 282 (516) | — |
144
144
| doris |**server not runnable here**: 7 GB image against 5–10 GB free host disk, ~2.5 GB resident under a 6 GB cap, 2.4 GB VM — not attempted, since the pull would have filled the disk under Docker |||||
145
145
146
-
**A class, not four incidents:** MySQL Connector/ODBC 8.4.0 (the only version published for Windows) reads result sets from a MySQL-wire server that lacks the character-set session variables as 3-byte `utf8`, so astral-plane characters come back as `???` on read while storage is byte-exact; the same driver reads 🚀 from MySQL, Percona, MariaDB, TiDB and Dolt, which expose the variables, and Linux passes on 9.4. Affected: databend, greptimedb, matrixone, mongodbbi. Everything else in
146
+
| ydb | PASS (`PostgreSQL (via ODBC) 14.0.5`) with psqlodbc 16.00.0007, registered by hand — 18.00.0002 fails at connect (`unrecognized configuration parameter "datestyle"`), and a DLL path in `Driver=` gets `IM002` from the Windows driver manager (unixODBC accepts one); 1,024 MB used at 1536m | 101,712 | 61,361 | 750 (756) | 38 |
147
+
| starrocks |**FAIL** at the astral check only — fifth member of the class; StarRocks 4.x at 1536m (976 MB used) | 402,109 | 213,907 | 2,603 (3,957) | — |
148
+
149
+
**A class, not five incidents:** MySQL Connector/ODBC 8.4.0 (the only version published for Windows) reads result sets from a MySQL-wire server that lacks the character-set session variables as 3-byte `utf8`, so astral-plane characters come back as `???` on read while storage is byte-exact; the same driver reads 🚀 from MySQL, Percona, MariaDB, TiDB and Dolt, which expose the variables, and Linux passes on 9.4. Affected: databend, greptimedb, matrixone, mongodbbi, starrocks. Everything else in
147
150
their workloads passes, and their read rates are among the best on this machine.
148
151
149
152
openGauss operator note: the `adbc` role must be created *inside* the container as `omm` via
The first five databases: 24 of 25 cells; tier 3 (Docker Desktop on WSL2, one container at a time at 1 GB) follows below them — Rust's arrow-odbc fetch on tier 3: cockroachdb 198,095, timescaledb 229,103, citus 291,885, cratedb 210,859, questdb 211,570, tidb 342,479, mariadb 299,628, percona 427,781, arcadedb 96,694, risingwave 208,683, materialize 94,970, yugabyte 238,927, opengauss 218,913, databend 302,666, greptimedb 581,868, matrixone 410,862, cloudberry 280,066, mongodbbi 85,434 (read-only entry). ClickHouse's four harness rows were not captured: C# was stopped after 20 minutes on its row-per-HTTP-request native ingest and that run's other rows went with it; the entry is 300/2,000 rows on every platform for the same reason. Cloudberry ingests at ~3.5k rows/s from all five languages alike — the MPP dispatch cost of a coordinator and two segments in one container, not a client property. Spanner has no rows on Windows: the emulator wedges under the bench (`docs/COMPATIBILITY.md`). The databend, greptimedb, matrixone and mongodbbi rows are measured on entries whose compat result on Windows is FAIL for one reason shared by all four (astral characters read back as `???` through Connector/ODBC 8.4.0 from a server without character-set variables, `docs/COMPATIBILITY.md`); the benchmark carries no astral text, so the rows stand, with that caveat. GreptimeDB's 771,731 rows/s from Go is the fastest single cell Windows produced. ArcadeDB is a read-only entry: its ingest cells are empty by construction. Java and C# read ArcadeDB at 4,361 and 9,743 rows/s against ~100,000 for Python, Rust and Go — the same 1.2-1.5M-vs-100k spread the Linux file records for that server, not a Windows effect. `stopped` marks a harness whose *native* row-at-a-time ingest ran at tens of rows/s on CrateDB and Dolt and was stopped after 10 minutes (C# on CrateDB after 30) — the harness prints its row only at the end, so the ADBC numbers for that run are lost with it; `hung` is Java on Dolt, whose ADBC-only run produced nothing in 10 minutes and was killed, unexplained. The sqlite rows were re-taken with the rest of the grid, so they differ from
154
+
The first five databases: 24 of 25 cells; tier 3 (Docker Desktop on WSL2, one container at a time at 1 GB) follows below them — Rust's arrow-odbc fetch on tier 3: cockroachdb 198,095, timescaledb 229,103, citus 291,885, cratedb 210,859, questdb 211,570, tidb 342,479, mariadb 299,628, percona 427,781, arcadedb 96,694, risingwave 208,683, materialize 94,970, yugabyte 238,927, opengauss 218,913, databend 302,666, greptimedb 581,868, matrixone 410,862, cloudberry 280,066, mongodbbi 85,434 (read-only entry). YDB's harness rows are `no connect`: all four harness processes failed to connect through the registry-registered psqlodbc 16 driver while Python connected through the same adbcbridge DLL (the 16 DLL's libpq/OpenSSL dependencies not resolving for those processes is the likely cause; not chased). StarRocks' rust arrow-odbc fetch: 561,589. ClickHouse's four harness rows were not captured: C# was stopped after 20 minutes on its row-per-HTTP-request native ingest and that run's other rows went with it; the entry is 300/2,000 rows on every platform for the same reason. Cloudberry ingests at ~3.5k rows/s from all five languages alike — the MPP dispatch cost of a coordinator and two segments in one container, not a client property. Spanner has no rows on Windows: the emulator wedges under the bench (`docs/COMPATIBILITY.md`). The databend, greptimedb, matrixone, mongodbbi and starrocks rows are measured on entries whose compat result on Windows is FAIL for one reason shared by all five (astral characters read back as `???` through Connector/ODBC 8.4.0 from a server without character-set variables, `docs/COMPATIBILITY.md`); the benchmark carries no astral text, so the rows stand, with that caveat. GreptimeDB's 771,731 rows/s from Go is the fastest single cell Windows produced. ArcadeDB is a read-only entry: its ingest cells are empty by construction. Java and C# read ArcadeDB at 4,361 and 9,743 rows/s against ~100,000 for Python, Rust and Go — the same 1.2-1.5M-vs-100k spread the Linux file records for that server, not a Windows effect. `stopped` marks a harness whose *native* row-at-a-time ingest ran at tens of rows/s on CrateDB and Dolt and was stopped after 10 minutes (C# on CrateDB after 30) — the harness prints its row only at the end, so the ADBC numbers for that run are lost with it; `hung` is Java on Dolt, whose ADBC-only run produced nothing in 10 minutes and was killed, unexplained. The sqlite rows were re-taken with the rest of the grid, so they differ from
145
155
the first-day numbers in `BENCHMARKS-windows.md` by the run-to-run variance recorded there.
146
156
Rust's arrow-odbc fetch, not in the table: sqlite 396,258, mssql 896,103, postgres 411,178,
147
157
mysql 489,701. Three words stand for three different kinds of empty native cell — `skipped`
Copy file name to clipboardExpand all lines: bench/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ says nothing about Windows.
9
9
| OS | File | State |
10
10
|---|---|---|
11
11
| Linux (Ubuntu 24.04, unixODBC 2.3.12) |[`BENCHMARKS.md`](BENCHMARKS.md) — PostgreSQL vs native, the write path, partitioned reads; [`MATRIX_BENCHMARKS.md`](MATRIX_BENCHMARKS.md) — 46 databases; [`LANGUAGE_BENCHMARKS.md`](LANGUAGE_BENCHMARKS.md) — five languages × 46; [`RUST_BENCHMARKS.md`](RUST_BENCHMARKS.md)|**measured**|
12
-
| Windows 11 (x64, i7-8550U, 8 GB, the OS's own driver manager) |[`BENCHMARKS-windows.md`](BENCHMARKS-windows.md) — SQLite, DuckDB, SQL Server 2025, PostgreSQL 16, MySQL 8.4, then CockroachDB, TimescaleDB, Citus, CrateDB, QuestDB, TiDB, Dolt, Percona, ArcadeDB, RisingWave, Materialize, YugabyteDB, openGauss, Spanner, Cloudberry, ClickHouse under Docker Desktop and MariaDB 12.3 natively; [`LANGUAGE_BENCHMARKS-windows.md`](LANGUAGE_BENCHMARKS-windows.md) — five languages × five databases, 24 of 25 cells |**measured, one machine, single samples, tier 3 in progress** (first build ever on 2026-08-24; ten defects found and fixed the same day across driver, tests and harnesses, three of them silent text corruption from the ANSI code page; verified at `b5d2791`; no prefetch and no ingest fan-out in the Windows build, 26% run-to-run variance on the box, so not comparable with Linux; every other entry carries its reason or `pending`) |
12
+
| Windows 11 (x64, i7-8550U, 8 GB, the OS's own driver manager) |[`BENCHMARKS-windows.md`](BENCHMARKS-windows.md) — SQLite, DuckDB, SQL Server 2025, PostgreSQL 16, MySQL 8.4, then CockroachDB, TimescaleDB, Citus, CrateDB, QuestDB, TiDB, Dolt, Percona, ArcadeDB, RisingWave, Materialize, YugabyteDB, openGauss, Spanner, Cloudberry, ClickHouse, YDB under Docker Desktop and MariaDB 12.3 natively; [`LANGUAGE_BENCHMARKS-windows.md`](LANGUAGE_BENCHMARKS-windows.md) — five languages × five databases, 24 of 25 cells |**measured, one machine, single samples, tier 3 in progress** (first build ever on 2026-08-24; ten defects found and fixed the same day across driver, tests and harnesses, three of them silent text corruption from the ANSI code page; verified at `b5d2791`; no prefetch and no ingest fan-out in the Windows build, 26% run-to-run variance on the box, so not comparable with Linux; every other entry carries its reason or `pending`) |
13
13
| macOS (Apple M4 Max, arm64, unixODBC 2.3.12) |[`BENCHMARKS-macos.md`](BENCHMARKS-macos.md) — SQLite, PostgreSQL 15, SQL Server 2022 |**measured, one machine** (PostgreSQL vs native there: 0.60x fetch, 0.50x ingest -- indicative, not the reference) |
14
14
15
15
The two unmeasured files carry the exact commands to produce their tables, so
Copy file name to clipboardExpand all lines: docs/COMPATIBILITY.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -179,7 +179,7 @@ Details and the machine descriptions: `bench/BENCHMARKS-macos.md`, `bench/BENCHM
179
179
| doris | PASS | PASS with MySQL Connector/ODBC 26.7.1 (Oracle's macOS arm64 binary, built for iODBC) through a bridge built against iODBC 3.52.16 — `MySQL (via ODBC) 5.7.99`, 300/2,000 rows as on Linux; **FAIL through MariaDB Connector/ODBC 3.2.9**: the server NPEs on its server-side prepared INSERT and rejects the `_binary '<raw bytes>'` literal its `PREPONCLIENT=1` path inlines | server not runnable here: the image is 7 GB against 5–10 GB of free host disk and the server holds ~2.5 GB resident under a 6 GB cap, against a 2.4 GB VM — not attempted, deliberately, since the pull alone would have filled the disk under Docker |
180
180
| oceanbase | PASS | PASS (OceanBase CE, MySQL wire 5.7.25) — `MODE=SLIM`, boots in 40 s, 4.3 GiB peak | pending (Docker Desktop on WSL2 now available; tier 3 running one container at a time at 1 GB) |
181
181
| greptimedb | PASS | PASS with MySQL Connector/ODBC 26.7.1 (Oracle's macOS arm64 binary, built for iODBC) through a bridge built against iODBC 3.52.16 — `MySQL (via ODBC) 8.4.2`; **FAIL through MariaDB Connector/ODBC 3.2.9** at the same `DUAL` probe (`Table not found: greptime.public.dual`), identical through pyodbc | FAIL: the astral check only — `héllo 🚀` reads back as `héllo ???` through pyodbc and the bridge alike (`@@character_set_client` returns 0). MySQL Connector/ODBC 8.4.0 (the only version published for Windows) reads result sets from a MySQL-wire server that lacks the character-set session variables as 3-byte `utf8`, so astral-plane characters come back as `???` on read while storage is byte-exact; the same driver reads 🚀 from MySQL, Percona, MariaDB, TiDB and Dolt, which expose the variables, and Linux passes on 9.4. Everything else passes; GreptimeDB 1.1.4, 41 MB in-container |
182
-
| starrocks | PASS | PASS with MySQL Connector/ODBC 26.7.1 (Oracle's macOS arm64 binary, built for iODBC) through a bridge built against iODBC 3.52.16 — `MySQL (via ODBC) 8.0.33`, 300/2,000 rows; **FAIL through MariaDB Connector/ODBC 3.2.9**: syntax error at the connector's inlined `_binary ''` literal, with and without `PREPONCLIENT=1`|pending (Docker Desktop on WSL2 now available; tier 3 running one container at a time at 1 GB) |
182
+
| starrocks | PASS | PASS with MySQL Connector/ODBC 26.7.1 (Oracle's macOS arm64 binary, built for iODBC) through a bridge built against iODBC 3.52.16 — `MySQL (via ODBC) 8.0.33`, 300/2,000 rows; **FAIL through MariaDB Connector/ODBC 3.2.9**: syntax error at the connector's inlined `_binary ''` literal, with and without `PREPONCLIENT=1`|FAIL: the astral check only — fifth member of the class: MySQL Connector/ODBC 8.4.0 (the only version published for Windows) reads result sets from a MySQL-wire server that lacks the character-set session variables as 3-byte `utf8`, so astral-plane characters come back as `???`on read while storage is byte-exact; the same driver reads 🚀 from MySQL, Percona, MariaDB, TiDB and Dolt, which expose the variables, and Linux passes on 9.4. Everything else passes with the second-fastest fetch of the Windows campaign; StarRocks 4.x (allin1-ubuntu), fits at `--memory=1536m` (976 MB used, `MemLimit 1.215GB`) |
183
183
| mongodbbi | PASS | PASS (BI Connector, MySQL wire 5.7.12; read-only) — no macOS build of mongosqld 2.14.x exists, the linux-arm64 build runs inside the `mongo:7` arm64 container | FAIL: the astral check only — the fourth member of the class: MySQL Connector/ODBC 8.4.0 (the only version published for Windows) reads result sets from a MySQL-wire server that lacks the character-set session variables as 3-byte `utf8`, so astral-plane characters come back as `???` on read while storage is byte-exact; the same driver reads 🚀 from MySQL, Percona, MariaDB, TiDB and Dolt, which expose the variables, and Linux passes on 9.4. Everything else in the read-only workload passes; mongosqld v2.14.22 over mongo:7, libssl 1.1 staged per the README, 125 MB in-container, no `NO_SSPS` needed |
184
184
| db2 | PASS | PASS (Db2 12.01.0500, IBM macarm64 clidriver; server amd64 emulated) | pending (Docker Desktop on WSL2 now available; tier 3 running one container at a time at 1 GB) |
185
185
| informix | PASS | PASS (IDS 12.10, same arm64 clidriver; server amd64 emulated) | pending (Docker Desktop on WSL2 now available; tier 3 running one container at a time at 1 GB) |
@@ -203,7 +203,7 @@ Details and the machine descriptions: `bench/BENCHMARKS-macos.md`, `bench/BENCHM
203
203
| influxdb3 | PASS | PASS (`InfluxDB IOx (via ODBC) 02.00.0000`; read-only) through a bridge built against iODBC — Python fetch 8,741,131 rows/s. Through unixODBC: the same driver-manager abort as Flight SQL (one driver binary behind all three) | pending (Docker Desktop on WSL2 now available; tier 3 running one container at a time at 1 GB) |
204
204
| ignite | PASS | driver unavailable: platforms/cpp has only linux/ and win/ OS layers; the Darwin build stops at `sys/sysinfo.h`| pending (Docker Desktop on WSL2 now available; tier 3 running one container at a time at 1 GB) |
205
205
| opensearch | PASS | driver unavailable: the project's macOS pkg is x86_64-only (Intel Macs not targeted) | pending (Docker Desktop on WSL2 now available; tier 3 running one container at a time at 1 GB) |
206
-
| ydb | PASS | PASS with psqlodbc 16.00.0005 built from `REL-16_00_0005` (YDB, PostgreSQL wire 14.0.5); **FAIL with psqlodbc 18.00.0002**: psqlodbc 18.00.0002 sends `SHOW DateStyle;` at connect (connection.c:1109) and YDB's PostgreSQL layer answers `unrecognized configuration parameter "datestyle"` — a driver-version incompatibility; psqlodbc 16 (Linux) does not issue it |not run: the server needs a container runtime and this box has none (Docker Desktop needs WSL2 — administrator rights and a reboot — declined by the user). Its Windows client path, psqlodbc, is the one PostgreSQL 16 passed with — and it needs psqlodbc 16 (18.00.0002 fails at connect with SHOW DateStyle, as on macOS)|
206
+
| ydb | PASS | PASS with psqlodbc 16.00.0005 built from `REL-16_00_0005` (YDB, PostgreSQL wire 14.0.5); **FAIL with psqlodbc 18.00.0002**: psqlodbc 18.00.0002 sends `SHOW DateStyle;` at connect (connection.c:1109) and YDB's PostgreSQL layer answers `unrecognized configuration parameter "datestyle"` — a driver-version incompatibility; psqlodbc 16 (Linux) does not issue it |PASS (YDB, PostgreSQL wire 14.0.5) with psqlodbc 16.00.0007 — **both driver facts Windows-measured**: psqlodbc 18.00.0002 fails at `SQLDriverConnect` with `unrecognized configuration parameter "datestyle"`; 16.00.0007 passes, but only once *registered* (an elevated HKLM write, as "PostgreSQL Unicode 16(x64)"), because the Windows driver manager answers `IM002` to a DLL path in `Driver=`, which unixODBC accepts. `--memory=1536m`, 1,024 MB used|
207
207
| dremio | PASS | PASS (`Dremio Server (via ODBC) 26.00.0005`; read-only) through a bridge built against iODBC — Python fetch 1,341,476 rows/s. Through unixODBC: the same driver-manager abort as Flight SQL | pending (Docker Desktop on WSL2 now available; tier 3 running one container at a time at 1 GB) |
208
208
| tdengine | PASS | PASS (3.3.6.13, vendor arm64 client) | pending (Docker Desktop on WSL2 now available; tier 3 running one container at a time at 1 GB) |
209
209
| access | PASS | PASS (mdbtools 1.0.1 from source, one local patch: fakeglib `g_strsplit`) | driver unavailable on x64: the ACE drivers on the machine are 32-bit (they come with a 32-bit Office install), the 64-bit Access Database Engine redistributable refuses to install beside 32-bit Office, and a 32-bit adbcbridge build is out of scope (the project targets 64-bit). A reproducible constraint for anyone with 32-bit Office, not a gap in the driver |
0 commit comments