Používáte na každou malou změnu/zápis Transakce?
- knyttl
- Člen | 196
Ahoj,
(Předem bych nerad, aby z tohohle vznikl nějaký flame/hate.)
používám v Javě Hibernate, který vynucuje vytvoření transakcí pro jakoukoliv změnu/zápis do databáze. Asi je to myšleno v dobrém duchu, nicméně člověk korektně dbát na správné uspořádání transakcí a spoustu dalších věcí, aby nedocházelo k deadlockům. Ke kterým pak ale při velkém trafficu může docházet (podle stackoverflow) a transakce je nutné manuálně restartovat. Atd atd.
Do teď jsem to nějak akceptoval, ale pomalu se s tím odmítám smířit. Skutečně je to správné mít na všechno transakce? Vynucuje toto i Doctrine? Vytváříte na _všechno_ transakce i v dibi či Nette\Database?
Díky.
- Jan Tvrdík
- Nette guru | 2595
Bavíme se o MySQL? Netuším, čemu říkáš všechno, ale rozhodně většina dotazů (selecty, jednoduché updaty a inserty) transakce na nic nepotřebuje.
- knyttl
- Člen | 196
Jan Tvrdík napsal(a):
Bavíme se o MySQL? Netuším, čemu říkáš všechno, ale rozhodně většina dotazů (selecty, jednoduché updaty a inserty) transakce na nic nepotřebuje.
Mno, myslel jsem to spíš obecně, máš na mysli něco konkrétního s MySQL?
Vo vseobecnosti by sme mohli povedat, ze transakciu pouzi vtedy ak potrebujes ovplyvnit data v viacerych tabulkach tak aby ti niekto (napr. iny proces) medzi nerozbil konzistenciu dat.
A pokial sa bavime o mySQL tak tam je to v advanced pouziti dost divocina :)
Proč je to v MySQL divočina? V jiných DB to není divočina?
Jak to řeší ta Doctrine, také transakce vynucuje?
- Filip Procházka
- Moderator | 4668
Doctrine si otevírá (bezpodmínečně) transakce na flushování – tedy když ukládá do databáze.
Btw, víš že když uděláš 5 insertů v transakci, je to stejně rychlé, jako jeden multiinsert s pěti setama hodnot? Každý insert se totiž sám interně obaluje transakcí a tedy otevírat na updaty a inserty transakci znamená ukládat rychleji :)
- Jan Tvrdík
- Nette guru | 2595
víš že když uděláš 5 insertů v transakci, je to stejně rychlé, jako jeden multiinsert s pěti setama hodnot?
To není úplně pravda, protože samotná komunikace s databází má dost značný overhead. Zkus si vložit 1000 řádků do databáze a přeměřit si to.
- Filip Procházka
- Moderator | 4668
@JanTvrdík máš pravdu že to není úplně 100% přesné, ale to že udělat tisíc insertů v transakci je rychlejší než bez transakce je fakt :)