Performance
Features · Performance · Compatibility
These figures come from one performance-suite run on one machine against six remotes. It uses the Python SDK installed from candidate packages. See Concepts for the remote model.
The run’s reports are committed beside the site. This page is generated from them. Release promotion regenerates it from the release commit’s run. No figures are entered manually. Unmeasured values appear as absent rather than zero.
The run
Section titled “The run”| Fact | Value |
|---|---|
| Revision | 0.1.0-rc.34c2f76d9226 |
| Machine | c7i.2xlarge in us-east-1 |
| SDK | Python 3.14.7, installed from the candidate packages |
| Build variant | bundled |
| Profile and seed | full, seed 20260824 |
The full profile performs these operations:
- Ingests 20,000 rows with 256-byte payloads in batches of 1,000.
- Samples 400 single-statement writes and point reads.
- Runs one full aggregate on each engine.
- Pushes the dataset.
- Pushes 100 more rows in one steady-state synchronization.
- Reopens the device’s database cold.
- Bootstraps a second device from the remote.
- Transfers 1,000 rows as one delta in each direction.
Operation counts and amplification are deterministic for the profile and seed. Changes to them represent product changes rather than noise.
Figures
Section titled “Figures”Local operations
Section titled “Local operations”| Measure | Directory (no network) | Amazon S3 | Amazon S3 Express One Zone | Cloudflare R2 | Google Cloud Storage | Azure Blob Storage |
|---|---|---|---|---|---|---|
| Bulk insert, rows per second | 2,830 | 3,340 | 2,902 | 3,529 | 3,859 | 2,640 |
| Single-statement write, p50, ms | 0.607 | 1.003 | 0.703 | 0.54 | 0.688 | 0.614 |
| Single-statement write, p99, ms | 1.025 | 2.403 | 4.148 | 2.945 | 3.962 | 1.367 |
| Point read by primary key, p50, ms | 0.102 | 0.103 | 0.1 | 0.1 | 0.97 | 0.101 |
| Point read by primary key, p99, ms | 0.122 | 0.622 | 0.121 | 0.13 | 1.508 | 0.139 |
| Cold open of an existing replica, ms | 213.5 | 293.6 | 234.5 | 555.5 | 1,728.2 | 238.1 |
Analytical scan
Section titled “Analytical scan”| Measure | Directory (no network) | Amazon S3 | Amazon S3 Express One Zone | Cloudflare R2 | Google Cloud Storage | Azure Blob Storage |
|---|---|---|---|---|---|---|
| Full aggregate over every row, SQLite, ms | 1.554 | 1.791 | 1.407 | 1.519 | 2.515 | 1.586 |
| Full aggregate over every row, DuckDB, first call, ms | 219.974 | 30.597 | 30.481 | 30.885 | 28.999 | 32.324 |
| Full aggregate over every row, DuckDB, warm, ms | 1.529 | 1.657 | 1.661 | 1.606 | 1.659 | 1.861 |
| Both engines return the same result | yes | yes | yes | yes | yes | yes |
Synchronization
Section titled “Synchronization”| Measure | Directory (no network) | Amazon S3 | Amazon S3 Express One Zone | Cloudflare R2 | Google Cloud Storage | Azure Blob Storage |
|---|---|---|---|---|---|---|
| First push of the dataset, seconds | 0.276 | 0.796 | 0.729 | 3.89 | 3.869 | 0.616 |
| Steady-state push of 100 rows, ms | 4.7 | 125.8 | 36.3 | 985.9 | 1,174.1 | 40.6 |
| Steady-state push, PUT requests | 5 | 5 | 5 | 5 | 5 | 5 |
| Steady-state push, GET requests | 0 | 0 | 0 | 0 | 0 | 0 |
| Steady-state push, LIST requests | 0 | 0 | 0 | 0 | 0 | 0 |
| Steady-state push, cell swaps | 1 | 1 | 1 | 1 | 1 | 1 |
| Steady-state push, bytes submitted | 90,943 | 91,131 | 91,131 | 91,131 | 91,131 | 91,131 |
| Steady-state push, bytes received | 0 | 188 | 188 | 188 | 188 | 188 |
| Bootstrap of a new device, seconds | 0.019 | 0.615 | 0.242 | 4.117 | 17.618 | 0.249 |
| Bootstrap, seconds per 100 MB | 0.385 | 12.284 | 4.826 | 82.265 | 352.019 | 4.97 |
| Delta push of 1000 rows, seconds | 0.021 | 0.154 | 0.073 | 1.047 | 1.127 | 0.079 |
| Delta pull of the same rows, seconds | 0.287 | 0.69 | 0.449 | 3.708 | 6.857 | 0.489 |
Footprint
Section titled “Footprint”| Measure | Directory (no network) | Amazon S3 | Amazon S3 Express One Zone | Cloudflare R2 | Google Cloud Storage | Azure Blob Storage |
|---|---|---|---|---|---|---|
| Logical data, MB | 5.2 | 5.2 | 5.2 | 5.2 | 5.2 | 5.2 |
| Local storage amplification | 22.4 | 22.4 | 22.4 | 22.4 | 22.4 | 22.4 |
| Remote amplification, bytes submitted over logical bytes | 3.53 | 3.53 | 3.53 | 3.53 | 3.53 | 3.53 |
| Bytes submitted to the remote | 19,431,506 | 19,432,070 | 19,432,070 | 19,432,070 | 19,432,070 | 19,432,070 |
| Bytes received from the remote | 21,560,985 | 22,462,018 | 20,663,386 | 20,727,601 | 21,241,602 | 20,663,694 |
| Byte counts are wire bytes | no | yes | yes | yes | yes | yes |
| Peak resident memory, MB | 334.3 | 393 | 391.5 | 394.3 | 381 | 356.6 |
| Whole suite, seconds | 11.3 | 13.5 | 12.5 | 25.6 | 48.6 | 13.3 |
Reading the figures
Section titled “Reading the figures”- The directory column has no network in its path. Its synchronization figures measure the runtime’s own cost. They are not cloud figures. The five provider columns measure each provider from the machine named above.
- Byte counts are wire bytes for Amazon S3, Amazon S3 Express One Zone, Cloudflare R2, Google Cloud Storage, Azure Blob Storage, counted at the storage interface. For Directory they are logical bytes, which is what the last row of the footprint table states per column.
- Cloudflare R2 and Amazon S3 Express One Zone run through the S3 adapter. Their reports record
s3as the mode. The column names come from the report file names. - The first DuckDB call includes loading the engine. The warm figure is the scan alone. The SQLite figure is the same aggregate on the engine every database already has.
- Bootstrap per 100 MB scales the measured bootstrap linearly from the logical size in the footprint table. It expresses a rate. The run did not measure a 100 MB database.
Measurement
Section titled “Measurement”The figures come from the internal performance suite of the release process. The suite is not public. It ran once for each column, with the settings in The run. The storage adapter read the bucket, endpoint and credentials from its environment.