12. januar 2009 - 17:25Der er
8 kommentarer og 1 løsning
Transaktioner til oprettelse af data
Et generelt spørgsmål omkring "transactions". Når man læse diverse litteratur, så beskrives transaktion næsten altid iht. opdatering af data og holde disse "atomic" mht. til flere samtidige forbindelser.
Er der umiddelbart hastigheds problemer eller lign. ved brug af transaktioner ved oprettelse af nyt data i tabeller? Normaliserede tabeller får f.eks. nemt ret mange tabeller og indsættelse kan nemt blive uoverskueligt når der skal fejlcheckes ved hvert enkelt INSERT. Dette kan gøres noget nemmere (og det er muligt alle andre end mig gør dette... ;) ) ved en samlet kontrol til sidst og en evt. rollback.
De to primaere grunde til at bruge transactions er:
* flere updates via en enkelt connection bundtes saa enten udfoers de alle eller saa udfoeres ingen, det er godt for konsistens
* man kan styre hvordan flere SQL saetninger via flere connections kan spille sammen via transaction isolation level
I langt de fleste databaser bruger man altid transaktioner. Man kan kun vaelge om man vil lave dem eksplicit eller om softwaren skal lave en per SQL saetning. Undtagelsen er MySQL med MyISAM tabeller.
Normalt vil performance blive forbedret naar man gaar fra N SQL saetninger i N transaktioner til N SQL saetninger i 1 transaktion.
Fejl haandtering er ofte nemmere med brug af exceptions fremfor retur koder.
Jeg har forstået hvad transaktioner løser af problemer, men jeg har lidt svært ved at se hvordan det påvirker ydelses på databasen.
F.eks. har jeg gerne: (koder jævnligt op mod MySQL og MSSQL databaser i ASP, .Net, PHP og Java i forskellige sammenhænge) - INSERT INTO tabel1... - Check success - INSERT INTO tabel2... - Check success - INSERT INTO tabel3... - Check success - if (all succeeded) done
Men det kan gøre koden noget nemmere med transaktioner. Men det du siger er faktisk, at der er gode chancer for ydelses forbedringer ved at have det hele i en transaction? (Giver god mening ved eftertanke...)
String no reuse command object multiple transactions 20015 ms String reuse command object multiple transactions 18937 ms String no reuse command object one transaction 9812 ms String reuse command object one transaction 9765 ms Parameters no reuse command object multiple transactions 14453 ms Parameters reuse command object multiple transactions 14203 ms Parameters no reuse command object one transaction 5390 ms Parameters reuse command object one transaction 5281 ms Stored Procedure no reuse command object multiple transactions 17125 ms Stored Procedure reuse command object multiple transactions 17156 ms Stored Procedure no reuse command object one transaction 7937 ms Stored Procedure reuse command object one transaction 7843 ms
Jeg har tilsvarende tal for Java og diverse andre databaser.
Mange tak for svaret! (Når du smider et anyway ;))
Jeg ville have troet Stored Precedure's var hurtigst i din test. (Uden selvf. at kende noget til koden.) Men interessante tal. Findes de også i en udgiven artikel?
nej - det var et eller andet jeg lavede til et spoergsmaal - ikke en artikel
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.