# Throughput scoreboard

Generated by `python3 harness/scoreboard.py` on 2026-10-26.

- Machine: 12th Gen Intel(R) Core(TM) i5-12500H
- Revision: `26fb9c0`
- Worst round-to-round encode swing across all rows: native 14% (int32-low-card / dictionary), wasm-gc 23% (string-prefix / PLAIN).
- Toolchain: `moon 0.1.20261016 (1af328f 2026-10-16)`
- Method: `harness/bench` (release build) encodes and decodes fixed datasets, warming up once, sizing the repetition count for about 200 ms and then growing it until each timed round spans at least 20 ms, because the clock only resolves milliseconds; each figure is the median of 3 rounds. MB/s is computed against the PLAIN input size. Numbers are single-machine and not comparable across hosts, and a single round of the same binary still swings by 10-20% on the small cases, so compare toolchains or rewrites through medians, never through one run.
- Ratio is encoded bytes against PLAIN for the same column.
- Roaring decode times `from_bytes` plus `cardinality`; `to_array` is outside the timer. Its decode MB/s is normalized to the equivalent raw INT32 id size, so it measures bitmap reconstruction at that scale, not expansion to an id array or encoded-byte read bandwidth. Compare it with the ratio column and report id expansion separately.
- The `roaring-*` rows are a bitmap index, not a page encoding: `values` is the cardinality of the set, `plain` is the raw INT32 id stream it replaces (4 bytes per id, so MB/s is per input id byte), encode covers `from_ids` plus the serialization, and a `ROARING+run_optimize` row runs `run_optimize` before serializing.

## native

| case | encoding | encoded bytes | ratio | encode MB/s | decode MB/s |
|---|---|---|---|---|---|
| int64-monotonic | PLAIN | 8000000 | 100.0% | 2325.6 | 10810.8 |
| int64-monotonic | DELTA_BINARY_PACKED | 19542 | 0.2% | 2758.6 | 3703.7 |
| int32-low-card | PLAIN | 4000000 | 100.0% | 2325.6 | 12903.2 |
| int32-low-card | DELTA_BINARY_PACKED | 664072 | 16.6% | 1092.9 | 1290.3 |
| int32-low-card | dictionary | 502050 | 12.6% | 680.0 | 1221.1 |
| double | PLAIN | 8000000 | 100.0% | 2197.8 | 12121.2 |
| double | BYTE_STREAM_SPLIT | 8000000 | 100.0% | 1142.9 | 1650.8 |
| string-low-card | PLAIN | 2275000 | 100.0% | 1278.1 | 554.9 |
| string-low-card | dictionary | 100580 | 4.4% | 940.1 | 2187.5 |
| string-low-card | DELTA_LENGTH_BYTE_ARRAY | 1532822 | 67.4% | 881.8 | 539.1 |
| string-low-card | FSST | 1000653 | 44.0% | 496.1 | 213.9 |
| string-prefix | PLAIN | 4688890 | 100.0% | 1605.8 | 1456.2 |
| string-prefix | DELTA_BYTE_ARRAY | 358203 | 7.6% | 426.3 | 292.1 |
| string-prefix | FSST | 2719464 | 58.0% | 181.2 | 273.8 |
| bool | PLAIN | 125000 | 100.0% | 148.8 | 215.5 |
| bool | RLE | 126989 | 101.6% | 43.4 | 51.2 |
| roaring-sparse | ROARING | 2250008 | 56.3% | 869.6 | 2941.2 |
| roaring-dense | ROARING | 131208 | 3.3% | 1626.0 | 118518.5 |
| roaring-dense | ROARING+run_optimize | 230 | 0.0% | 1169.6 | 7314285.7 |
| roaring-mixed | ROARING | 16424 | 31.6% | 1416.6 | 13316.1 |
| roaring-mixed | ROARING+run_optimize | 8223 | 15.8% | 979.1 | 25607.9 |

## wasm-gc

| case | encoding | encoded bytes | ratio | encode MB/s | decode MB/s |
|---|---|---|---|---|---|
| int64-monotonic | PLAIN | 8000000 | 100.0% | 603.0 | 2105.3 |
| int64-monotonic | DELTA_BINARY_PACKED | 19542 | 0.2% | 1150.0 | 1383.5 |
| int32-low-card | PLAIN | 4000000 | 100.0% | 517.9 | 1526.3 |
| int32-low-card | DELTA_BINARY_PACKED | 664072 | 16.6% | 394.4 | 591.5 |
| int32-low-card | dictionary | 502050 | 12.6% | 300.0 | 384.6 |
| double | PLAIN | 8000000 | 100.0% | 550.5 | 1739.1 |
| double | BYTE_STREAM_SPLIT | 8000000 | 100.0% | 425.1 | 880.0 |
| string-low-card | PLAIN | 2275000 | 100.0% | 299.9 | 368.6 |
| string-low-card | dictionary | 100580 | 4.4% | 408.3 | 501.5 |
| string-low-card | DELTA_LENGTH_BYTE_ARRAY | 1532822 | 67.4% | 321.8 | 283.2 |
| string-low-card | FSST | 1000653 | 44.0% | 286.3 | 106.2 |
| string-prefix | PLAIN | 4688890 | 100.0% | 483.8 | 450.1 |
| string-prefix | DELTA_BYTE_ARRAY | 358203 | 7.6% | 214.2 | 108.5 |
| string-prefix | FSST | 2719464 | 58.0% | 138.6 | 128.5 |
| bool | PLAIN | 125000 | 100.0% | 113.6 | 50.0 |
| bool | RLE | 126989 | 101.6% | 20.7 | 13.7 |
| roaring-sparse | ROARING | 2250008 | 56.3% | 352.9 | 730.2 |
| roaring-dense | ROARING | 131208 | 3.3% | 762.8 | 46035.1 |
| roaring-dense | ROARING+run_optimize | 230 | 0.0% | 407.8 | 7168000.0 |
| roaring-mixed | ROARING | 16424 | 31.6% | 665.8 | 4931.9 |
| roaring-mixed | ROARING+run_optimize | 8223 | 15.8% | 369.9 | 9863.8 |
