Monthly Archives: October 2006

Záloha na novém, obnova na starém?

Asi trochu podivný nadpis. Nicméně vzhledem k tomu, že každou chvíli můžeme očekávat Firebird 2.0. A jak to tak bývá, bude se nejdříve trochu experimentovat (nepředpokládám, že by někdo vyměnil 1.5 hned na 2.0 bez otestování), ale i tak se může stát, že vše krásně pojede a až později se objeví problém, který možná nepůjde vyřešit hned. Potom budete chtít udělat zálohu z FB 2.0 a přěnést ji zpět na 1.5.

Aby se to vše pěkně podařilo (a ušetřili jste si problémy s tím, že to na první pokus nepůjde), musíte vzít gbak z verze 1.5 a s ním udělat zálohu DB z 2.0 serveru a tu pak obnovit na 1.5. Pokud použijete gbak z verze 2.0, dostane se vám na 1.5 hlášky "Expected backup version …". :-)

Jednoduché a rychlé. Přeji vám, aby se problematické chvilky nekonaly a vše šlapalo na první pokus s Firebirdem 2.0.

MySQL jako databáze? – ACID

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. :)