De release van de documentgeoriënteerde database MongoDB 5.0 is gepresenteerd, die zich bevindt tussen snelle en schaalbare systemen die gegevens in sleutel/waarde-indeling verwerken, en relationele databases die functioneel zijn en gemakkelijk query's kunnen opstellen. De code van MongoDB is geschreven in C++ en wordt verspreid onder de SSPL-licentie, die gebaseerd is op de AGPLv3-licentie, maar niet open source is, aangezien het een discriminerende vereiste bevat voor de distributie onder de SSPL-licentie, niet alleen voor de code van de applicatie zelf, maar ook voor de bronbestanden van alle componenten die betrokken zijn bij het aanbieden van de cloudservice.
MongoDB ondersteunt het opslaan van documenten in een JSON-achtig formaat, heeft een vrij flexibele taal voor het opstellen van queries, kan indexen creëren voor verschillende opgeslagen attributen, biedt effectieve opslag voor grote binaire objecten, ondersteunt logging van bewerkingen voor het wijzigen en toevoegen van gegevens in de database, kan werken volgens het Map/Reduce-paradigma, en ondersteunt replicatie en de opbouw van fouttolerante configuraties.
In MongoDB zijn er ingebouwde middelen voor segmentatie (distributie van een dataset over servers op basis van een bepaalde sleutel), waarmee in combinatie met replicatie een horizontaal schaalbare opslagcluster kan worden opgebouwd, waarin geen enkelvoudig punt van falen bestaat (de storing van enige node heeft geen invloed op de werking van de database), ondersteunt automatisch herstel na een storing en belastingsoverdracht van een defecte node. Het uitbreiden van de cluster of het transformeren van een de server cluster kan plaatsvinden zonder de werking van de database te stoppen, door simpelweg nieuwe machines toe te voegen.
Kenmerken van de nieuwe release:
- Collections voor gegevens in de vorm van tijdreeksen (time series collections) zijn toegevoegd, geoptimaliseerd voor het opslaan van waarden van parameters die op bepaalde tijdstippen worden geregistreerd (tijd en de set van bij deze tijd behorende waarden). De behoefte aan het opslaan van dergelijke gegevens ontstaat in monitoringsystemen, financiële platforms en sensorstatusopnamesystemen. Het werken met tijdreeksgegevens gebeurt als met gewone documentcollections, maar de indexen en het opslaan hiervan zijn geoptimaliseerd voor tijdgebonden data, wat de schijfruimte aanzienlijk vermindert, de vertraging bij query-uitvoering vermindert en de mogelijkheid biedt voor realtime gegevensanalyse.
MongoDB beschouwt dergelijke collecties als schrijfbare, niet-gematerialiseerde weergaven die zijn gemaakt op basis van interne collecties en die bij het invoeren automatisch tijdreeksgegevens groeperen in een geoptimaliseerd opslagformaat. Elke aan de tijd gebonden invoer wordt bij een query beschouwd als een afzonderlijk document. Gegevens worden automatisch gesorteerd en geïndexeerd op tijd (er is geen behoefte aan het expliciet aanmaken van tijdindexen).
- Ondersteuning voor vensterfuncties (analytische functies) is toegevoegd, waarmee acties kunnen worden uitgevoerd op een bepaalde set documenten in een collectie. In tegenstelling tot aggregatiefuncties, comprimeren vensterfuncties de gegroepeerde set niet, maar aggregëren ze op basis van de inhoud van het "venster", dat één of meer documenten uit de resultaatset omvat. Voor manipulatie van een subset documenten is de nieuwe fase $setWindowFields geïntroduceerd, waarmee bijvoorbeeld verschillen tussen twee documenten in de collectie kunnen worden vastgesteld, verkoopcijfers kunnen worden berekend en informatie in complexe tijdreeksen kan worden geanalyseerd.
- Ondersteuning voor API-versionering is toegevoegd, waardoor toepassingen aan een bepaalde status van de API kunnen worden gekoppeld en risico's verbonden aan mogelijke incompatibiliteit bij de overgang naar nieuwe versies van de DBMS worden uitgesloten. API-versionering scheidt de levenscyclus van de applicatie van de levenscyclus van de DBMS en stelt ontwikkelaars in staat om wijzigingen aan te brengen in de applicatie op het moment dat nieuwe mogelijkheden nodig zijn, in plaats van wanneer de overgang naar een nieuwe versie van de DBMS wordt uitgevoerd.
- Ondersteuning voor het Live Resharding-mechanisme is toegevoegd, waarmee de gebruikte segmentatiekeys (shard keys) on-the-fly kunnen worden gewijzigd zonder de DBMS te stoppen.
- De mogelijkheden voor client-side veldniveauversleuteling (Client-Side Field Level Encryption) zijn uitgebreid. Er is nu de mogelijkheid om auditfilters en de rotatie van x509-certificaten opnieuw in te stellen zonder de werking van de DBMS te onderbreken. Ondersteuning voor het instellen van ciphers voor TLS 1.3 is toegevoegd.
- Een nieuwe command-line shell voor MongoDB (mongosh) is aangeboden, die zich als een apart project ontwikkelt, geschreven in JavaScript met behulp van het Node.js-platform en wordt verspreid onder de Apache 2.0-licentie. MongoDB Shell biedt de mogelijkheid om verbinding te maken met de DBMS, configuraties te wijzigen en verzoeken te verzenden. Slimme autocompletion van methoden, commando's en MQL-expressies wordt ondersteund, evenals syntaxis-highlighting, contextuele hints, parsing van foutberichten en de mogelijkheid om functionaliteit uit te breiden via add-ons. De oude CLI-shell "mongo" is obsoleet verklaard en zal in een toekomstige release worden verwijderd.

- Nieuwe operators zijn toegevoegd: $count, $dateAdd, $dateDiff, $dateSubtract, $sampleRate en $rand.
- Het gebruik van indexen wordt gegarandeerd bij het gebruik van de operators $eq, $lt, $lte, $gt en $gte binnen de $expr-expressie.
- In de commando's aggregate, find, findAndModify, update, delete en de methoden db.collection.aggregate(), db.collection.findAndModify(), db.collection.update() en db.collection.remove() is ondersteuning voor de optie 'let' geïmplementeerd om een lijst van variabelen te definiëren, waardoor de commando's leesbaarder worden dankzij de scheiding van variabelen van de tekst van de query.
- De operaties find, count, distinct, aggregate, mapReduce, listCollections en listIndexes worden nu niet geblokkeerd als gelijktijdig een operatie wordt uitgevoerd die een exclusieve blokkering op de documentcollectie instelt.
- In het kader van het initiatief om ongepaste termen te vermijden, zijn het team isMaster en de methode db.isMaster() omgedoopt tot hello en db.hello().
- Het schema voor de nummering van versies is gewijzigd en er is overgestapt op een voorspelbare releasekalender. Er zal eens per jaar een significante release worden gevormd (5.0, 6.0, 7.0), elke drie maanden tussen-releases met nieuwe functies (5.1, 5.2, 5.3) en indien nodig corrigerende updates met bugfixes en beveiligingspatches (5.1.1, 5.1.2, 5.1.3). In de tussen-releases zal functionaliteit worden opgesteld voor de volgende significante release; dat wil zeggen, in MongoDB 5.1, 5.2 en 5.3 zullen nieuwe mogelijkheden worden gecreëerd voor de release van MongoDB 6.0.
Bron: opennet.ru

