Relationele databases waren decennialang de standaardoplossing voor gegevensbeheer. Door de groeiende hoeveelheid en diversiteit aan gegevens die kenmerkend is voor moderne webapplicaties, zijn documentgeoriënteerde databases zoals Mongo DB echter een serieuze concurrent geworden. We leggen uit wat de documentgeoriënteerde aanpak inhoudt en welke voordelen dit gegevensbeheermodel biedt.

Waarin verschilt MongoDB van andere databases?

In traditionele relationele databases worden gegevens opgeslagen in een gestructureerde tabel. MongoDB, waarvan de naam is afgeleid van het woord ‘humongous’ (enorm), is een documentgeoriënteerd databasesysteem. In MongoDB worden gegevens op een ongestructureerde manier gegroepeerd in wat het databaseprogramma ‘collecties’ noemt.

Een ander belangrijk verschil is dat MongoDB geen SQL als querytaal gebruikt en daarom wordt gecategoriseerd als een NoSQL-databasesysteem. In plaats daarvan gebruikt MongoDB de op JavaScript gebaseerde MongoDB Query Language (MQL) als querytaal. Bijgevolg worden MongoDB-records opgeslagen in het BSON-formaat, dat is gemodelleerd naar JSON. Dit betekent dat alle JavaScript-gegevenstypen worden ondersteund, waardoor MongoDB de ideale keuze is geworden voor veel op JavaScript gebaseerde platforms.

Een ander kenmerk van MongoDB-databases is hun vermogen om horizontaal te schalen. Dit betekent dat de gegevens in een database over meerdere servers kunnen worden verspreid in plaats van op één centrale locatie te worden opgeslagen. Deze aanpak zorgt voor een grotere beschikbaarheid van gegevens en verbetert de algehele prestaties van de database. Horizontale schaalbaarheid is vaak kosteneffectiever dan het upgraden van een enkele server met krachtigere hardware (verticale schaalbaarheid).

Hoe werkt MongoDB?

In tegenstelling tot MySQL hanteert MongoDB een totaal andere benadering voor het opslaan van gegevens en werkt het op een documentgeoriënteerde manier. In plaats van gegevens op te slaan in tabelvorm, waarbij elke rij hetzelfde aantal velden heeft dat met waarden moet worden gevuld, slaan MongoDB-databases gegevens op in BSON-documenten die geen vooraf gedefinieerde structuur hebben. Het aantal velden kan per document verschillen en velden hoeven niet consistent te zijn met elkaar. Documenten vervullen een rol die vergelijkbaar is met die van rijen in een SQL-tabel, terwijl de velden die in deze documenten zijn gedefinieerd, als kolommen dienen.

Er zijn veel tools die u kunt gebruiken bij het werken met MongoDB-databases. Naast de vertrouwde MongoDB Shell kunt u ook de GUI MongoDB Compass gebruiken om MongoDB-databases te beheren. In dit artikel richten we ons echter op Shell-opdrachten.

Aangezien MQL gebaseerd is op JavaScript, zijn er al verschillende vooraf gedefinieerde functies die u kunt gebruiken voor complexe query’s en commando’s. Over het algemeen hebben alle schrijf- en leescommando’s dezelfde structuur als de commando’s in het onderstaande voorbeeld. Naast deze commando’s zijn er nog tal van andere commando’s die u kunt gebruiken om uw MongoDB-database te beheren. Deze worden uitgebreid gedocumenteerd en gedetailleerd uitgelegd in de documentatie voor MongoDB.

> db.students.find(Name : "Charlie")
> db.students.updateOne(Name : "Charlie", Semester : 2)
> db.students.deleteOne(Name : "Peter")
> db.students.insertOne({
Name : "Elsie"
Age : 18
Semester : 1
})

In het bovenstaande voorbeeld staat een reeks MongoDB-databasecommando’s, die allemaal op dezelfde manier zijn gestructureerd. Eerst is er ‘db’, wat verwijst naar de database in zijn geheel, daarna ‘students’, wat verwijst naar een specifieke collectie, waar de bijbehorende bewerkingen moeten worden uitgevoerd. Na de collectie komt de methode (zoeken, bijwerken, verwijderen, invoegen) die moet worden gebruikt.

U kunt de methode find() gebruiken om naar een specifiek document te zoeken. Als u het parameterveld leeg laat, worden alle documenten in de door u geselecteerde collectie weergegeven. In het bovenstaande voorbeeld zoekt MongoDB naar alle documenten waarin het veld ‘Name’ de waarde ‘Charlie’ heeft.

De methode updateOne() kan worden gebruikt om waarden in een document te overschrijven. De methode update() heeft twee argumenten. Het eerste argument is het selectiecriterium en het tweede is het sleutel-waardepaar dat moet worden overschreven. In het voorbeeld worden alle studenten met de naam ‘Charlie’ geselecteerd. Vervolgens wordt de waarde ‘2’ ingevoerd in het veld ‘Semester’ voor studenten met de naam Charlie.

De methode deleteOne() heeft slechts één argument. Dit is het selectiecriterium dat bepaalt welke documenten uit de database moeten worden verwijderd. Hier worden alle studenten met de naam Peter uit de database verwijderd.

De methode insertOne() heeft ook een argument. Bij deze methode is het argument de JSON-inhoud van het document dat u wilt toevoegen. Bij het invoegen van documenten is het cruciaal om ervoor te zorgen dat elk document in de MongoDB-collectie een uniek 12-bits hexadecimaal nummer heeft. Dit nummer dient als de object-ID van het document. Als dit niet wordt opgegeven bij het invoegen van het document, genereert MongoDB automatisch een ID voor het document.

Wat zijn de voordelen van MongoDB?

De structuur van MongoDB biedt gebruikers verschillende voordelen, vooral op het gebied van flexibiliteit en schaalbaarheid. Een belangrijk voordeel van documentgebaseerde gegevensopslag is dat, in tegenstelling tot relationele databases, niet alle vermeldingen dezelfde kenmerken hoeven te hebben. Hierdoor kunnen ongestructureerde en semi-gestructureerde gegevens worden opgeslagen. Bovendien kunnen individuele documenten worden geherstructureerd (bijvoorbeeld door een attribuut/veld toe te voegen of te verwijderen) zonder dat andere documenten in dezelfde collectie hoeven te worden geherstructureerd. Aangezien documenten in MongoDB worden opgeslagen in BSON-formaat, bieden MongoDB-databases ook een hoge mate van compatibiliteit met veel gangbare JavaScript-platforms.

Naast het opslaan van ongestructureerde gegevens biedt MongoDB ook een hoge mate van horizontale schaalbaarheid zonder in strijd te zijn met de ACID-principes (atomiciteit, consistentie, isolatie, duurzaamheid). In gedistribueerde databases kan het vaak een uitdaging zijn om consistentie te garanderen, omdat gegevens op verschillende servers worden opgeslagen. Wanneer er tegelijkertijd wijzigingen worden aangebracht in meerdere documenten, worden deze wijzigingen mogelijk niet onmiddellijk verspreid naar alle servers die het databasesysteem gebruikt. Als er veel zoekopdrachten zijn, kan dit soms leiden tot inconsistente gegevens. Met de release van MongoDB 4.2 in 2019 is het nu echter mogelijk om wijzigingen aan te brengen in meerdere documenten op verschillende servers zonder dat dit ten koste gaat van de consistentie of beschikbaarheid.

Waarvoor kan MongoDB worden gebruikt?

MongoDB is een uitstekende keuze voor webprojecten die gebruikmaken van extreem grote ongestructureerde datasets. Het werken met een documentgebaseerd systeem zonder vast schema is ideaal voor het verwerken van een breed scala aan gegevenstypen die snel moeten worden opgeslagen en verwerkt.

Het databasesysteem maakt ook horizontale, vrijwel onbeperkte schaalbaarheid mogelijk, aangezien databases moeiteloos over meerdere servers kunnen worden verdeeld zonder dat dit ten koste gaat van de functionaliteit. Bovendien kunt u met MongoDB eenvoudig kopieën van uw database maken en deze beschikbaar stellen aan verschillende servers, waardoor de veiligheid en beschikbaarheid van uw gegevens op lange termijn wordt gewaarborgd. Het documentgeoriënteerde databaseprogramma laat ook indrukwekkende mogelijkheden zien als het gaat om het aggregeren van gegevens, of deze nu uit één bron of uit meerdere bronnen afkomstig zijn.

MongoDB is ideaal voor webprojecten met de volgende kenmerken:

  • Schaalbaarheid: naarmate uw webproject groeit, neemt het aantal verzoeken doorgaans toe, waardoor er hogere eisen aan de database worden gesteld.
  • Beschikbaarheid: u hebt ononderbroken toegankelijkheid nodig voor uw webapplicatie, zelfs in het geval van een serverstoring.
  • Flexibiliteit: uw project moet te allen tijde dynamisch kunnen worden aangepast.

Weet u niet zeker welk databasemodel het meest geschikt is voor uw webproject? Dat geeft niet, want u hoeft niet slechts één model te kiezen. Het is mogelijk om verschillende soorten databasemodellen te combineren, en het kiezen van meer dan één model kan de meest geschikte keuze zijn voor uw projectvereisten.

Ga naar hoofdmenu