Tema: Re: Need nuomonės iš šono - DB
Autorius: Laimis
Data: 2011-12-08 21:59:47
2x50 rašė:
> :) wow, genialu
>
> SELECT * FROM `table` ORDER BY ID ASC LIMIT 1
>
> problema yra sitam sakiny. Speju, kad migravus i InnoDB bus tas pats, o
> pridejus set transaction isolation level serializable bus katastrofa.

Nevisai. Problema yra iš esmės FIFO uždavinyje, o jam realizuoti 
SERIALIZABLE tinka. Katastrofa nenusimato dėl labai paprastos 
priežasties: pasikeis tik variklis, o veikimo principas liktų nepakitęs.
Net beveik neabejotinai nusimato paspartėjimas, nes InnoDB dirba 
efektyviau (tiek multi-core/multi-threaded, tiek sisteminiai dalykai: 
indeksai, rakinimas ir aibė kitų dalykų):
http://www.oracle.com/partners/en/knowledge-zone/mysql-5-5-innodb-myisam-522945.pdf



> Sitas sakinys efektyviai uztikrina, kad tuo paciu metu gali buti
> apdorojamas vienas ir tik vienas irasas. Idejus transakcijas (bet koks
> isolation level), transakcijos lygiai taip pat bus vykdomos po viena,
> todel kad visos transakcijos, kurios nores tuo paciu metu gauti
> duomenis, bandys gauti ta pati irasa. O serializable atveju pirma
> pasibaigs, o visos likusios, speju, gaus exceptiona - row does not exist
> arba cannot serialize transaction arba kazka panasaus, nes irasas, kurio
> jos visos laukia, jau nebeegzistuoja, ji istrins pirmoji transakcija...

Na, reikėtų nepamiršti, kaip ir kam tas serializable užtikrinamas... ;-)
O užtikrinamas lock'ais (taip, kad kitos transakcijos tiesiog lūkuriuos 
eilutėje; čia, suprantama, tada, kai rakinamas jau skaitymas).