Voor de opslag van gegevens zijn databases handig. Ze worden dan ook veel gebruikt en ze bestaan in allerlei soorten en maten. Dat heeft onder meer te maken met het doel waarvoor je de database wil inzetten. Het is geen verrassing dat er niet één enkele populaire database bestaat, maar dat er een aantal zijn die je in de praktijk veel tegenkomt.

Databases bestaan al erg lang. Het is daarom niet verwonderlijk dat in de open source wereld je daardoor eveneens heel wat keuze hebt. En het aantal databases lijkt alleen maar te groeien. In dit artikel laten we vijf databases de revue passeren die heel populair zijn. Het blijkt eigenlijk een goede dwarsdoorsnede te zijn van de verschillende typen databases. 

MariaDB en MySQL
Weliswaar zijn MariaDB en MySQL twee databases, maar praktisch gezien hebben ze heel veel van elkaar weg. De oorzaak ligt in de ontstaansgeschiedenis. MySQL bestond als eerste en werd overgenomen door Sun. Toen Oracle echter op zijn beurt Sun overnam, was geenszins duidelijk of de open source ontwikkeling zou blijven bestaan. Daarom is toen meteen een afsplitsing (een fork) gemaakt onder de naam MariaDB.

Omdat MariaDB compatibiliteit met MySQL blijft nastreven, beschouwen we ze hier als twee varianten van één en dezelfde relationele database. Het zijn echter databases die soms eerder lijken op een front-end voor een reeks back-ends. Een dergelijke back-end heet storage engine. Voor MySQL zijn MyISAM en InnoDB de bekendste engines.

Met MyISAM wilden de oorspronkelijke MySQL ontwikkelaars een makkelijke en lichtgewicht database maken. Dat had wel consequenties. Zo had je geen foreign keys. Bovendien waren er geen transacties, waardoor je geen garantie had dat de database in een consistente staat bleef in geval van een calamiteit. Als webontwikkelaar moest je daardoor veel zelf regelen in je eigen code. Om daaraan tegemoet te komen, kwam op een gegeven moment InnoDB beschikbaar. Bij het aanmaken van een database moet je daarom goed opletten welk type je aanmaakt.

Feitelijk ligt de werkelijkheid nog gecompliceerder. Niet alleen ondersteunt MySQL nog enkele andere engines, MariaDB voegt daar op zijn beurt forks van MySQL engines aan toe. Bovendien kom je bij MariaDB daar bovenop nog weer andere engines tegen.

Desondanks hebben MySQL en MariaDB vooral bij de ontwikkelaars van webapplicaties een stevige poot aan de grond. Daarom kom je op de site van hosters vaak de term LAMP tegen. Dat wil zeggen Linux met daarop de Apache webserver in combinatie met MySQL of MariaDB en de programmeertaal PHP.

PostgreSQL
Ook dit is een relationele database, die vaak vergeleken wordt met MySQL en MariaDB. In tegenstelling daarmee is PostgreSQL echter van meet af aan opgezet als robuuste database met zaken als foreign keys en transacties. Je hebt ook maar één enkele storage engine. 

In de webwereld kom je PostgreSQL duidelijk minder vaak tegen. Menige webapplicatie ondersteunt wel MariaDB en MySQL, maar nog steeds geen PostgreSQL. Je vindt PostgreSQL wel geregeld in de wetenschappelijke en zakelijke hoek. Daar krijgt het eerder de voorkeur boven MySQL of MariaDB. Dat heeft vooral te maken met de stabiliteit van PostgreSQL, die van begin af aan uitgangspunt is geweest.

Behalve dat PostgreSQL relationeel is, heeft het ook kenmerken van een object georiënteerde database. Daardoor heb je bij PostgreSQL goede extensie-mogelijkheden. In de geografie wordt daar dankbaar gebruik van gemaakt. Als je namelijk de zogeheten PostGIS uitbreidingen installeert, maak je PostgreSQL heel geschikt voor het opslaan en leveren van geografische data. 

SQLite
Wat MariaDB en PostgreSQL met elkaar gemeen hebben, is dat ze volgens het client-servermodel werken. Met andere woorden: je hebt een database administrator nodig die de database beheert op de server. Clients, zoals bijvoorbeeld een webapplicatie, benaderen dan die server om data op te halen of weg te schrijven.

SQLite daarentegen is een embedded database. Deze database is als het ware geïntegreerd met de applicatie en de data staan maar in één enkel bestand. De applicatie zorgt zelf voor het beheer, waardoor geen database administrator nodig is. De eindgebruiker heeft dus helemaal geen weet van een dergelijke database en hoeft er zelf niets voor te doen. Toch is SQLite een volwaardige relationele database, die zelfs transacties ondersteunt.

SQLite zie je weliswaar niet, maar is onder water veel meer aanwezig dan je zou denken. Niet alleen bekende applicaties voor op je PC, zoals Firefox of Skype, maar ook embedded systemen zoals Android gebruiken het. Een kleine database dus, maar groot in aantal.

MongoDB
Lange tijd waren relationele databases dominant voor grote hoeveelheden data. Nadeel van die databases is dat je relatief veel overhead hebt. Voor het bijhouden van relaties tussen tabellen betaal je nu eenmaal een prijs.

Met name door de opkomst van big data en cloud computing, zie je nu de zogenaamde NoSQL databases sterk opkomen. Deze zijn eenvoudig van opzet en in gebruik. Het komt eigenlijk neer op het opslaan van een sleutel met een waarde, het zogeheten key-value pair. Daaraan zie je dat NoSQL databases eigenlijk al heel lang bestaan. Je ziet die techniek namelijk al sinds de jaren ‘60, alleen heetten dergelijke databases toen nog niet zo.

MongoDB is een populaire NoSQL database. Hierbij schrijf je de value weg als data in een variant van het veelgebruikte JSON formaat. Data in JSON formaat bestaat zelf ook weer uit attributen met waarden. Daardoor sla je bij MongoDB in één keer alle bij elkaar behorende data op. Dat heet een document. Anders dan bij een relationele database hoef je zodoende niet de informatie over meerdere tabellen heen bij elkaar te zoeken.

Bij NoSQL databases heb je geen standaard query taal zoals SQL. NoSQL betekent echter niet per definitie structuurloos. Bij MongoDB zijn de documenten gestructureerd door de attributen. Dat model beschrijft zich echter zelf en daardoor hoef je het niet vast te leggen, zoals bij relationele databases. Dat maakt het dynamisch. Binnen één en dezelfde database mogen het aantal attributen, hun hiërarchie en het soort waarde variëren. Daardoor ben je heel vrij in het opslaan van data. 

Berkeley DB
Berkeley DB heeft een behoorlijke geschiedenis achter de rug. Ooit begonnen als database bij het Unix systeem van de Berkeley universiteit, toen onder de vlag van Sleepycat en tegenwoordig is het van Oracle. Maar nog steeds is het open source. Apart detail is dat Berkeley DB ook heeft gefungeerd als storage engine voor MySQL.

Net als bij SQLite heb je voor Berkeley DB geen server nodig. De applicatie praat rechtstreeks met de database. Als eindgebruiker zie je daardoor evenmin veel van Berkeley DB. Maar Berkeley DB is geen relationele database zoals SQLite. Je slaat namelijk data op als key-value pair. Ondanks al die eenvoud is Berkeley DB toch heel robuust. Zo vind je er bijvoorbeeld ondersteuning voor transacties.

Hoewel Berkeley DB onzichtbaar zijn werk doet, kom je het onder de motorkap geregeld tegen. Je treft het onder meer aan bij Kerberos, Postfix en de pakketbeheerder RPM.

Tot slot
Zoals je ziet, bestaat volop variatie. Als de ideale kandidaat hier niet bijzit, volstaat een rondje op internet. Voor elk scenario vind je wel een geschikte database.

 

Links

MariaDB – mariadb.org

MySQL – mysql.com

PostgreSQL – postgresql.org

SQLite – sqlite.org

MongoDB – mongodb.com

Berkeley DB – oracle.com/database/berkeley-db