ORM & Nette Framework v číslech

Patrik Votoček

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

alt text

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

alt text

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

« »