tabs ↹ over ␣ ␣ ␣ spaces

by Jiří {x2} Činčura

MySQL jako databáze? – ACID

1 Oct 2006 Databases in general

Před několika dny mě ráno napadlo, jestli MySQL (tak masivně) využíváno vůbec podporuje základní koncept ACID. Dlouho jsem o tom nepřemýšlel, přestalo mě to bavit (asi hlavně kvůli tomu, že MySQL prostě nemusím). Nicméně odpoledne jsem měl schůzku s kolegou, který je velký znalec databází a mj. šéfredaktor dbsvet.cz. Během řečí se nějakým záhadným způsobem řeč dostala na téma MySQL & ACID. Po několika konstruktivních úvahách jsme odsouhlasili, že MySQL ACID neumí.

Abych to podložil nějakou ukázkou, zamysleme se nad prvním bodem – Atomicitou. Vzhledem k tomu, že pokud spustíte v MySQL např. dva delete příkazy a druhý zhavaruje, potom první naprosto bez řečí zůstane v DB zachován, i když by měl být zrušen. Neboť blok dvou delete mezi begin a commit/rollback (ani nevím, jestli to v MySQL můžu takto nazvat)) je z našeho pohledu nejmenší jednotka, kterou už nelze dělit a je nutné ji vykonat vcelku. Díky tomuto faktu, se nám zjevně nabořila i další věc – Konzistence. O Isolaci už vlastně ani mluvit nemusíme, i když každý může zkusit, že nic takového se nekoná. Naopak Trvanlivost (D) je vlastně splněna (když pomineme ostatní chybičky). Když blok “commitnete” (to zní fakt divně), tak je tam a je to (dokonce je jaksi v DB dřív než by člověk chtěl 😃).

A co ostatní? Jak moc vám (ne)vadí v MySQL absence základních věcí (IMHO dalo by se toho překousnout hodně – na aplikační úrovni to prostě oddřete, ale bez transakcí to už je trochu moc).

EDIT:

Dostal jsem několik zajímavých komentářů nejen tady, ale také mailem. Předně bych chtěl říci, že MySQL rozhodně nezatracuji – má oblibená DB je sice Firebird nicméně i na MySQL “občas” něco postavím. Vím, že MySQL má i jiné engine, které transakce podporují, já jsem však vycházel z (asi) nejpoužívanějšího MyISAM – je na hodně hostinzích a je takový defaultní.

Nikomu nenutím svůj názor – at si klidně na MySQL jede dál (a stejně to bude nejpoužívanější DB, spojení MySQL+PHP+Apache je neskutečně silné). Není to tak špatná DB, ale jsou lepší. 😉

Uff, musím se jít na chvíli zalogovat na FB. 😃

Profile Picture Jiří Činčura is an independent developer focusing on data and business layers, language constructs, parallelism and databases. Specifically Entity Framework, asynchronous and parallel programming, cloud and Azure. He's Microsoft Most Valuable Professional and you can read his articles, guides, tips and tricks at www.tabsoverspaces.com.