De populaire database-engine MySQL heeft de laatste jaren een stormachtige ontwikkeling doorgemaakt. Deze maand verscheen de tweede alphaversie van MySQL 6 met een nieuwe storage engine die InnoDB moet doen vergeten.
Nadat Oracle eind 2005 InnoDB overnam, waardoor de ontwikkelaar van de belangrijkste storage engine van MySQL in handen van deze 'concurrent' kwam, besloot het bedrijf om onder leiding van databaseguru Jim Starkey een eigen engine te ontwikkelen. Deze engine, die door het leven gaat onder de naam Falcon, zal een van de vernieuwingen zijn die in versie 6 van MySQL zijn opwachting maakt.
Momenteel bevindt Falcon zich nog in alphastadium als onderdeel van de deze maand uitgebrachte alphaversie van MySQL 6. Ten opzichte van de huidige MySQL-versies zijn de voordelen nog beperkt. Falcon biedt ondersteuning voor een groot aantal features, waaronder multi version concurrency control, waardoor lees- en schrijfacties van verschillende gebruikers niet op elkaar hoeven te wachten. Verder is er ondersteuning voor acid-transacties, crash-recovery en verbeterde prestaties ten opzichte van InnoDB. Dit laatste zou bereikt moeten worden door een innovatieve cachingstrategie en een implementatie van b-tree-indices, waarbij de lees- en schrijfacties van de harddisk minimaal zullen zijn.

Eerst bewijzen
Hoewel al deze features veelbelovend klinken en wellicht een verbetering zullen zijn ten opzichte van de huidige storage engines die beschikbaar zijn voor MySQL is het nog te vroeg om volop te gaan juichen. Ten opzichte van InnoDB biedt Falcon weinig aanvullende features, maar vooral een verbeterde implementatie van bestaande mogelijkheden.
Zo mist Falcon, net als de meeste andere storage engines voor MySQL, ondersteuning voor foreign key constraints. Volgens de informatie van MySQL zal dit ook niet aanwezig zijn in de eerste versie van MySQL 6, maar zal het later toegevoegd worden waarbij het ook gelijk beschikbaar gemaakt zal worden voor alle andere storage engines. Ook de zeer goede prestaties die worden beloofd zijn nog geen realiteit.
Uit een eenvoudig opgezette benchmark waarin de prestaties bij het ophalen en schrijven van blob-data worden gemeten, blijkt bijvoorbeeld dat InnoDB het nog altijd beter doet dan Falcon. Dit laatste is niet verrassend, gezien het feit dat al geruime tijd aan InnoDB wordt ontwikkeld en er dus meer tijd is geweest om de prestaties van deze engine te optimaliseren. Falcon moet eerst nog volledig bugvrij worden gemaakt, voordat men zich volledig op snelheidstuning kan gaan richten.
Pluggable storage engines
Een van de features waarin MySQL zich onderscheidt van veel concurrenten is de plugin-architectuur voor storage engines. Hierdoor is het mogelijk om in een enkele database verschillende storage engines te combineren die geoptimaliseerd zijn voor specifieke toepassingen.
Een voorbeeld van een dergelijke engine is de nieuwe Scalable Blob Streaming Infrastructure voor MySQL, die de ietwat opmerkelijke naam MyBS heeft gekregen. Deze storage engine is geoptimaliseerd voor de opslag van binaire data in de database, ook wel Blobs genoemd.
Een van de problemen met dit data type is dat het ophalen van de data uit de database vaak langzamer gaat dan wanneer hetzelfde bestand van harddisk zou worden gelezen, waardoor het voordeel van de opslag in de database teniet wordt gedaan door de slechte performance. De oorzaak hiervan is dat de database de binaire data eerst leest van de harddisk en tijdelijk buffert in het werkgeheugen, alvorens de data wordt doorgegeven naar de client die de data opvraagt.
MyBS verhelpt dit probleem door de Blob-data te 'streamen' via een eigen webserver, die de data direct van de harddisk leest. Deze nieuwe storage engine is te gebruiken in combinatie met alle storage engines voor MySQL. MyBS verzorgt namelijk niet de opslag van 'gewone' data in tabellen.