跪拜 Guibai
← All articles
Database · MySQL

Rust + GPUI FluxDB Benchmarks Lower Memory and Smoother Scrolling Than Tauri DBX and Eclipse DBeaver

By FluxDB ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

Database clients stay open for hours, and every extra megabyte of idle memory or 33 ms frame interval compounds into noticeable drag on wide tables and multiple connections. This benchmark shows a native GPU-rendered Rust UI can beat both WebView and JVM stacks on those two specific pain points, which is directly relevant to anyone who lives in a SQL client.

Summary

A benchmark on a MacBook Pro M3 pitched three database clients against the same PostgreSQL 16 table: 200k rows, 30 columns, and a 10k-row `SELECT * ... LIMIT 10000` query. FluxDB, built on Rust and the GPUI rendering framework, peaked at 265 MiB during the query, versus 552 MiB for DBX (Rust + Tauri 2 + Vue 3) and 828 MiB for DBeaver (Java + Eclipse RCP). Idle memory told a similar story: FluxDB sat at 135 MiB, DBX at 200 MiB, and DBeaver at 411 MiB. After closing the result page, FluxDB settled back to 191 MiB, while DBX stayed at 411 MiB and DBeaver at 468 MiB.

Scrolling smoothness also separated the stacks. Effective FPS during a 20-second scroll was close between FluxDB (52.64) and DBX (50.48), but the P95 frame interval told a different story: FluxDB held at 16.67 ms while both DBX and DBeaver sat at 33.33 ms. DBX suffered a max stall of 516.67 ms versus FluxDB's 300 ms. FluxDB's design explains the gap: no WebView layer, paginated SQL results, virtualized MongoDB document lists, a single process, and cache memory that releases after closing result pages. The article acknowledges DBeaver's 130+ plugins and 100+ driver support and DBX's cross-platform reach and rapid UI iteration as strengths that come with higher resource overhead.

Takeaways
— On an Apple M3 MacBook Pro (16 GB, macOS 14.2), FluxDB used 265 MiB at query peak vs 552 MiB for DBX and 828 MiB for DBeaver when loading 10k rows from a 200k-row PostgreSQL table.
— FluxDB's idle memory was 134.6 MiB, DBX 200.1 MiB, and DBeaver 411.2 MiB; after closing the result page, FluxDB settled at 191.3 MiB, DBX at 411.3 MiB, and DBeaver at 467.8 MiB.
— FluxDB achieved 52.64 effective FPS and a P95 frame interval of 16.67 ms during a 20-second scroll; DBX hit 50.48 FPS with a 33.33 ms P95 and a 516.67 ms max stall; DBeaver managed 43.48 FPS with a 33.33 ms P95 and 483.33 ms max stall.
— FluxDB runs as a single process; DBX ran 4 processes and DBeaver 1-2 processes in the benchmark, with `footprint -t` aggregating subprocess memory.
— FluxDB loads SQL results page by page and uses a virtualized list for MongoDB documents to avoid building all 300k cells of a 30-column by 10k-row result set.
— FluxDB supports 9 databases: MySQL, PostgreSQL, SQL Server, Oracle, SQLite, TiDB, DM8, MongoDB, and Redis.
— The reproduction steps include running PostgreSQL 16 in a Podman container and invoking `scripts/bench-memory-macos.sh` and `scripts/bench-fps-macos.sh` for each client.
Conclusions

Average FPS masks perceptible stutter: DBX's 50.48 fps and FluxDB's 52.64 fps look similar on paper, but DBX's 33.33 ms P95 frame interval and 516 ms max stall mean users will feel the difference when scrolling wide result tables.

Post-close memory retention is a stronger differentiator than peak memory for real usage. DBX holds 411 MiB after closing a result page, not because of a leak but likely because WebView caches don't release quickly, and that fixed cost piles up when switching between many results and schemas.

The tradeoff is explicit: DBeaver's 130+ plugins and 100+ drivers and DBX's fast UI iteration and cross-platform reach come with a JVM or WebView/two-process overhead. A leaner client like FluxDB wins on resource usage but intentionally trades away ecosystem breadth.

Concepts & terms
GPUI
A GPU-accelerated UI framework for Rust that renders interfaces directly without HTML/CSS/DOM or a system WebView, giving a short rendering path and few process boundaries.
Tauri
A framework that builds desktop apps with a Rust backend and a system WebView frontend (often paired with a JS framework like Vue), trading some performance and process overhead for fast UI development.
Eclipse RCP
A rich client platform for Java that provides a plugin architecture (based on OSGi) and standard desktop UI widgets (SWT/JFace), used by heavy applications like DBeaver.
P95 frame interval
The 95th percentile of the time between rendered frames during an animation; a more reliable indicator of perceived smoothness than average FPS because it captures the worst-case jank users actually see.
footprint -t
A macOS memory measurement command that reports the total memory footprint of a process and all its child processes, so WebView and JVM subprocess memory is not missed.
From the discussion
Featured comments
fuuhoo

Personally, DBX is the smoothest to use besides Navicat; I really can't get used to DBeaver, and I haven't tried FluxDB yet.

FluxDB

You can try FluxDB; it was made referencing DBX and Navicat.

See top comments, translated →
Source: juejin.cn ↗ Google Translate ↗ Backup ↗