Skip to content

feat: benchmark suite + unified test/bench env#2538

Merged
norberttech merged 2 commits into
1.xfrom
benchmarks
Jul 19, 2026
Merged

feat: benchmark suite + unified test/bench env#2538
norberttech merged 2 commits into
1.xfrom
benchmarks

Conversation

@norberttech

@norberttech norberttech commented Jul 19, 2026

Copy link
Copy Markdown
Member

Change Log


Added

  • phpbench based benchmarks
  • flow-php/etl - selectable Floe engine (native/pure-PHP) on from_floe()/to_floe()
  • flow-php/etl-adapter-parquet - selectable engine (arrow/pure-PHP) on from_parquet()/to_parquet()

Fixed

Changed

Removed

Deprecated

Security


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.

Output:

Subjects: 31, Assertions: 0, Failures: 0, Errors: 0
+----------------------+--------------------------+----------------+-----------+---------+------------+--------+
| benchmark            | subject                  | set            | mem_peak  | mode    | total_time | rstdev |
+----------------------+--------------------------+----------------+-----------+---------+------------+--------+
| GroupBench           | bench_group_by           | 100,000        | 28.328mb  | 3.428s  | 10.30s     | ±0.32% |
| GroupBench           | bench_group_by_aggregate | 100,000        | 28.464mb  | 3.880s  | 11.73s     | ±1.28% |
| ExcelReadBench       | bench_excel_read         | 100,000        | 9.386mb   | 12.310s | 36.90s     | ±0.18% |
| ExcelWriteBench      | bench_excel_write        | 100,000        | 22.446mb  | 7.306s  | 21.88s     | ±0.60% |
| XmlWriteBench        | bench_xml_write          | 100,000        | 23.353mb  | 5.939s  | 17.86s     | ±0.41% |
| XmlReadBench         | bench_xml_read           | 100,000        | 105.329mb | 4.468s  | 13.42s     | ±0.28% |
| JsonWriteBench       | bench_json_write         | 100,000        | 23.896mb  | 1.495s  | 4.54s      | ±2.18% |
| JsonReadBench        | bench_json_read          | 100,000        | 9.728mb   | 3.701s  | 11.08s     | ±0.33% |
| FloeReadBench        | bench_floe_read          | 100,000,php    | 20.301mb  | 1.464s  | 4.40s      | ±0.35% |
| FloeReadBench        | bench_floe_read          | 100,000,native | 21.892mb  | 0.485s  | 1.45s      | ±0.68% |
| FloeWriteBench       | bench_floe_write         | 100,000,php    | 21.710mb  | 4.058s  | 12.19s     | ±0.27% |
| FloeWriteBench       | bench_floe_write         | 100,000,native | 22.912mb  | 2.392s  | 7.19s      | ±0.36% |
| ParquetWriteBench    | bench_parquet_write      | 100,000,php    | 45.465mb  | 3.865s  | 11.59s     | ±0.09% |
| ParquetWriteBench    | bench_parquet_write      | 100,000,arrow  | 23.288mb  | 1.634s  | 4.91s      | ±0.32% |
| ParquetReadBench     | bench_parquet_read       | 100,000,php    | 216.041mb | 3.671s  | 10.98s     | ±0.90% |
| ParquetReadBench     | bench_parquet_read       | 100,000,arrow  | 22.729mb  | 1.304s  | 3.87s      | ±1.70% |
| CsvWriteBench        | bench_csv_write          | 100,000        | 22.995mb  | 1.262s  | 3.78s      | ±0.21% |
| CsvReadBench         | bench_csv_read           | 100,000        | 9.213mb   | 2.417s  | 7.20s      | ±1.54% |
| TextReadBench        | bench_text_read          | 100,000        | 8.537mb   | 0.195s  | 0.59s      | ±1.73% |
| TextWriteBench       | bench_text_write         | 100,000        | 17.146mb  | 0.733s  | 2.16s      | ±3.39% |
| SchemaBench          | bench_schema_inference   | 100,000        | 28.678mb  | 1.973s  | 5.95s      | ±1.02% |
| JoinBench            | bench_join_inner         | 100,000        | 30.391mb  | 4.191s  | 12.51s     | ±1.19% |
| JoinBench            | bench_join_left          | 100,000        | 30.395mb  | 4.164s  | 12.52s     | ±0.56% |
| JoinBench            | bench_join_left_anti     | 100,000        | 28.956mb  | 3.732s  | 11.19s     | ±0.27% |
| JoinBench            | bench_join_right         | 100,000        | 30.402mb  | 4.246s  | 12.75s     | ±0.73% |
| JoinBench            | bench_cross_join         | 100,000        | 30.737mb  | 1.150s  | 3.43s      | ±1.27% |
| JoinBench            | bench_join_each          | 100,000        | 29.539mb  | 1.576s  | 4.71s      | ±0.49% |
| SortOrdersBench      | bench_sort_orders        | 100,000        | 98.337mb  | 3.889s  | 11.60s     | ±0.94% |
| FilterOrdersBench    | bench_filter_orders      | 100,000        | 23.349mb  | 0.848s  | 2.55s      | ±0.21% |
| CacheBench           | bench_cache_write        | 100,000        | 34.504mb  | 2.532s  | 7.68s      | ±2.11% |
| CacheBench           | bench_cache_read         | 100,000        | 34.504mb  | 0.533s  | 1.61s      | ±3.30% |
| PostgresqlWriteBench | bench_postgresql_write   | 100,000        | 32.904mb  | 5.699s  | 17.04s     | ±0.80% |
| PostgresqlReadBench  | bench_postgresql_read    | 100,000        | 10.543mb  | 6.934s  | 20.85s     | ±1.31% |
| DoctrineWriteBench   | bench_doctrine_write     | 100,000        | 32.981mb  | 6.750s  | 20.21s     | ±0.43% |
| DoctrineReadBench    | bench_doctrine_read      | 100,000        | 9.925mb   | 6.324s  | 19.16s     | ±1.89% |
+----------------------+--------------------------+----------------+-----------+---------+------------+--------+

- phpbench suite (formats, joins, grouping, sort, cache, services)
- shared root bootstrap.php + .env.dist loaded by phpunit & phpbench
- FLOW_MONOREPO_PROJECT_ROOT anchors test/bench paths
@norberttech norberttech added this to the 0.42.0 milestone Jul 19, 2026
@codecov

codecov Bot commented Jul 19, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.29730% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 86.31%. Comparing base (92c714e) to head (9b7c0c6).
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@             Coverage Diff              @@
##                1.x    #2538      +/-   ##
============================================
  Coverage     86.31%   86.31%              
- Complexity        0    23220   +23220     
============================================
  Files          1759     1760       +1     
  Lines         70733    70762      +29     
============================================
+ Hits          61052    61080      +28     
- Misses         9681     9682       +1     
Components Coverage Δ
etl 89.67% <100.00%> (+0.01%) ⬆️
cli 89.40% <ø> (ø)
lib-array-dot 81.44% <ø> (ø)
lib-azure-sdk 64.44% <ø> (ø)
lib-doctrine-dbal-bulk 93.61% <ø> (ø)
lib-filesystem 86.64% <ø> (ø)
lib-types 91.15% <ø> (ø)
lib-parquet 70.23% <ø> (ø)
lib-parquet-viewer 82.26% <ø> (ø)
lib-snappy 89.38% <ø> (ø)
lib-dremel 0.00% <ø> (ø)
lib-postgresql 88.62% <ø> (ø)
lib-telemetry 86.58% <ø> (ø)
bridge-filesystem-async-aws 92.74% <ø> (ø)
bridge-filesystem-azure 90.45% <ø> (ø)
bridge-monolog-http 96.82% <ø> (ø)
bridge-monolog-telemetry 94.79% <ø> (ø)
bridge-openapi-specification 92.07% <ø> (ø)
symfony-http-foundation 78.57% <ø> (ø)
bridge-psr18-telemetry 100.00% <ø> (ø)
bridge-psr3-telemetry 98.95% <ø> (ø)
bridge-psr7-telemetry 100.00% <ø> (ø)
bridge-telemetry-otlp 90.41% <ø> (ø)
bridge-symfony-http-foundation-telemetry 92.85% <ø> (ø)
bridge-symfony-filesystem-bundle 91.85% <ø> (ø)
bridge-symfony-filesystem-cache 98.18% <ø> (ø)
bridge-symfony-postgresql-bundle 93.70% <ø> (ø)
bridge-symfony-postgresql-cache 94.41% <ø> (ø)
bridge-symfony-postgresql-messenger 98.80% <ø> (ø)
bridge-symfony-postgresql-session 93.65% <ø> (ø)
bridge-symfony-telemetry-bundle 90.10% <ø> (ø)
adapter-chartjs 84.05% <ø> (ø)
adapter-csv 89.46% <ø> (ø)
adapter-doctrine 90.75% <ø> (ø)
adapter-google-sheet 91.56% <ø> (ø)
adapter-http 73.23% <ø> (ø)
adapter-json 87.30% <ø> (ø)
adapter-logger 50.00% <ø> (ø)
adapter-parquet 88.69% <92.30%> (+0.11%) ⬆️
adapter-text 92.59% <ø> (ø)
adapter-xml 83.56% <ø> (ø)
adapter-avro 0.00% <ø> (ø)
adapter-excel 86.72% <ø> (ø)
adapter-postgresql 90.84% <ø> (ø)
adapter-seal 83.26% <ø> (ø)
bridge-phpunit-postgresql 75.30% <ø> (ø)
bridge-phpunit-telemetry 87.32% <ø> (ø)
bridge-phpstan-types 0.00% <ø> (ø)
bridge-postgresql-valinor 100.00% <ø> (ø)
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@norberttech
norberttech merged commit 1b82643 into 1.x Jul 19, 2026
50 checks passed
@norberttech
norberttech deleted the benchmarks branch July 19, 2026 11:53
@github-project-automation github-project-automation Bot moved this from Todo to Done in Roadmap Jul 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant