phplyr

phplyr

Benchmarks

Timings from the benchmark files in the phplyr repository. Each report gives the machine and date it was recorded, so an older report may not reflect the current code.

phplyr backends and dplyr

Three pipelines on a generated sales table of 100,000 and 1,000,000 rows, joined to a 100-row store table. phplyr runs each on phibble's in-memory DataFrame, on PolarsTable (Polars at 2 threads), and on SQLite through SqlTable. dplyr runs the first two pipelines on the same data. The pipeline with a PHP closure has no dplyr version. Every backend returned the same rows as DataFrame, and dplyr's row counts and column sums matched.

Apple M5 Ultra · PHP 8.5.10 · recorded 2026-10-18 · commit ed999d8

Case phplyr on DataFrame phplyr on PolarsTable phplyr on SQLite dplyr 1.2.1
Filter, join, summarise, and rank (100,000 rows) 0.089 0.006 0.043 0.033
Filter, join, summarise, and rank (1,000,000 rows) 0.751 0.051 0.434 0.065
Grouped windows over every row (100,000 rows) 0.095 0.043 0.311 0.004
Grouped windows over every row (1,000,000 rows) 1.25 0.415 3.33 0.020
Filter with a PHP closure, join, summarise, and rank (100,000 rows) 0.116 0.078 0.197
Filter with a PHP closure, join, summarise, and rank (1,000,000 rows) 1.13 0.874 2.01

Best of 3 runs; pipeline through collect(); data preloaded and not timed, in s. Values without a measurement are left out of the chart.