Bij het starten van een nieuw project is een van de dingen waar ontwikkelaars mee kunnen worstelen het kiezen van een stack. De juiste technologie kiezen om een probleem op te lossen kan een zenuwslopende ervaring zijn. Vooral databases kunnen een uitdaging zijn om uit te kiezen, vooral als je onduidelijk bent over het gebruik van je gegevens.

Omdat databases de basis vormen van softwareontwikkeling en verschillende doelen dienen voor het bouwen van projecten van alle soorten en maten, helpt het om het belang van databases te begrijpen om een geschikte databasestructuur voor je stack te kiezen.

Dit artikel zal je helpen de juiste open-source database te kiezen door de verschillen te verkennen tussen twee geweldige databasebeheersystemen: MongoDB en PostgreSQL.

Wat is MongoDB?

Het MongoDB logo, met de tekst naast een rechtopstaand, groen blad.
MongoDB logo. (Beeldbron: Mecdata)

MongoDB is een cross-platform, open-source niet-relationele database, uitgebracht op 11 februari 2009. Het staat bekend om het gebruik van JSON-achtige documenten met optionele schema’s.

MongoDB wordt beschouwd als een van de meest geavanceerde clouddatabasediensten op de markt, met ongeëvenaarde datamobiliteit en -distributie over Azure, AWS en Google Cloud, ingebouwde automatisering voor workload en resource optimalisatie.

Je kunt er ook in enkele minuten een clouddatabase mee maken met behulp van de Atlas CLI, UI, of een infrastructure-as-a-service (IaaS) resourceprovider.

Met MongoDB Atlas kun je je applicatie draaiende houden om het toenemende verkeer bij te houden terwijl nieuwe features hun weg vinden naar je pijplijn. MongoDB Atlas voorziet zijn gebruikers van geavanceerde databaseoptimalisatietools zodat je altijd over de databaseresources beschikt die je nodig hebt om te blijven bouwen.

Belangrijkste features

Hier zijn een paar belangrijke features van MongoDB die het een plaats verdienen onder de beste niet-relationele databases op de markt:

  • Prestatieadvies: Naarmate je applicaties evolueren, helpt MongoDB je met de beste on-demand schema-ontwerppraktijken voor piekefficiëntie.
  • Multi-cloud clusters: Met MongoDB kun je veerkrachtige en krachtige applicaties mogelijk maken die twee of meer clouds tegelijk benutten.
  • Belastingbalancering: MongoDB faciliteert controle concurrency om meerdere clientverzoeken parallel aan andere servers af te handelen. Dit kan de belasting van elke server helpen verminderen, terwijl de gegevensconsistentie en uptime gewaarborgd blijven, en maakt schaalbare applicaties mogelijk.

Use cases

MongoDB wordt wereldwijd door duizenden organisaties gebruikt voor gegevensopslag of als databaseservice voor hun applicaties.

MongoDB speelt een centrale rol in:

  • Contentmanagement: Met MongoDB kun je elk type content serveren en opslaan, elke feature bouwen en elk soort gegevens verweven binnen één enkele database. MongoDB maakt je klaar voor succes met commodity hardware en productievere teams, zodat je project 10% kost van wat het zou moeten kosten, terwijl het alle features biedt die nodig zijn om contentrijke apps te bouwen.
  • Betalingen: Als je een nieuw betalingsproduct ontwikkelt, zal de gegevensflexibiliteit van MongoDB ervoor zorgen dat dat nieuwe product snel op de markt komt, zonder dat je je zorgen hoeft te maken over onnodige complexiteit zoals gegevensfragmentatie. Zelfs als je leiding geeft aan een volwassen onderneming die haar betalingsecosysteem probeert te moderniseren, kun je de flexibiliteit van MongoDB benutten om het te gebruiken als een geconsolideerde operationele datalaag, waardoor je nieuwe producten en diensten kunt bouwen met behulp van bestaande gegevens zonder een riskante cookie-cutter oplossing.
  • Personalisatie: Met MongoDB kun je de ervaringen van miljoenen klanten in realtime personaliseren, met features als gerichte aanbiedingen, aangepaste startpagina’s en aanmelding bij social medianetwerken. Je kunt zelfs complexe queries direct tegen je gegevens uitvoeren zonder je zorgen te maken over transformeren, extraheren en laden.
  • Mainframe offloading: Met MongoDB kun je gemakkelijk werklasten van het mainframe afhalen. Mainframe offloading is het proces van repliceren van veelgebruikte mainframegegevens naar een operationele datalaag (ODL) gebouwd op MongoDB, waartegen operaties van consumerende applicaties kunnen worden omgeleid.

Wat is PostgreSQL?

Het PostgreSQL logo, met de tekst onder een gestileerde blauwe olifantenkop omlijnd in zwart-wit.
PostgreSQL logo. (Beeldbron: Uberconf)

Ondanks de populariteit van NoSQL databases blijven relationele databases relevant voor diverse applicaties vanwege hun robuustheid en sterke querymogelijkheden.

Relationele databases zijn geweldig in het uitvoeren van complexe queries en op gegevens gebaseerde rapportages in gevallen waarin de gegevensstructuur niet vaak verandert. Open-source databases zoals PostgreSQL bieden een kosteneffectief alternatief als een stabiele productiegrade database vergeleken met zijn gelicentieerde tijdgenoten zoals SQL Server en Oracle.

PostgreSQL is een zeer stabiel databasebeheersysteem, ondersteund door meer dan 20 jaar ontwikkeling door de community, wat heeft geleid tot een hoog niveau van integriteit, veerkracht en correctheid. Je kunt PostgreSQL gebruiken als primair datawarehouse of gegevensbron voor diverse mobiele, geospatiale, analytische en webtapplicaties.

PostgreSQL heeft ook geen licentiekosten, waardoor het risico van over-deployment wegvalt. De toegewijde groep enthousiastelingen en contributors vinden regelmatig bugs en oplossingen, die bijdragen aan de algemene veiligheid van het databasesysteem.

Belangrijkste features

Dit zijn enkele opvallende features van PostgreSQL die het tot een van de meest gebruikte databases van vandaag maken:

  • Niet-atomaire kolommen: Een van de primaire beperkingen van een relationeel model is dat kolommen atomair moeten zijn. PostgreSQL heeft deze beperking echter niet en staat toe dat kolommen subwaarden hebben waar query’s gemakkelijk toegang toe hebben.
  • Ondersteuning voor JSON gegevens: De mogelijkheid om JSON te query’en en op te slaan maakt PostgreSQL ook geschikt voor NoSQL workloads – bijvoorbeeld als je een database ontwerpt om gegevens van meerdere sensoren op te slaan en je niet zeker weet welke specifieke kolommen je nodig hebt om alle soorten sensoren te ondersteunen. In dit scenario kun je een tabel zo construeren dat een van de kolommen JSON is om de voortdurend veranderende of ongestructureerde gegevens op te slaan.
  • Vensterfuncties: PostgreSQL vensterfuncties spelen een integrale rol waardoor ze favoriet zijn voor analytische applicaties. Met vensterfuncties kun je functies uitvoeren die meerdere rijen beslaan en hetzelfde aantal rijen teruggeven. Vensterfuncties verschillen van aggregaatfuncties in die zin dat aggregaatfuncties na aggregatie slechts één enkele rij kunnen teruggeven.

Use cases

Hier zijn enkele toepassingen waarin PostgreSQL van pas komt:

  • Federatieve hubdatabase: PostgreSQL’s JSON ondersteuning en foreign data wrappers maken het mogelijk om verbinding te maken met andere datastores – inclusief NoSQL types – en te dienen als een federatieve hub voor polyglot databasesystemen.
  • Wetenschappelijke gegevens: Wetenschappelijke en onderzoeksprojecten kunnen terabytes aan gegevens genereren, die zo efficiënt en voordelig mogelijk beheerd moeten worden. PostgreSQL biedt een prachtige SQL engine met robuuste analytische mogelijkheden, waardoor het verwerken van grote hoeveelheden gegevens een fluitje van een cent wordt.
  • Productie: Diverse industriële fabrikanten van wereldklasse maken gebruik van PostgreSQL om innovatie te versnellen en groei te stimuleren door klantgerichte processen, terwijl de prestaties van de toeleveringsketen worden geoptimaliseerd door PostgreSQL te gebruiken als backend voor opslag.
  • LAPP open-source stack: PostgreSQL kan dynamische apps en websites draaien als onderdeel van een robuust alternatief voor de LAMP stack. LAPP staat voor Linux, Apache, PostgreSQL, Python, PHP en Perl.

MongoDB vs PostgreSQL: Onderlinge vergelijking

De echte vraag is niet MongoDB vs PostgreSQL, maar eerder de beste documentendatabase vs de beste relationele database.

Vaak hebben projectleiders aan het begin van een ontwikkelingsproject een goed beeld van de use case, maar geen duidelijkheid over de specifieke applicatiemogelijkheden die hun gebruikers en bedrijf nodig hebben. Dan moeten ze uiteindelijk inzetten op een keuze en hopen dat die het beste uitpakt.

In de volgende paragraaf zullen we de verschillen tussen MongoDB en PostgreSQL toelichten om je te helpen die beslissing gemakkelijk te nemen. Onze informatie is gebaseerd op belangrijke factoren als architectuur, ACID compliance, uitbreidbaarheid, replicatie, beveiliging en ondersteuning, om er een paar te noemen.

Laten we beginnen!

ACID compliance

Een van de belangrijkste features van relationele databases die het schrijven van applicaties eenvoudiger maken is ACID transacties. Wat betreft de isolatieniveaus binnen databasetransacties gebruikt PostgreSQL standaard het read committed isolatieniveau. Het staat gebruikers ook toe om het read committed isolatieniveau af te stemmen op het serialiseerbare isolatieniveau.

Belangrijk om op te merken is dat transacties het mogelijk maken om verschillende wijzigingen in een database in een groep door te voeren of terug te draaien. Daarom zouden in een relationele database de gegevens gemodelleerd worden over onafhankelijke parent-child tabellen in een tabelvormig schema.

Documentdatabases daarentegen hebben het gemakkelijker om transacties uit te voeren, omdat ze gegevens verzamelen in een document en omdat lezen en schrijven een atomaire operatie is, is er geen transactie met meerdere documenten nodig.

MongoDB ondersteunt volledige isolatie terwijl een document wordt bijgewerkt. Eventuele fouten zorgen ervoor dat de update operatie wordt teruggedraaid, waardoor de wijziging wordt teruggedraaid en de clients een consistent beeld van het document krijgen.

MongoDB ondersteunt ook databasetransacties over meerdere documenten, waardoor stukjes gerelateerde wijzigingen als groep kunnen worden teruggedraaid of vastgelegd. Dankzij de mogelijkheid tot multi-document transacties is MongoDB een van de weinige databases die de flexibiliteit, snelheid en kracht van het documentmodel combineert met de ACID garanties van traditionele databases.

Architectuur/documentmodel

Het documentmodel van MongoDB stelt een gebruiker in staat om op natuurlijke wijze objecten binnen applicatiecode in kaart te brengen, waardoor het voor full-stackontwikkelaars gemakkelijker is om te leren en te gebruiken. Documenten bieden je de mogelijkheid om hiërarchische relaties af te beelden om arrays en andere meer geavanceerde structuren gemakkelijk op te slaan.

Door gegevens op te slaan in velden als nestedsubdocumenten en arrays, kan gerelateerde informatie in JSON documenten bij elkaar worden opgeslagen voor snelle querytoegang via de MongoDB querytaal.

Met MongoDB kun je gegevens opslaan als documenten in een binaire representatie die bekend staat als binair JSON (BSON). Velden kunnen verschillen op basis van het document waar het om gaat, daarom is het niet nodig om de structuur van documenten aan het systeem te verklaren – documenten zijn zelfbeschrijvend.

Als je een nieuw veld aan een document moet toevoegen, dan kan het veld worden gegenereerd zonder dat dit invloed heeft op andere documenten in de collectie of een ORM of een centrale systeemcatalogus moet bijwerken.

MongoDB biedt je ook de mogelijkheid van schemavalidatie om controles op gegevensbeheer af te dwingen over elke verzameling. Deze flexibiliteit komt van pas bij het samenvoegen van informatie uit meerdere ongelijksoortige bronnen of bij het onderbrengen van wijzigingen in documenten in de loop der tijd, vooral als de nieuwe applicatiefunctionaliteit consequent wordt ingezet.

PostgreSQL herbergt een clientserver architectuurmodel dat bestaat uit de volgende twee processen:

  • Clientzijde proces: Dit zijn de applicaties die door gebruikers worden gebruikt voor interactie met de database. Meestal heeft het een eenvoudige gebruikersinterface en wordt het gebruikt om via API’s te communiceren tussen de gebruiker en de database.
  • Serverzijde proces: Dit is de “Postgres” applicatie die operaties, verbindingen, dynamische en statische middelen aanpakt. Een draaiende PostgreSQL site wordt afgehandeld door een Postmaster, een centraal coördinerend proces. De postmaster daemon is verantwoordelijk voor:
    • Herstel uitvoeren
    • De server initialiseren
    • Afsluiten van de server
    • Achtergrondprocessen uitvoeren
    • Verbindingsverzoeken van nieuwe cliënten beheren

Uitbreidbaarheid

Uitbreidbaarheid is eenvoudigweg de kwaliteit waarmee het ontworpen is om nieuwe mogelijkheden of functionaliteiten toe te voegen.

PostgreSQL ondersteunt uitbreidbaarheid op verschillende manieren, waaronder opgeslagen functies en procedures. Wat PostgreSQL uitbreidbaar maakt zijn de catalogusgestuurde operaties.

Relationele databases slaan informatie over tabellen, databases, kolommen, enz. vaak op in systeemcatalogi. Deze “data dictionaries” zien er voor de gebruiker uit als tabellen, maar ze bevatten informatie die intern door het databasesysteem is opgeslagen.

PostgreSQL slaat de informatie over de kolommen en tabellen op, samen met informatie over de aanwezige gegevenstypen, functies en toegangsmethoden.

Er is meer: PostgreSQL kan ook door de gebruiker geschreven code in zichzelf opnemen via dynamisch laden. Vaak hebben gebruikers bepaalde functionaliteit nodig die via gedeelde bibliotheken kan worden geïmplementeerd. Gebruikers kunnen gewoon het codebestand opgeven en PostgreSQL laadt het zoals nodig, waardoor het uniek geschikt is voor snelle prototyping van nieuwe applicaties.

Aan de andere kant is MongoDB uiteindelijk uitbreidbaar geworden, zodat gebruikers hun functies kunnen maken en gebruiken binnen het framework. Het is gelijk aan user-defined functions (UDF) waarmee gebruikers van relationele databases (zoals PostgreSQL) SQL statements kunnen uitbreiden.

Bovendien ondersteunen zowel PostgreSQL als MongoDB verschillende extensies en plugins zoals Adminer voor databasebeheer.

Samenwerking en wendbaarheid

MongoDB heeft een documentmodel, waardoor samenwerking en ontwikkeling gemakkelijker en sneller uit te voeren zijn. MongoDB gebruikt in wezen JSON of BSON om zijn gegevens als documenten op te slaan.

BSON bevat verschillende gegevenstypen die niet voorkomen in JSON gegevens, zoals DateTime, long, int, en byte arrays die helpen om efficiënter met gegevens om te gaan, omdat het meer specifiek zou zijn volgens het gegevenstype in plaats van alles te behandelen als een universeel “nummer” type. Het laat queries sneller uitvoeren omdat het in een serialisatieformaat is dat JSON-achtige documenten effectief archiveert.

BSON slaat de sleutels over die niet bruikbaar zijn voor de query, waardoor gegevens sneller kunnen worden opgevraagd. Een gebruiker kan de structuur van het document verder definiëren en het verder ontwikkelen door nieuwe velden te introduceren, gegevens te bewerken, of het verder te ontwikkelen wanneer hij dat nodig acht.

Deze flexibiliteit is een enorm voordeel voor MongoDB, omdat het helpt vertragingen te voorkomen die ontstaan doordat de beheerder gevraagd wordt de gegevensdefinitie taalverklaringen te herstructureren en dan weer van voren af aan te beginnen door een database opnieuw te maken of te laden.

MongoDB maakt het ook gemakkelijk om samen te werken tussen ontwikkelaars of teams, daarom is er geen bemiddeling of ingewikkelde communicatie tussen teams nodig.

Als het gaat om samenwerking bevat PostgreSQL privileges op gebruikersniveau, rol-inheritance en privileges op tabelniveau. Je kunt gebruikers beheren en hen lees- en schrijfrechten toekennen.

Bovendien kun je de toegang tot gegevens van verschillende groepen of gebruikers controleren met de auditingoptie, die een extra beveiligingslaag biedt. PostgreSQL is echter niet zo snel als MongoDB, omdat het een relationele database is die gegevens opslaat in rijen en kolommen.

Foreign keyondersteuning

Een belangrijk kenmerk dat MongoDB onderscheidt van PostgreSQL is de manier waarop de gegevens worden opgeslagen.

Omdat het niet relationeel is, gebruikt MongoDB collecties in plaats van tabellen. Een foreign key is eenvoudigweg een set attributen in een tabel die verwijst naar de primaire sleutel van een andere tabel. De foreign key verbindt deze twee tabellen met elkaar.

Omdat er geen tabellen zijn in MongoDB, zijn er ook geen foreign keys in MongoDB; dus ook geen foreign key constraints. MongoDB heeft echter wel een DBRef standaard die helpt de aanmaak van de verwijzingen te standaardiseren.

PostgreSQL daarentegen ondersteunt foreign keys, omdat het SQL compliant is. Door foreign key constraints in te schakelen kan PostgreSQL het invoegen van ongeldige gegevens in foreign key kolommen tegengaan.

Partitioneren en sharding

Partitioneren en sharding gaan in wezen over het opdelen van grote datasets in kleinere subsets. Sharding houdt in dat de gegevens worden opgeslagen op meerdere computers, terwijl partitionering deze gegevens groepeert binnen een enkele database instantie.

MongoDB is schaalbaar omdat de gegevens worden gepartitioneerd over instanties binnen het cluster. Het splitst de documenten niet in stukken omdat het onafhankelijke eenheden zijn die het gemakkelijker maken ze te verdelen over verschillende servers terwijl de gegevens lokaal bewaard blijven.

Via de MongoDB Atlas clouddienst kunnen gegevens met gemak over verschillende regio’s worden verspreid. Je kunt er ook voor kiezen om ze voortdurend in specifieke regio’s of wereldwijde regio’s op te slaan om te zorgen voor minder latentie.

Sinds versie 5.0 bevat MongoDB een “live” reshardingfeature die als een grote tijdsbesparing komt omdat je alleen een beleid hoeft in te stellen. De database kan de gegevens automatisch herverdelen als het zover is.

Voorheen kon je dat doen zonder het systeem neer te halen, maar het proces was ingewikkeld en riskant. MongoDB had weliswaar enige tijd wereldwijde geopartitionering, maar de gegevens groeiden in verschillende landen in verschillend tempo. Live resharding zou gunstig kunnen zijn voor gegevens die lokaal moeten blijven binnen een land.

Anderzijds ondersteunt PostgreSQL declaratieve partitionering, wat in wezen een manier is om aan te geven hoe een tabel in partities verdeeld moet worden. De tabel die verdeeld wordt heet de gepartitioneerde tabel, de specificatie bestaat uit de partitioneringsmethode, en de lijst van kolommen of expressies die gebruikt moet worden heet de partitiesleutel.

Je kunt partitionering implementeren via een bereik, waarbij de tabel kan worden gepartitioneerd door bereiken gedefinieerd door een sleutelkolom of verzameling kolommen, zonder overlap tussen de bereiken van waarden die aan verschillende partities zijn toegewezen.

Je kunt ook lijstpartitionering implementeren, waarbij de tabel wordt gepartitioneerd volgens de opgegeven sleutelwaarden.

Replicatie

Replicatie is het proces van het maken van een kopie van dezelfde dataset op meer dan één server. Het stelt databasebeheerders in staat hoge gegevensredundantie en hoge beschikbaarheid van gegevens te bieden.

Voor MongoDB wordt dit bereikt door gebruik te maken van een “replicaset” – een gesynchroniseerd cluster bestaande uit drie of meer servers die onderling gegevens blijven repliceren. Dit biedt redundantie en bescherming tegen eventuele downtime die kan optreden bij een geplande onderbreking voor onderhoud of een systeemstoring, waardoor de fouttolerantie van de database toeneemt.

Replicasets kunnen ook over verschillende datacentra worden geïmplementeerd, omdat ze van pas komen bij regionale uitval. Dit kan worden gedaan door MongoDB Atlas, die het bouwen en configureren van deze clusters eenvoudiger en sneller maakt.

PostgreSQL biedt primaire-secundaire replicatie. Write-ahead logs maken het delen van de gemaakte wijzigingen met de replicanodes mogelijk, waardoor asynchrone replicatie mogelijk wordt. Andere soorten replicaties zijn logische replicatie, streaming replicatie en fysieke replicatie.

Indexen

Indexen zijn objecten of structuren waarmee specifieke rijen of gegevens sneller kunnen worden opgehaald.

PostgreSQL levert een reeks unieke indextypes om efficiënt met elke queryworkload om te gaan. De indexeringstechnieken omvatten B-tree, multicolumn en expressies. Verder kunnen gedeeltelijke en geavanceerde indexeringstechnieken zoals GiST, KNN Gist, SP-Gist, GIN, BRIN, dekkende indexen en bloomfilters ook in PostgreSQL worden geïmplementeerd.

Aan de andere kant kun je in MongoDB gegevens opslaan in elke structuur die snel toegankelijk is door indexering, ongeacht hoe diep genest in arrays of subdocumenten.

Taal en syntaxis

Zowel MongoDB als PostgreSQL ondersteunen verschillende talen.

MongoDB biedt driverondersteuning voor enkele van de beste databasetalen zoals Python, R, Java, Scala, C, C++, C#, Node.js, en nog veel meer. Deze MongoDB bibliotheken en stuurprogramma’s ondersteunen alle features van MongoDB, en geven hoge prestaties en schaalbaarheid in alle applicaties.

PostgreSQL ondersteunt verschillende procedurele talen met een basisdistributie zoals PL/pgSQL, PL/Python, PL/Perl, en PL/Tcl samen met andere talen die buiten de kerndistributie van PostgreSQL worden ontwikkeld en onderhouden zoals PL/Java, PL/PHP, en PL/Ruby.

Normalisatie

Normalisatie is het structureren van een relationele database om redundantie van gegevens te verminderen, anomalieën in de wijziging van gegevens te minimaliseren, en de integriteit van gegevens te verbeteren.

MongoDB kan omgaan met zowel genormaliseerde als gedenormaliseerde gegevensmodellen (ook wel nested modellen genoemd).

Met nested modellen kunnen applicaties gerelateerde stukken informatie opslaan in hetzelfde databaserecord, wat betere prestaties oplevert voor leesbewerkingen en de mogelijkheid om gerelateerde gegevens op te halen in een enkele databasebewerking.

Bovendien kun je gerelateerde gegevens ook bijwerken in een enkele atomaire schrijfoperatie, terwijl applicaties minder query’s hoeven uit te voeren om gemeenschappelijke operaties te voltooien. Documenten in MongoDB voor het nested datamodel moeten kleiner zijn dan de maximale BSON documentgrootte (16 MB).

Genormaliseerde datamodellen beschrijven relaties met behulp van verwijzingen tussen documenten. Dit zou gunstig zijn om te gebruiken wanneer insluiten kan leiden tot duplicatie van gegevens, maar onvoldoende voordelen voor de leesprestaties opwegen tegen de gevolgen van de duplicaties.

Het denormalisatieproces veroorzaakt echter meestal een hoog geheugengebruik wanneer eerder genormaliseerde gegevens in een database worden gegroepeerd om de prestaties te verhogen.

PostgreSQL schema’s hebben een geïdentificeerde relatie. De structuur kan worden geïdentificeerd met een 1:1, 1:many, of many:1 relatie. Het normaliseren van gegevens kan zeer voordelig zijn, omdat het overbodige kopieën van gegevens verwijdert en zo ook de integriteit waarborgt.

Prestaties

Het beoordelen van de prestaties van twee verschillende databasesystemen is een uitdaging, omdat zowel MongoDB als PostgreSQL verschillende manieren hebben om de gegevens op te slaan en op te vragen.

MongoDB is gebouwd om horizontaal uit te schalen, omdat het zijn kracht vaak combineert met extra machines en niet afhankelijk is van rekenkracht. Het is in staat enorme applicaties aan te drijven, ongeacht de omvang van de gegevens of de gebruikers.

MongoDB is ook geschikt voor use cases die een snelle uitvoering van query’s vereisen en een grote hoeveelheid gegevens aankunnen. Het kan in totaal honderden machines bevatten.

Sinds MongoDB 4.4 leveren queries uitgevoerd tegen replicasets betere en voorspelbare prestaties door “hedged” reads. Deze reads worden naar meerdere nodes binnen de replica set geleid, totdat de snelste node antwoordt.

PostgreSQL, hoewel niet zo snel als MongoDB in termen van de ruwe invoersnelheid, blinkt uit in termen van ACID compliance. Transacties worden veilig en betrouwbaar verwerkt, waarbij een hele transactie kan mislukken in plaats van een gedeeltelijk geslaagde write uit te voeren.

MongoDB is pas onlangs (met versie 4) begonnen met het ondersteunen van ACID transacties, vergelijkbaar met SQL databases.

In tegenstelling tot MongoDB is PostgreSQL afhankelijk van een schaalvergrotingsstrategie (vertical scaling) voor datavolumes en het schalen van writes. Dat gebeurt door meer hardwareresources zoals schijven, CPU’s en geheugen toe te voegen aan een bestaande databasenode.

PostgreSQL heeft echter enkele inspanningen geleverd om de prestaties te optimaliseren, waaronder een volwassen queryplanner, just-in-time (JIT) compilatie van expressies, tabelpartitionering en parallellisatie van leesqueries.

Prijs

PostgreSQL is volledig gratis en open-source. Daarom kan iedereen de mogelijkheden ervan gebruiken en de code zo nodig gemakkelijk aanpassen.

MongoDB is ook een open-source programma. MongoDB heeft echter andere opties zoals de Enterprise en Atlas (voor de cloud), die verschillende prijzen hebben. Voor de MongoDB Enterprise editie wordt een on-premise prijsmodel aangeboden.

Mongo RealmDB is gratis beschikbaar voor alle Atlas gebruikers voor evaluatie en licht gebruik, waarmee ontwikkelaars mobiele toepassingen kunnen bouwen en uitbrengen.

MongoDB Realm prijsopties berekenen, synchroniseren, aanvragen en overbrengen in tabelvorm.
Prijsopties voor Mongo RealmDB. (Image Source: MongoDB Pricing)

Gegevensmigratie kan ook overhead genereren; dit is echter standaard, ongeacht de database die je in je systeem hebt geïmplementeerd.

Queryverwerking

PostgreSQL gebruikt het relationele databasemodel dat afhankelijk is van het opslaan van gegevens in tabellen en het gebruik van de gestructureerde querytaal (SQL) voor databasetoegang. SQL commando’s kunnen worden ingevoerd met de PostgreSQL terminal psql. Het heeft een groot object faciliteit, die streamstijl toegang biedt tot gebruikersgegevens die zijn opgeslagen in een speciale groot-object structuur.

Voordat de gegevens worden toegevoegd, moet het databaseschema worden opgebouwd om een duidelijk inzicht te krijgen in de gegevensrelaties om de queries te kunnen verwerken. Gerelateerde informatie kan worden opgeslagen in aparte tabellen in de database. Deze zijn toegankelijk via foreign keys en joins.

Het kan moeilijk zijn om de structuur van de database aan te passen als hij eenmaal geladen is. Het vereist verschillende teams in ontwikkeling, ops, en de databasebeheerder om de wijzigingen in de structuur zorgvuldig te coördineren.

Aan de andere kant hoeft de gegevensstructuur van MongoDB niet vooraf gepland te worden, omdat het in wezen omgaat met ongestructureerde gegevens. De gegevensstructuur is ook veel gemakkelijker aan te passen.

Ontwikkelaars kunnen kiezen wat essentieel is in de applicatie en de benodigde wijzigingen aanbrengen. MongoDB gebruikt MQL, waarmee met documenten in MongoDB gewerkt kan worden en gegevens eruit gehaald kunnen worden, terwijl het de flexibiliteit en kracht levert die SQL doet.

MongoDB verwerkt gegevens als JSON documenten. Je kunt ook naar de velden binnen het JSON document query’s uitvoeren. MongoDB is dus heel bruikbaar in gevallen waarin je documenten wilt opslaan binnen een flexibel gegevensveld.

Terwijl PostgreSQL de functie GROUP_BY gebruikt om geaggregeerde query’s te verwerken en uit te voeren, gebruikt MongoDB meestal aggregatiepijplijnen om zijn query’s te verwerken.

Een groot nadeel van MongoDB is echter dat je niet gemakkelijk tabellen kunt joinen. In PostgreSQL kan dat eenvoudig met een JOIN statement.

MongoDB heeft geprobeerd dit op te lossen door multi-dimensionale datatypes te introduceren waarbij je de ene documentstore binnen de andere kunt insluiten. Het is echter ongeorganiseerd en niet zo elegant als de eenvoudige join functie die PostgreSQL bevat.

Beveiliging

Als het op beveiliging aankomt, overtroeft PostgreSQL MongoDB. De strakke regels voor de structuur van de database maken PostgreSQL tot een zeer veilige database, waardoor hij betrouwbaar gebruikt kan worden voor banksystemen.

PostgreSQL biedt tal van authenticatiemethoden, waaronder een pluggable authentication module (PAM) en lightweight directory access protocol (LDAP), die het aanvalsoppervlak van de servers verkleinen. Het zorgt ook voor bescherming op serverniveau door hostgebaseerde authenticatie en certificaatauthenticatie.

Verder biedt PostgreSQL gegevensversleuteling en kun je SSL certificaten gebruiken als je gegevens via het web of openbare netwerk snelwegen doorkruisen. Met PostgreSQL kun je ook de client certificate authentication (CCA) tools als optie implementeren, en cryptogene functies gebruiken om versleutelde gegevens in PostgreSQL op te slaan.

Het beveiligingsniveau van PostgreSQL kan echter per cloudsysteem verschillen, zelfs als het om dezelfde database gaat.

MongoDB Atlas presteert op dezelfde manier over de drie grootste cloudproviders, waardoor migratie tussen meerdere clouds eenvoudiger wordt.

Daarnaast heeft MongoDB encryptie op client- en veldniveau, waarmee gebruikers gegevens kunnen versleutelen voordat ze via het netwerk naar de database worden gestuurd. Maar omdat gegevens worden opgeslagen in key-value paren in één record, mist het de beveiliging waarop PostgreSQL prat gaat; MongoDB blijft vooral gericht op snelheid.

Ondersteuning en community

PostgreSQL is volledig open-source en wordt ondersteund door zijn community, wat het als een compleet ecosysteem versterkt. PostgreSQL brengt regelmatig bijgewerkte versies uit, en ontwikkelaars, enthousiastelingen of externe bedrijven bieden ondersteuning en proberen het systeem verder te ontwikkelen door bugs te repareren of kleine aanpassingen aan het databasesysteem aan te brengen.

Net als PostgreSQL heeft ook MongoDB een communityforum waarmee gebruikers in contact kunnen komen met verschillende andere gebruikers en hun algemene vragen beantwoord kunnen krijgen. De MongoDB enterprise ondersteuning kan verder een uitgebreide kennisbank omvatten met use cases, gedetailleerde tutorials, technische notities over optimalisaties en best practices.

Daarnaast zijn er online cursussen met training en certificeringen die MongoDB gratis aanbiedt.

Uitdagingen

Hoewel we de features van zowel MongoDB als PostgreSQL hebben besproken die ze een hit maken bij de ontwikkelaars, hebben ze ook een groot aantal zwakke punten.

MongoDB richt zich vooral op snelle gegevensverwerking, maar mist de gegevensbeveiliging die PostgreSQL lijkt te bezitten. Het is nogal belastend voor het geheugen, omdat het denormalisatieproces gewoonlijk veel geheugen kost.

Bovendien, omdat er geen ondersteuning is voor joins, worden MongoDB databases overladen met gegevens – soms dubbel – waardoor het geheugen zwaar belast wordt. MongoDB heeft ook geprobeerd om interpretatie in andere querytalen op te nemen als onderdeel van zijn uitbreidbaarheid; dit kan echter de prestaties vertragen, omdat de database aanvankelijk niet gebouwd was om met relationele datamodellen om te gaan.

Het vertalen van SQL naar MongoDB query’s kan extra tijd kosten om de engine te gebruiken, wat de inzet en ontwikkeling kan vertragen.

Aan de andere kant is PostgreSQL weliswaar gemakkelijk te installeren en aan te passen aan bijna alle platforms, maar de efficiëntie ervan kan per platform verschillen. Bovendien heeft het geen revisietools of rapportage instrumenten die de huidige toestand van de database kunnen laten zien. Het kan zijn dat je de database voortdurend moet controleren als iets niet gaat zoals gepland, om te voorkomen dat je een storing opmerkt als het te laat is.

PostgreSQL is ook wat langzamer omdat het zich richt op compatibiliteit. Hoewel er pogingen zijn gedaan om de snelheid van PostgreSQL te verbeteren, moet er aan de aanpassingen nog een beetje gewerkt worden.

MongoDB vs PostgreSQL: Welke moet je kiezen?

MongoDB is een niet-relationele database, terwijl PostgreSQL een relationele database is. Terwijl NoSQL databases werken aan het opslaan van gegevens in key-value paren als één record, slaan relationele databases gegevens op in verschillende tabellen.

Als je prioriteit geeft aan snellere gegevensintegratie en schaalbaarheid over meerdere servers, dan is MongoDB wellicht een geschikte keuze voor je bedrijf.

MongoDB kan het beste werken als het geïntegreerd is in een analyseplatform, omdat de snelheid van MongoDB dynamische prestaties levert die kunnen helpen het gedrag van de gebruiker in real time te volgen. Het kan ook zeer nuttig zijn voor je bedrijf als je toevallig een drukke webapplicatie hebt die niet afhankelijk is van een gestructureerd schema zoals New York Times (dat wel MongoDB gebruikt), of voor productcatalogi waar je meerdere objecten met verschillende attribuutverzamelingen moet opslaan.

Aan de andere kant is PostgreSQL een perfecte match voor gegevensanalyse en warehousing. Als je een databaseautomatiseringsprogramma bouwt of een bankapplicatie waarbij je gegevensbeveiliging en transactiewaarborgen wilt afdwingen, dan zou PostgreSQL de juiste keuze kunnen zijn.

Samenvatting

Samenvattend hebben we tot nu toe de basisinformatie van zowel PostgreSQL als MongoDB behandeld. We hebben hun geschiedenis besproken, de belangrijkste features, en wat hen verschillend maakt.

Hoewel zowel PostgreSQL als MongoDB geweldige databases zijn, komt het er uiteindelijk op aan te kiezen wat het beste bij jouw bedrijf past.

Als je moest kiezen tussen PostgreSQL en MongoDB, aan welke database geef jij de voorkeur? Laat het ons weten in de comments!

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.