Re­la­ti­o­ne­le databases waren de­cen­nia­lang de stan­daard­op­los­sing voor ge­ge­vens­be­heer. Door de groeiende hoe­veel­heid en di­ver­si­teit aan gegevens die ken­mer­kend is voor moderne we­bap­pli­ca­ties, zijn do­cu­ment­ge­o­ri­ën­teer­de databases zoals Mongo DB echter een serieuze con­cur­rent geworden. We leggen uit wat de do­cu­ment­ge­o­ri­ën­teer­de aanpak inhoudt en welke voordelen dit ge­ge­vens­be­heer­mo­del biedt.

Waarin verschilt MongoDB van andere databases?

In tra­di­ti­o­ne­le re­la­ti­o­ne­le databases worden gegevens op­ge­sla­gen in een ge­struc­tu­reer­de tabel. MongoDB, waarvan de naam is afgeleid van het woord ‘humongous’ (enorm), is een do­cu­ment­ge­o­ri­ën­teerd da­ta­ba­se­sys­teem. In MongoDB worden gegevens op een on­ge­struc­tu­reer­de manier ge­groe­peerd in wat het da­ta­ba­se­pro­gram­ma ‘col­lec­ties’ noemt.

Een ander be­lang­rijk verschil is dat MongoDB geen SQL als querytaal gebruikt en daarom wordt ge­ca­te­go­ri­seerd als een NoSQL-da­ta­ba­se­sys­teem. In plaats daarvan gebruikt MongoDB de op Ja­vaScript ge­ba­seer­de MongoDB Query Language (MQL) als querytaal. Bijgevolg worden MongoDB-records op­ge­sla­gen in het BSON-formaat, dat is ge­mo­del­leerd naar JSON. Dit betekent dat alle Ja­vaScript-ge­ge­vens­ty­pen worden on­der­steund, waardoor MongoDB de ideale keuze is geworden voor veel op Ja­vaScript ge­ba­seer­de platforms.

Een ander kenmerk van MongoDB-databases is hun vermogen om ho­ri­zon­taal 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 op­ge­sla­gen. Deze aanpak zorgt voor een grotere be­schik­baar­heid van gegevens en verbetert de algehele pres­ta­ties van de database. Ho­ri­zon­ta­le schaal­baar­heid is vaak kos­ten­ef­fec­tie­ver dan het upgraden van een enkele server met krach­ti­ge­re hardware (verticale schaal­baar­heid).

Hoe werkt MongoDB?

In te­gen­stel­ling tot MySQL hanteert MongoDB een totaal andere be­na­de­ring voor het opslaan van gegevens en werkt het op een do­cu­ment­ge­o­ri­ën­teer­de 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-do­cu­men­ten die geen vooraf ge­de­fi­ni­eer­de structuur hebben. Het aantal velden kan per document ver­schil­len en velden hoeven niet con­sis­tent te zijn met elkaar. Do­cu­men­ten vervullen een rol die ver­ge­lijk­baar is met die van rijen in een SQL-tabel, terwijl de velden die in deze do­cu­men­ten zijn ge­de­fi­ni­eerd, als kolommen dienen.

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

Aangezien MQL gebaseerd is op Ja­vaScript, zijn er al ver­schil­len­de vooraf ge­de­fi­ni­eer­de functies die u kunt gebruiken voor complexe query’s en commando’s. Over het algemeen hebben alle schrijf- en lees­com­man­do’s dezelfde structuur als de commando’s in het on­der­staan­de 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 uit­ge­breid ge­do­cu­men­teerd en ge­de­tail­leerd uitgelegd in de do­cu­men­ta­tie 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 bo­ven­staan­de voorbeeld staat een reeks MongoDB-da­ta­base­com­man­do’s, die allemaal op dezelfde manier zijn ge­struc­tu­reerd. Eerst is er ‘db’, wat verwijst naar de database in zijn geheel, daarna ‘students’, wat verwijst naar een spe­ci­fie­ke collectie, waar de bij­be­ho­ren­de be­wer­kin­gen moeten worden uit­ge­voerd. Na de collectie komt de methode (zoeken, bijwerken, ver­wij­de­ren, invoegen) die moet worden gebruikt.

U kunt de methode find() gebruiken om naar een specifiek document te zoeken. Als u het pa­ra­me­ter­veld leeg laat, worden alle do­cu­men­ten in de door u ge­se­lec­teer­de collectie weer­ge­ge­ven. In het bo­ven­staan­de voorbeeld zoekt MongoDB naar alle do­cu­men­ten waarin het veld ‘Name’ de waarde ‘Charlie’ heeft.

De methode updateOne() kan worden gebruikt om waarden in een document te over­schrij­ven. De methode update() heeft twee ar­gu­men­ten. Het eerste argument is het se­lec­tie­cri­te­ri­um en het tweede is het sleutel-waar­de­paar dat moet worden over­schre­ven. In het voorbeeld worden alle studenten met de naam ‘Charlie’ ge­se­lec­teerd. Ver­vol­gens 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 se­lec­tie­cri­te­ri­um dat bepaalt welke do­cu­men­ten uit de database moeten worden ver­wij­derd. Hier worden alle studenten met de naam Peter uit de database ver­wij­derd.

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 do­cu­men­ten is het cruciaal om ervoor te zorgen dat elk document in de MongoDB-collectie een uniek 12-bits hexa­de­ci­maal 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 au­to­ma­tisch een ID voor het document.

Wat zijn de voordelen van MongoDB?

De structuur van MongoDB biedt ge­brui­kers ver­schil­len­de voordelen, vooral op het gebied van flexi­bi­li­teit en schaal­baar­heid. Een be­lang­rijk voordeel van do­cu­ment­ge­ba­seer­de ge­ge­vens­op­slag is dat, in te­gen­stel­ling tot re­la­ti­o­ne­le databases, niet alle ver­mel­din­gen dezelfde kenmerken hoeven te hebben. Hierdoor kunnen on­ge­struc­tu­reer­de en semi-ge­struc­tu­reer­de gegevens worden op­ge­sla­gen. Bovendien kunnen in­di­vi­du­e­le do­cu­men­ten worden ge­her­struc­tu­reerd (bij­voor­beeld door een attribuut/veld toe te voegen of te ver­wij­de­ren) zonder dat andere do­cu­men­ten in dezelfde collectie hoeven te worden ge­her­struc­tu­reerd. Aangezien do­cu­men­ten in MongoDB worden op­ge­sla­gen in BSON-formaat, bieden MongoDB-databases ook een hoge mate van com­pa­ti­bi­li­teit met veel gangbare Ja­vaScript-platforms.

Naast het opslaan van on­ge­struc­tu­reer­de gegevens biedt MongoDB ook een hoge mate van ho­ri­zon­ta­le schaal­baar­heid zonder in strijd te zijn met de ACID-principes (ato­mi­ci­teit, con­sis­ten­tie, isolatie, duur­zaam­heid). In ge­dis­tri­bu­eer­de databases kan het vaak een uitdaging zijn om con­sis­ten­tie te ga­ran­de­ren, omdat gegevens op ver­schil­len­de servers worden op­ge­sla­gen. Wanneer er te­ge­lij­ker­tijd wij­zi­gin­gen worden aan­ge­bracht in meerdere do­cu­men­ten, worden deze wij­zi­gin­gen mogelijk niet on­mid­del­lijk verspreid naar alle servers die het da­ta­ba­se­sys­teem gebruikt. Als er veel zoek­op­drach­ten zijn, kan dit soms leiden tot in­con­sis­ten­te gegevens. Met de release van MongoDB 4.2 in 2019 is het nu echter mogelijk om wij­zi­gin­gen aan te brengen in meerdere do­cu­men­ten op ver­schil­len­de servers zonder dat dit ten koste gaat van de con­sis­ten­tie of be­schik­baar­heid.

Tip

Heb je een do­cu­ment­ge­o­ri­ën­teer­de database nodig die meegroeit met de vereisten van je we­bap­pli­ca­tie? MongoDB is de perfecte oplossing!

Waarvoor kan MongoDB worden gebruikt?

MongoDB is een uit­ste­ken­de keuze voor web­pro­jec­ten die ge­bruik­ma­ken van extreem grote on­ge­struc­tu­reer­de datasets. Het werken met een do­cu­ment­ge­ba­seerd systeem zonder vast schema is ideaal voor het verwerken van een breed scala aan ge­ge­vens­ty­pen die snel moeten worden op­ge­sla­gen en verwerkt.

Het da­ta­ba­se­sys­teem maakt ook ho­ri­zon­ta­le, vrijwel on­be­perk­te schaal­baar­heid mogelijk, aangezien databases moei­te­loos over meerdere servers kunnen worden verdeeld zonder dat dit ten koste gaat van de func­ti­o­na­li­teit. Bovendien kunt u met MongoDB eenvoudig kopieën van uw database maken en deze be­schik­baar stellen aan ver­schil­len­de servers, waardoor de vei­lig­heid en be­schik­baar­heid van uw gegevens op lange termijn wordt ge­waar­borgd. Het do­cu­ment­ge­o­ri­ën­teer­de da­ta­ba­se­pro­gram­ma laat ook in­druk­wek­ken­de mo­ge­lijk­he­den zien als het gaat om het ag­gre­ge­ren van gegevens, of deze nu uit één bron of uit meerdere bronnen afkomstig zijn.

MongoDB is ideaal voor web­pro­jec­ten met de volgende kenmerken:

  • Schaal­baar­heid: naarmate uw web­pro­ject groeit, neemt het aantal verzoeken doorgaans toe, waardoor er hogere eisen aan de database worden gesteld.
  • Be­schik­baar­heid: u hebt on­on­der­bro­ken toe­gan­ke­lijk­heid nodig voor uw we­bap­pli­ca­tie, zelfs in het geval van een ser­ver­sto­ring.
  • Flexi­bi­li­teit: uw project moet te allen tijde dynamisch kunnen worden aangepast.

Weet u niet zeker welk da­ta­ba­se­mo­del het meest geschikt is voor uw web­pro­ject? Dat geeft niet, want u hoeft niet slechts één model te kiezen. Het is mogelijk om ver­schil­len­de soorten da­ta­ba­se­mo­del­len te com­bi­ne­ren, en het kiezen van meer dan één model kan de meest geschikte keuze zijn voor uw pro­ject­ve­r­eis­ten.

Ga naar hoofdmenu