Avatar billede tokelil Nybegynder
12. januar 2009 - 17:25 Der 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.
Avatar billede arne_v Ekspert
12. januar 2009 - 17:39 #1
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.
Avatar billede arne_v Ekspert
12. januar 2009 - 17:41 #2
http://www.eksperten.dk/artikler/996

kommer ind paa nogle af problem stillingerne
Avatar billede tokelil Nybegynder
12. januar 2009 - 18:21 #3
Tak for svaret.

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...)
Avatar billede arne_v Ekspert
12. januar 2009 - 18:40 #4
Ja.

C# SQLServer test:

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.
Avatar billede arne_v Ekspert
12. januar 2009 - 18:41 #5
Og en commit nederst i try og en rollback i catch kan goere logikken meget nemere at kode.
Avatar billede tokelil Nybegynder
12. januar 2009 - 18:46 #6
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?
Avatar billede tokelil Nybegynder
12. januar 2009 - 18:47 #7
"Og en commit nederst i try og en rollback i catch kan goere logikken meget nemere at kode."
Præcis, det var det jeg ville frem til i min kode. :)
Avatar billede arne_v Ekspert
12. januar 2009 - 18:54 #8
svar
Avatar billede arne_v Ekspert
12. januar 2009 - 18:54 #9
nej - det var et eller andet jeg lavede til et spoergsmaal - ikke en artikel
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester