MySQLism slaat weer toe

Hoewel de core van MediaWiki zelf redelijk goed met verschillende databases om lijkt te gaan is dit niet het geval voor sommige extensies. Zo ook voor de extensie NewestPages waar wordt uitgegaan van MySQL als database en de SQL-query zo geschreven is om op MySQL te draaien.

Helaas is PostgreSQL wat kieskeuriger en klaagt over het feit dat er een “SELECT … LIMIT 0,5” wordt aangeboden. Gelukkig is er ook een optie om met een SQL-statement beide database te bevragen. De vraag is dan ook waarom niet direct voor “SELECT … LIMIT 5 OFFSET 0” is gekozen aangezien zowel MySQL 5 als PostgreSQL 8 dit ondersteunen.

De developer heeft een bugreport en patch gekregen om dit structureel op te lossen. Helaas gaat deze functionaliteit niet zonder flinke aanpassingen werken op Oracle aangezien ondersteuning voor oa LIMIT en OFFSET daarin niet aanwezig is. De komende periode maar eens kijken naar welke extensies ook problemen hebben met PostgreSQL als database achter MediaWiki, want ik ga niet meer terug naar MySQL.

Met MediaWiki 1.14 naar PostgreSQL

PostgreSQL ondersteuning kwam pas met versie 1.12 echt van de grond en met 1.15 voor de deur werd het tijd om verschillende 1.13 installaties te gaan upgraden naar 1.14. Bij een eerste poging om van 1.13 naar 1.14 te gaan gingen de wiki’s blank wat helaas geen mooi gezicht was. Bij het niet kunnen herleiden van het probleem bleef alleen de upgrades naar 1.13.3 en 1.13.4 over. Bij het uitzoeken wat er mis was besloot Oracle om Sun Microsystems over te nemen waarbij de toekomst van MySQL nog onzekerder is geworden. Dit ook omdat MySQL 5.1 onder leiding van Sun ook al niet geheel een positieve ervaring was en MySQL 6 heeft DukeNukem Forever trekjes.

Het werd tijd om in een testomgeving MediaWiki 1.14 op te bouwen met PostgreSQL als achterliggende database-engine. Het overstappen van database-prefixes naar schema’s maakt de DBA in mij ook weer blij nu het wat overzichtelijker is geworden. Zeker omdat PostgreSQL dumps op schema-niveau ondersteunt en met veel verschillende wiki’s is dat wel een fijne feature, want bij MySQL is dit helaas niet mogelijk.

Helaas zijn er ook nadelen met de overstap naar PostgreSQL zoals dat voor MediaWiki 1.15 een nieuwe versie van PostgreSQL vereist is. Ik gebruik nu 8.1 en dan zal 8.3 nodig zijn volgens de specificaties. Een tweede punt en dat hangt samen met deze aanpassing is het laden van tsearch2-ondersteuning, maar deze ondersteuning zou bij PostgreSQL 8.3 standaard is de database moeten zitten. Voorlopig voldoet Mediawiki 1.14 en kan de upgrade nog even wachten tot het moment dat de databaseserver overgaat van Debian 4.0 naar Debian 5.0 deze zomer.

Nu deze migratie van MySQL naar PostgreSQL gedaan is gaat wordt het tijd om de volgende migratie te gaan voorbereiden. Dit zullen hoogstwaarschijnlijk Dovecot en Postfix gaan worden, maar eerst even kijken of er nog issues uit de migratie van MediaWiki komen.

Standaard InnoDB in MySQL

MyISAM is jarenlang de standaard geweest in MySQL als storage-engine, maar al geruime tijd is er ondersteuning voor InnoDB welke meer is geschikt is voor de hedendaagse wereld. Helaas zijn veel applicaties nog niet bewust van deze optie en maken tabellen aan zonder te bepalen welke storage-engine nodig is. Zeker op een hostingplatform kan dit op de lange termijn problemen opleveren, maar er zijn opties voor om veel applicaties bijna ongemerkt om te zetten naar InnoDB.

Door het plaatsen van de optie default-storage-engine in my.conf zoals hieronder dan zullen nieuwe tabellen standaard worden aangemaakt met de InnoDB storage-engine ipv MyISAM.

[mysqld]
default-storage-engine=InnoDB

Bestaande tabellen worden niet geraakt door de aanpassing my.conf, maar met het volgende SQL-statement het is mogelijk om een tabel om te zetten naar InnoDB.

alter table <name> engine=InnoDB;

Het is nu alleen nog wachten op de Falcon-engine zodat MySQL in de buurt komt van PostgreSQL zodat taken zoals een database-engine voor SpamAssassin een goede optie wordt bij veel transacties.

PostgreSQL wordt geaccepteerd?

MySQL was altijd de database in het open source landschap, maar de laatste tijd lijkt daar steeds meer verandering in te komen. Projecten richten zich meer om applicaties op meerdere databases te laten draaien en zo ook MediaWiki wat de software achter WikiPedia is.

Maar het was al even mogelijk om PostgreSQL als database voor MediaWiki te gebruiken, maar er waren nog voldoende onvolkomenheden. Gelukkig komt daar met versie 1.10.1 verandering is en worden zoekfuncties betrouwbaar naast de al goede performance van MediaWiki op PostgreSQL die zeker te vergelijken is met de MySQL implementatie.

Hopelijk maken meer projecten zich sterk om PostgreSQL als database backend te gaan gebruiken, want concurrentie cq competitie is goed in de open source wereld om een gezonde omgeving voor iedereen te maken en te houden.