Wat is MongoDB en wanneer kies je ervoor?
Auteur: Redactie Domeny.ForSale Gepubliceerd
In het kort: MongoDB is een documentdatabase: het slaat informatie op in structuren die lijken op JSON-objecten, in plaats van die uitsluitend in tabellen met rijen en kolommen te organiseren. Het is onder meer geschikt voor applicaties waarin gegevens een geneste structuur of verschillende kenmerken hebben. Het is echter niet automatisch een sneller of eenvoudiger alternatief voor SQL-databases — de keuze hangt vooral af van de manier waarop je gegevens opslaat en uitleest.
Hoe MongoDB gegevens opslaat
MongoDB behoort tot de NoSQL-databases: een groep systemen die niet uitsluitend op het traditionele relationele model is gebaseerd. De basiseenheid is een document: een verzameling velden en waarden die bijvoorbeeld een product, gebruiker of bestelling beschrijft. Documenten worden gegroepeerd in collecties. Die hebben een vergelijkbare functie als tabellen, maar vereisen niet dat alle records dezelfde velden hebben.
Een document kan in een leesbare JSON-vorm worden weergegeven:
{
"_id": "product-101",
"naam": "Stadsrugzak",
"prijsGroszy": 18900,
"kleuren": ["zwart", "donkerblauw"],
"eigenschappen": {
"inhoudLiters": 20,
"waterdicht": true
}
}
Het veld _id is de unieke identificatie van het document. Als de applicatie deze niet opgeeft, krijgt het document bij een standaard toevoeging doorgaans een identificatie van het type ObjectId. De overige velden kunnen onder meer tekst, getallen, lijsten en andere documenten bevatten.
Intern gebruikt MongoDB BSON, een binair documentformaat dat ook gegevenstypen ondersteunt die niet rechtstreeks in JSON voorkomen, zoals datums. De uitspraak dat MongoDB ‘JSON opslaat’ is dus een nuttige vereenvoudiging, geen exacte beschrijving van het opslagformaat.
Hoe MongoDB verschilt van een SQL-database
Relationele databases, zoals PostgreSQL en MySQL, organiseren gegevens in tabellen en kunnen die op basis van gemeenschappelijke velden combineren. Een tabel met bestellingen kan bijvoorbeeld verwijzen naar een tabel met klanten. SQL is een taal waarmee je onder meer zulke databases kunt bevragen.
In MongoDB worden samenhangende gegevens vaak in één document opgenomen. Een bestelling kan een lijst met bestelregels en het afleveradres op het moment van aankoop bevatten. Zo haalt de applicatie alle benodigde gegevens op zonder ze uit verschillende afzonderlijke structuren te hoeven samenvoegen.
| Aspect | MongoDB | Relationele database |
|---|---|---|
| Hoofdstructuur | Documenten in collecties | Rijen in tabellen |
| Gegevensmodel | Natuurlijke nesting en lijsten | Expliciet gedefinieerde kolommen en relaties |
| Verbanden | Ingebedde gegevens of verwijzingen | Vreemde sleutels en joins |
| Query’s | Documentbewerkingen en aggregatiepijplijnen | SQL-query’s |
Deze vergelijking betekent niet dat de mogelijkheden strikt gescheiden zijn. Relationele databases kunnen JSON ondersteunen, en MongoDB kan gegevens uit collecties combineren, onder meer met de bewerking $lookup. MongoDB ondersteunt ook transacties die meerdere documenten omvatten, al moet je in het ontwerp rekening houden met de kosten en implementatievereisten daarvan.
Een flexibel schema betekent niet dat er geen regels zijn
Documenten binnen één collectie kunnen verschillende velden hebben. In een winkelcatalogus kan een rugzak een inhoud in liters hebben, terwijl een monitor een schermdiagonaal en een resolutie heeft. Je hoeft niet voor elk soort product dezelfde verzameling lege kolommen aan te maken.
Flexibiliteit neemt de noodzaak van een doordacht gegevensmodel echter niet weg. Als het ene deel van de applicatie een prijs als getal opslaat en het andere als tekst, worden filteren en rekenen lastiger. MongoDB biedt schemavalidatie: regels die onder meer controleren of verplichte velden aanwezig zijn en of ze het juiste type hebben.
Je moet ook bepalen welke gegevens je in een document opneemt en naar welke gegevens je verwijst. Het afleveradres in een bestelling moet doorgaans als historische kopie bewaard blijven. Het actuele klantprofiel kun je beter afzonderlijk opslaan dan kopieën ervan in alle bestellingen bijwerken.
Voeg niet onbeperkt gegevens aan één document toe. MongoDB heeft een maximale BSON-documentgrootte van 16 MiB. Een steeds groeiende gebeurtenisgeschiedenis heeft daarom meestal een eigen collectie nodig.
Wanneer kies je MongoDB en wanneer overweeg je PostgreSQL?
MongoDB is een logische kandidaat als de applicatie met uitgebreide objecten werkt waarvan de inhoud vaak gezamenlijk wordt uitgelezen. Voorbeelden zijn een productcatalogus met uiteenlopende kenmerken, een contentmanagementsysteem of apparaatconfiguraties. Alleen het feit dat een applicatie JavaScript gebruikt, is geen voldoende reden om MongoDB te kiezen.
Overweeg eerst een relationele database als veel onderlinge relaties, integriteitsregels tussen tabellen en rapportages die verschillende soorten gegevens combineren het belangrijkst zijn. Dat geldt bijvoorbeeld voor een systeem voor financiële afrekeningen, waarin het eenvoudig bewaken van onderlinge afhankelijkheden belangrijker kan zijn dan de vrijheid in de documentstructuur.
Noteer voordat je beslist de drie meest voorkomende bewerkingen van de applicatie, bijvoorbeeld een product zoeken, een winkelmandje ophalen en een bestelling opslaan. Maak vervolgens in beide databases een voorbeeldmodel. Controleer hoeveel leesbewerkingen en updates elke bewerking vereist en waar kopieën van dezelfde informatie ontstaan.
Aan de slag en aandachtspunten bij de implementatie
Je kunt MongoDB op je eigen infrastructuur draaien of MongoDB Atlas gebruiken, een beheerde clouddienst. Voor het werken met gegevens zijn er onder meer de grafische tool MongoDB Compass, de shell mongosh en drivers voor programmeertalen. Controleer de actuele prijzen, limieten en back-upmogelijkheden van Atlas in de officiële documentatie en de prijslijst van het gekozen abonnement.
Maak om te beginnen een testcollectie aan, voeg een tiental documenten toe en voer gangbare query’s uit. Stem vervolgens de indexen — aanvullende structuren die het zoeken versnellen — af op de filters en sorteringen die je daadwerkelijk gebruikt. Te veel indexen nemen ruimte in beslag en verhogen de kosten van schrijfbewerkingen.
Configureer vóór de ingebruikname in productie de authenticatie, beperkingen voor netwerktoegang en back-ups, en test het herstellen van gegevens. Gebruik het eerste prototype om het model en de query’s te toetsen. Pas door die met representatieve gegevens te meten, kun je beoordelen of MongoDB bij de specifieke applicatie past.
Zie ook: Wat is 2FA?
