phplyr
Benchmarks
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.