Autor Zpráva
andorxor
Profil *
Ahoj. V aplikaci provádím čtení několikatisíc řádků dat a zápis do jiné databáze s commitováním po nějakém počtu řádků. Vlastně dělám to, že vezmu řádek z mysql, přechroustám to a vložím třeba do postgresu. Celé to má relativně malé paměťové nároky a přitom je to hodně rychlé vzhledem k tomu, že se jedná o stovky MB dat. Na různých místech narážím, jak se všude používá ORM a jak je to či ono dobré (hlavně tedy Doctrine). Docela mi to vrtá hlavou. Máte někdo osobní zkušenosti s takovými systémy (třeba zrovna s doctrine) a jejich rychlostí oproti přímému přístupu k databázi přes třena PDO?
Ugo
Profil
tohle všechno jsou jen obálky obálek nad obálkami obalující další obálky :-) takže nejde ani tak o počet řádků, ale spíš o to kolikrát generuješ ten dotaz, už při takových 5 dotazech si myslím stojí za to vyměnit za čistý driver a nebo PDO (to je podle mých testů nejrychlejší), při 10 už bych to jinak ani vidět nechtěl. Nevím jak je na tom konkrétně Doctrine, ale moje db vrstva je dost pomalá a to je to blesk ve srovnání třeba s dibi, které pracuje vlastně jako sprintf. Nejlepší je si to nějak změřit.
Nox
Profil
andorxor:
Zkušenost s Doctrine2 mám.

Musíš si přečíst, co to Doctrine je a co dotyční mysleli tím "dobré". ORM je předevím Object-Relational Mapper, tzn. že vytváří korelaci mezi objekty v aplikaci a daty v databázi, jenže ty se ptáš na rychlost přístupu.

Mám pocit, že Doctrine používá PDO, takže tím jsou asi následující odstavce zbytečné.

Zrovna operace nad velkýma objemama je to, co jde ORM dost špatně. Přístup k databázi přes ORM nijak nezrychlíš, to se děje na úrovni driveru a vůbec mnohem níž. Co se týče dotazů - už imho není pravda, že ORM generují tragické dotazy, moje zkušenost je, že dokáží generovat defakto to, co bys napsal sám. Takže ale ani tady si moc nepomůžeš.

Další věc je IdentityMap (u větších objemů ale tuším asi nemalé paměťové nároky) a trackování změn, tj. nenačítají se už načtené objekty a updatují se jen skutečně změněné objekty. Ale jestli měníš skoro vždy skoro všechny, pak to taky výhoda není, naopak.

Atd.

IMHO ORM je nejvýhodnější ve chvíli, kdy pracuješ s různými objekty v malých objemech, spíše pár objektů, které mezi sebou různě interagují. Na nějaké operace s masivními objemy fakt nejsou, resp. nepřinesou tam asi téměř nikdy výkonostní výhodu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: