Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Transaktiot

lrp [06.06.2009 23:03:10]

#

Mietin, että selvää on jos siirretään rahaa tililtä toiselle niin pitää huolehtia, että raha sekä lähtee toiselta tililtä, että tulee toiselle tilille tai sitten ei tapahdu mitään.

Olisko jollain joku hyvä nyrkkisääntö milloin tulisi ottaa transaktiot käyttöön?
Vai tulisiko niitä käyttää aina? Vai käyttääkö vain UPDATE INSERT jne mutta SELCTIin kanssa ei?
Vai hidastavatko ne turhaan.....?

TeNDoLLA [07.06.2009 00:13:04]

#

Transaktioita käytetään silloin kun useamman kyselyn pitää onnistua kerralla. Meinaa sitä, että jos joku kyselyistä ei onnistu niin kaikki muutkin kyseiseen settiin liittyvät kyselyt kumotaan. Eli tommoisessa rahan siirto jutussa se on ihan ehdoton. Itse transaktiohan ei ota kantaa siihen millaisia kyselyitä teet (update,insert,select) vaan siihen, että kaikki transaktioon kuuluvat kyselyt tulee onnistua.

Antti Laaksonen [07.06.2009 00:15:27]

#

Transaktio on tarpeen, jos kyselyjä on monta, niiden täytyy kaikkien onnistua ja keskeneräinen tilanne ei saa näkyä ulospäin.

Esimerkiksi kun keskusteluun aloitetaan uusi aihe, kyselyjä on monta:

INSERT INTO aiheet VALUES ('Transaktiot', 4)
INSERT INTO viestit VALUES ('Mietin, että...', 7337, '06.06.2009 23:03:10')

Kummankin kyselyn täytyy onnistua, koska jos vain ensimmäinen kysely onnistuu, keskusteluun ilmestyy tyhjä aihe.

Keskeneräinen tilanne ei saa näkyä ulospäin, eli jos joku lataa sivun kyselyjen välissä, tyhjää aihetta ei näy silloinkaan.

Grez [07.06.2009 00:17:58]

#

Joo, voisi sanoa, että mitä kriittisemmästä jutusta on kyse, sitä tarpeellisempaa niitä on käyttää. Jos olisin pistämässä vaikka jotain puolivakavaa keskustelufoorumia, niin transaktiot ei olisi ihan ensimmäinen murhe. Sinänsä kuten Antti esittikin, niin keskustelufoorumillakin niistä on periaatteessa hyötyä. Toisaalta jos tuo jälkimmäinen kysely onnistuu n. 100% varmuudella, niin silloin transaktio ei ole välttämätön tuossa.

Toisaalta, en olisi transaktiota käyttöön ottaessa ensisijaisesti huolestunut kannan suorituskyvystä, vaan siitä että transkatioita käytettäessä koodissa täytyy huolehtia järjellisesti deadlockit. Mielestäni esim. MS SQL Server tekee jokaisesta tietoa päivittävästä kyselystä joka tapauksessa transaktion, koska kannan pitää automaattisesti palautua tilanteesta jossa vaikka palvelimen sähköt katkeaa ja kirjoitus massamuistille jää kesken.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta