# operators — benchmark summary

Per-operator comparison rolled up across every peer measured in
`bench:ops`. **Peer range** is the fastest-peer through slowest-peer
time. **Multiplier** is `peer_time / data_time` — values > 1× mean
the peer takes more time than `data`; values < 1× mean the peer is
faster. Each operator's detailed table lives in
`operators/<op>/BENCHMARK.md`.

Generated by `node comparisons/bench/operators/_gen-bench-md.mjs` from a
`bench:ops` markdown dump. Re-run after any operator-level perf change.

## Single-tick (one row mutation + read)

| Operator | data (ms) | Peer range (ms) | Multiplier range |
|---|---:|---|---|
| [aggregate](aggregate/BENCHMARK.md) | 0.059 | 0.260 – 23.87 | 4.4× – 405× |
| [between](between/BENCHMARK.md) | 0.037 | 0.400 – 7.61 | 10.8× – 206× |
| [compare](compare/BENCHMARK.md) | 0.020 | 0.278 – 6.86 | 13.9× – 343× |
| [distinct](distinct/BENCHMARK.md) | 0.014 | 0.387 – 17.37 | 27.6× – 1241× |
| [except](except/BENCHMARK.md) | 0.118 | 0.405 – 19.56 | 3.4× – 166× |
| [filter](filter/BENCHMARK.md) | 0.008 | 0.290 – 13.37 | 36.3× – 1671× |
| [group](group/BENCHMARK.md) | 0.005 | 0.565 – 11.55 | 113× – 2310× |
| [intersect](intersect/BENCHMARK.md) | 0.126 | 0.434 – 17.08 | 3.4× – 136× |
| [keys](keys/BENCHMARK.md) | 0.020 | 0.163 – 7.07 | 8.2× – 354× |
| [length](length/BENCHMARK.md) | 0.103 | 0.004 – 3.20 | 0.04× – 31.1× |
| [map](map/BENCHMARK.md) | 0.012 | 0.589 – 22.82 | 49.1× – 1902× |
| [reduce](reduce/BENCHMARK.md) | 0.005 | 0.015 – 21.39 | 3.0× – 4278× |
| [reverse](reverse/BENCHMARK.md) | 0.010 | 0.042 – 10.42 | 4.2× – 1042× |
| [sort](sort/BENCHMARK.md) | 0.274 | 4.46 – 115.03 | 16.3× – 420× |
| [tap](tap/BENCHMARK.md) | 0.006 | 0.008 – 11.25 | 1.3× – 1875× |
| [to](to/BENCHMARK.md) | 0.012 | 0.004 – 1.72 | 0.33× – 143× |
| [union](union/BENCHMARK.md) | 0.084 | 0.407 – 15.41 | 4.8× – 183× |

## Batch (1000 ticks streamed back-to-back)

| Operator | data (ms) | Peer range (ms) | Multiplier range |
|---|---:|---|---|
| [aggregate](aggregate/BENCHMARK.md) | 2.66 | 31.48 – 1924.02 | 11.8× – 723× |
| [between](between/BENCHMARK.md) | 1.88 | 42.78 – 1027.83 | 22.8× – 547× |
| [compare](compare/BENCHMARK.md) | 1.80 | 49.21 – 631.37 | 27.3× – 351× |
| [distinct](distinct/BENCHMARK.md) | 1.59 | 51.47 – 1544.65 | 32.4× – 971× |
| [except](except/BENCHMARK.md) | 3.17 | 22.38 – 597.91 | 7.1× – 189× |
| [filter](filter/BENCHMARK.md) | 2.52 | 63.95 – 882.92 | 25.4× – 350× |
| [group](group/BENCHMARK.md) | 1.04 | 51.24 – 1716.77 | 49.3× – 1651× |
| [intersect](intersect/BENCHMARK.md) | 2.35 | 16.53 – 1036.09 | 7.0× – 441× |
| [keys](keys/BENCHMARK.md) | 2.15 | 208.33 – 16385.94 | 96.9× – 7621× |
| [length](length/BENCHMARK.md) | 4.81 | 19.77 – 2150.13 | 4.1× – 447× |
| [map](map/BENCHMARK.md) | 3.37 | 126.69 – 1994.22 | 37.6× – 592× |
| [reduce](reduce/BENCHMARK.md) | 1.44 | 27.06 – 42561.31 | 18.8× – 29556× |
| [reverse](reverse/BENCHMARK.md) | 5.57 | 72.01 – 18155.75 | 12.9× – 3260× |
| [sort](sort/BENCHMARK.md) | 166.55 | 507.64 – 8036.67 | 3.0× – 48.3× |
| [tap](tap/BENCHMARK.md) | 1.08 | 10.11 – 1872.97 | 9.4× – 1734× |
| [to](to/BENCHMARK.md) | 1.39 | 1.50 – 151.56 | 1.1× – 109× |
| [union](union/BENCHMARK.md) | 2.98 | 23.79 – 744.26 | 8.0× – 250× |

## Reading the multiplier

- **> 1×** — peer is slower than `data` by that factor. Most rows.
- **< 1×** — peer is faster than `data` (rare; flagged in the operator's
  own BENCHMARK.md). At time of writing this applies to `length` single
  and `to` single — both at the sub-µs scale where measurement noise
  and signal-equality short-circuits in peer libs dominate. Both win on
  the batch metric.

## Refresh

```sh
npm run bench:ops > /tmp/bench.md
node comparisons/bench/operators/_gen-bench-md.mjs /tmp/bench.md
```

Patches every `operators/<op>/BENCHMARK.md` table in place and
regenerates this file.
