- linux or bsd system
- PHP 5.3 or greater
- pdo_sqlite
> cd /path/to/php-orm-benchmark
> php TestRunner.php
> cd /path/to/php-orm-benchmark
> cd propel_20
> php TestRunner.php
-
Mass insertion: Tests model objects and save() operations.
-
Retrieve By Pk: Tests basic hydration
-
Complex Query an OR but no hydration: Tests Query parsing
-
Basic Query with 5 results: Tests hydration and collections
-
Query with join: Tests join hydration
The reference is the PDOTestSuite (the number of tests is adjusted to make raw PDO score about 100 to each test). For the ORMs, the smaller score is the better (i. e. the faster).
(updated 2018-Feb-01)
Library | Insert | findPk | complex | hydrate | with | memory usage | time |
---|---|---|---|---|---|---|---|
PDO | 58 | 7 | 19 | 56 | 129 | 1,701,016 | 0.27 |
Maghead | 399 | 4 | 299 | 189 | 273 | 10,485,760 | 1.18 |
LessQL | 329 | 59 | 244 | 305 | 336 | 7,993,624 | 1.28 |
AtlasOrm | 254 | 183 | 253 | 425 | 390 | 5,896,024 | 1.52 |
YiiM | 696 | 79 | 294 | 290 | 523 | 6,291,456 | 1.90 |
YiiMWithCache | 690 | 83 | 295 | 289 | 518 | 6,291,456 | 1.89 |
Yii2M | 1389 | 170 | 426 | 606 | 983 | 8,388,608 | 3.59 |
Yii2MArrayHydrate | 1397 | 176 | 422 | 276 | 863 | 8,388,608 | 3.16 |
Yii2MScalarHydrate | 1377 | 171 | 416 | 253 | 488 | 8,388,608 | 2.73 |
PHPActiveRecord | 2016 | 175 | 384 | 1025 | 447 | 4,194,304 | 5.20 |
Fuel | 2578 | 146 | 624 | 1173 | 293 | 12,582,912 | 4.86 |
FuelWithCache | 1742 | 24 | 466 | 934 | 43 | 8,388,608 | 3.25 |
Propel20 | 578 | 50 | 1367 | 1231 | 1596 | 8,388,608 | 4.83 |
Propel20WithCache | 485 | 39 | 857 | 1068 | 1529 | 8,388,608 | 3.99 |
Propel20FormatOnDemand | 483 | 40 | 856 | 941 | 1526 | 8,388,608 | 3.86 |
DoctrineM | 979 | 141 | 411 | 801 | 602 | 18,874,368 | 3.01 |
DoctrineMWithCache | 979 | 143 | 407 | 800 | 598 | 18,874,368 | 3.00 |
DoctrineMArrayHydrate | 968 | 139 | 412 | 416 | 342 | 18,874,368 | 2.35 |
DoctrineMScalarHydrate | 967 | 142 | 408 | 369 | 329 | 18,874,368 | 2.29 |
DoctrineMWithoutProxies | 975 | 143 | 417 | 599 | 662 | 18,874,368 | 2.87 |
Eloquent | 1638 | 175 | 523 | 447 | 823 | 14,680,064 | 3.63 |
EloquentWithoutEvent | 1459 | 176 | 546 | 440 | 809 | 14,680,064 | 3.45 |
(updated 2017-Feb-01)
Library | Insert | findPk | complex | hydrate | with | memory usage | time |
---|---|---|---|---|---|---|---|
PDO | 24 | 5 | 10 | 56 | 184 | 1,699,136 | 0.28 |
Maghead | 91 | 1 | 56 | 95 | 228 | 8,388,608 | 0.48 |
LessQL | 102 | 26 | 330 | 142 | 175 | 7,990,728 | 0.78 |
YiiM | 172 | 20 | 309 | 95 | 306 | 6,291,456 | 0.92 |
YiiMWithCache | 160 | 21 | 308 | 100 | 304 | 6,291,456 | 0.91 |
Yii2M | 316 | 40 | 293 | 160 | 340 | 6,291,456 | 1.17 |
Yii2MArrayHydrate | 305 | 42 | 315 | 100 | 291 | 6,291,456 | 1.07 |
Yii2MScalarHydrate | 304 | 43 | 296 | 107 | 177 | 6,291,456 | 0.94 |
Propel20 | 140 | 16 | 410 | 287 | 413 | 8,388,608 | 1.27 |
Propel20WithCache | 111 | 10 | 363 | 247 | 336 | 8,388,608 | 1.08 |
Propel20FormatOnDemand | 96 | 11 | 366 | 223 | 334 | 8,388,608 | 1.04 |
DoctrineM | 183 | 38 | 311 | 227 | 220 | 18,874,368 | 1.02 |
DoctrineMWithCache | 192 | 45 | 310 | 237 | 233 | 18,874,368 | 1.05 |
DoctrineMArrayHydrate | 178 | 45 | 292 | 136 | 162 | 16,777,216 | 0.86 |
DoctrineMScalarHydrate | 178 | 40 | 296 | 119 | 136 | 16,777,216 | 0.81 |
DoctrineMWithoutProxies | 168 | 40 | 320 | 172 | 352 | 16,777,216 | 1.09 |
Eloquent | 367 | 54 | 373 | 157 | 311 | 8,388,608 | 1.28 |
EloquentWithoutEvent | 313 | 42 | 377 | 157 | 282 | 8,388,608 | 1.18 |
(updated 2015-Dec-07)
Library | Insert | findPk | complex | hydrate | with | memory usage | time |
---|---|---|---|---|---|---|---|
PDO | 49 | 45 | 0 | 33 | 92 | 775,264 | 0.22 |
LessQL | 153 | 154 | 0 | 114 | 135 | 5,232,880 | 0.57 |
YiiM | 211 | 138 | 0 | 79 | 201 | 9,961,472 | 0.67 |
YiiMWithCache | 217 | 148 | 0 | 88 | 222 | 9,961,472 | 0.71 |
Yii2M | 603 | 338 | 0 | 187 | 252 | 14,155,776 | 1.46 |
Yii2MArrayHydrate | 585 | 327 | 0 | 120 | 220 | 14,155,776 | 1.31 |
Yii2MScalarHydrate | 571 | 321 | 0 | 105 | 102 | 14,155,776 | 1.17 |
Propel20 | 218 | 105 | 0 | 263 | 323 | 10,747,904 | 0.98 |
Propel20WithCache | 156 | 68 | 0 | 228 | 261 | 10,747,904 | 0.77 |
Propel20FormatOnDemand | 151 | 67 | 0 | 221 | 264 | 11,010,048 | 0.76 |
DoctrineM | 252 | 280 | 0 | 342 | 193 | 17,301,504 | 1.55 |
DoctrineMWithCache | 266 | 272 | 0 | 332 | 189 | 17,039,360 | 1.54 |
DoctrineMArrayHydrate | 263 | 282 | 0 | 226 | 141 | 17,825,792 | 1.35 |
DoctrineMScalarHydrate | 242 | 292 | 0 | 192 | 123 | 17,825,792 | 1.25 |
DoctrineMWithoutProxies | 243 | 266 | 0 | 253 | 251 | 16,777,216 | 1.43 |
Eloquent | 419 | 254 | 0 | 126 | 218 | 11,534,336 | 1.09 |
EloquentWithoutEvent | 380 | 260 | 0 | 124 | 232 | 11,534,336 | 1.06 |
(updated 2015-Dec-07)
Library | Insert | findPk | complex | hydrate | with | memory usage | time |
---|---|---|---|---|---|---|---|
PDO | 54 | 30 | 0 | 37 | 92 | 783,680 | 0.23 |
LessQL | 165 | 194 | 0 | 78 | 135 | 10,316,584 | 0.66 |
YiiM | 333 | 194 | 0 | 81 | 494 | 7,267,424 | 1.33 |
YiiMWithCache | 337 | 191 | 0 | 81 | 465 | 7,286,040 | 1.30 |
Yii2M | 722 | 272 | 0 | 103 | 175 | 9,025,400 | 1.90 |
Yii2MArrayHydrate | 702 | 273 | 0 | 100 | 165 | 9,033,272 | 1.83 |
Yii2MScalarHydrate | 700 | 291 | 0 | 90 | 70 | 8,997,160 | 1.74 |
Propel20 | 545 | 169 | 0 | 771 | 512 | 9,740,696 | 2.30 |
Propel20WithCache | 481 | 135 | 0 | 736 | 485 | 9,807,688 | 2.14 |
Propel20FormatOnDemand | 479 | 128 | 0 | 675 | 463 | 9,822,696 | 2.05 |
DoctrineM | 634 | 647 | 0 | 1009 | 342 | 19,639,560 | 5.11 |
DoctrineMWithCache | 624 | 674 | 0 | 1047 | 339 | 19,635,128 | 5.07 |
DoctrineMArrayHydrate | 629 | 642 | 0 | 804 | 249 | 18,447,232 | 4.73 |
DoctrineMScalarHydrate | 618 | 634 | 0 | 747 | 203 | 17,366,336 | 4.55 |
DoctrineMWithoutProxies | 620 | 629 | 0 | 849 | 357 | 19,402,032 | 4.85 |
Eloquent | 589 | 273 | 0 | 98 | 203 | 14,652,488 | 1.53 |
EloquentWithoutEvent | 547 | 264 | 0 | 99 | 206 | 14,572,112 | 1.45 |
TODO