MySQL versus PostgreSQL

DISCLAIMER: Alhoewel ik met databases heb gewerkt, was dit hoofdzakelijk met MySQL en heb daarbij nog geen GIS (Geographic information system) functionalteit nodig gehad. Deze informatie is dus gebaseerd op info op het web en niet op persoonlijke ervaring.

Het is mogelijk om met zowel MySQL als PostgreSQL geografische data op te slaan, te raadplegen en te bewerken. MySQL heeft deze functionaliteit ingebouwd, PostgreSQL biedt deze d.m.v van een extensie (PostGIS). De GIS functionaliteit in MySQL is jonger dan die van PostgreSQL. MySQL implementeert slechts een klein gedeelte van de OGC standaard [1] en een gedeelte daarvan blijkt niet geheel naar behoren te werken in verhouding tot deze standaard [2] [3]. In de praktijk betekent dit twee dingen:

  1. Omdat er minder GIS functionaliteit in MySQL beschikbaar is, is het mogelijk dat het moeilijker is om hiermee te werken, waardoor implementatie langer zal duren en investeringskosten hoger zijn.
  2. Omdat de functionaliteit die wel beschikbaar is in MySQL zich niet volledig aan de standaard houdt, is het mogelijk dat de code die geschreven wordt voor MySQL minder goed zal werken met andere DB systemen. Dit zou eventuele migratie naar een andere database vermoeilijken.

Omdat PostGIS ouder is dan MySQL GIS, is er langer aan de code gewerkt. Dit betekent naast dat meer tijd is geweest om aan stabiliteit en beveiliging te werken in PostGIS, deze ook verder geoptimaliseerd is. Alhoewel het niet heel veel is, is deze dus sneller dan MySQL GIS.

Nu zal ik de MySQL en PostgreSQL vergelijken zonder de GIS functionaliteit. MySQL is ontwikkeld met een focus op snelheid, terwijl PostgreSQL ontwikkeld is met een focus op functionaliteit en het houden van standaarden. Dit betekent dat een lange tijd MySQL sneller was terwijl PostgreSQL meer features had (zoals subqueries welke vrij lang afwezig waren in MySQL). Nu we echter wat verder zijn, zijn deze twee databases in deze aspecten naar elkaar toe aan het groeien [4]. MySQL is aan het inhalen op het gebied van functionaliteit en PostgreSQL is bijna net zo snel of soms zelfs sneller dan MySQL. Qua uitgroeimogelijkheden schijnt MySQL beter gebruik te kunnen maken van meerdere processor cores, terwijl PostgreSQL makkelijker zijn werk kan verdelen over meerdere servers.

Wat voor mij echter doorslaggevend is in de keuze tussen MySQL en PostgreSQL, is de toekomst van beide projecten. PostgreSQL is niet eigendom of zelfs afhankelijk van een enkel bedrijf. Hoewel er wel bedrijven zijn die bijdragen aan PostgreSQL, worden deze bedrijven hetzelfde behandeld als iedere andere programmeur die een bijdrage levert. PostgreSQL wordt gestuurd door de Open Source community, waardoor de toekomst van PostgreSQL zeker is.
MySQL daarintegen is eigendom geweest van meerdere bedrijven en is grotendeels afhankelijk van deze bedrijven voor haar doorontwikkeling. In 2009 heeft Sun MySQL doorverkocht aan Oracle [5], een bedrijf waarvan MySQL de meest bedreigende concurrent was. Aangezien er ook in Amerika anti-trust wetten zijn om monopoliƫn te vorkomen, heeft de Amerikaanse overheid zich ook bezig gehouden met deze overname. Oracle heeft aan de Amerikaanse overheid laten weten dat als de overname niet zou lukken Sun failiet zou gaan, waarna deze overheid de overname heeft goedgekeurd. Hierna is er een petitie geweest om de EU een stokje voor deze overname te laten steken, maar dit mocht niet baten. De Amerikaanse overheid heeft contact opgenomen met de EU [6], waarna de overname ook door de EU goedgekeurd werd. Oracle moest echter wel een belofte maken om MySQL verder te ontwikkelen wat zij ook heeft gedaan, maar deze belofte geldt tot minimaal 2015. Na deze tijd kan Oracle MySQL gewoon laten vallen, waardoor er weer een concurrent minder is.

Om deze laatste reden verkies ik PostgreSQL boven MySQL voor mijn toekomstige projecten.

Vincent den Boer, 06-09-2011