ORM & Nette Framework v číslech
Zdálo se mi, že je Doctrine 2 je extrémně pomalá a proto jsem zvažoval, že ji opustím. Ale abych to měl podloženo, pustil jsem se do testování. Udělal jsem si jednoduchou aplikaci v Nette, která dané ORM((Object-relational mapping)) pořádně otestuje.
Postup
Vytvořil jsem si testovací databázi (s 50000 záznamy) pomocí http://php7.org/tools/adresy/. Databáze obsahovala dvě tabulky Peoples a Cities, kde Peoples je k Citites svázáno 1:N. Testy jsem rozdělil do 4 částí: - SELECT 1000 řádků + asociace - INSERT 50 řádků - SELECT -> UPDATE 50 řádků - SELECT -> DELETE 50 řádků Každou část jsem opakoval 10x a před změnou ORM((Object-relational mapping)) jsem uvedl databázi do “původního” stavu. Vytvořil jsem pevně dané rozhraní a prototypy modelových objektů, aby si byly jednotlivé implementace co nejblíže.
Srovnání
Čas (ms)
ORM | Select | Insert | Update | Delete |
---|---|---|---|---|
dibi | 2627.6 | 1872.98 | 2139.15 | 1828.69 |
Ormion | 4259.76 | 2329.13 | 2362.64 | 1900.73 |
ActiveMapper | 2984.82 | 2424.43 | 2686.64 | 2169.64 |
Doctrine 2 | 1141.73 | 2662.93 | 2759.14 | 2071.21 |
Doctrine 2 Cache | 1184.45 | 2453.44 | 2377.53 | 1834.51 |
Doctrine 2 Query Bulder | 2059.5 | 2509.4 | 2895.39 | 2124.33 |
Paměť (kB)
ORM | Select | Insert | Update | Delete |
---|---|---|---|---|
dibi | 7927.17 | 6246.37 | 6252.02 | 6192.02 |
Ormion | 11825.67 | 6886.85 | 6889.32 | 6704.57 |
ActiveMapper | 10089.7 | 7350.68 | 7547.15 | 2169.64 |
Doctrine 2 | 11106.07 | 8755.15 | 8796.66 | 8704.21 |
Doctrine 2 Cache | 11116.33 | 8760.32 | 8803.21 | 8709.92 |
Doctrine 2 Query Bulder | 11803.94 | 9425.11 | 9312.05 | 9215.72 |
Závěrem
Takový výsledek jsem doopravdy nečekal. A jistě ani spousta z vás. Kódy benchmarku jsou na GitHubu . Pár informací o testovacím prostředí: - PHP 5.3.3 NTS VC9 - IIS 7.5 - Windows 7 x64 - MySQL 5.5.3-m3-community - Nette Framework 1.0-dev (revision a8c51dd released on 2010-07-23) - 3GB DDR2 RAM - Core 2 Duo T5550