È stata presentata la versione del database documentale MongoDB 5.0, che occupa una nicchia tra i sistemi rapidi e scalabili che gestiscono i dati in formato chiave/valore e i database relazionali, funzionali e facili da interrogare. Il codice di MongoDB è scritto in C++ e distribuito con licenza SSPL, che si basa sulla licenza AGPLv3, ma non è open source, in quanto contiene requisiti discriminatori per la fornitura sotto licenza SSPL non solo del codice dell'applicazione, ma anche del codice sorgente di tutti i componenti coinvolti nella fornitura del servizio cloud.
MongoDB supporta la memorizzazione di documenti in un formato simile a JSON, dispone di un linguaggio sufficientemente flessibile per la creazione di query, può creare indici per diversi attributi memorizzati, garantisce in modo efficiente la memorizzazione di grandi oggetti binari, supporta il logging delle operazioni di modifica e aggiunta dei dati nel database, può funzionare secondo la paradigmi Map/Reduce, e supporta la replica e la costruzione di configurazioni robuste.
MongoDB ha strumenti integrati per garantire il partizionamento (distribuzione del set di dati su server in base a una chiave definita), che combinati con la replica, consentono di costruire un cluster di archiviazione scalabile orizzontalmente, in cui non esiste un punto unico di failure (il guasto di un nodo non influisce sul funzionamento del database), supportando il ripristino automatico dopo un guasto e il bilanciamento del carico da nodi guasti. L'espansione del cluster o la trasformazione di uno server in cluster avviene senza interrompere il funzionamento del database, semplicemente aggiungendo nuove macchine.
Caratteristiche della nuova versione:
- Sono state aggiunte collezioni per dati in forma di serie temporali (time series collections), ottimizzate per la memorizzazione di estratti di valori di parametri registrati a intervalli di tempo specifici (tempo e insieme dei valori corrispondenti a quel tempo). La necessità di memorizzare questi dati sorge nei sistemi di monitoraggio, nelle piattaforme finanziarie e nei sistemi di interrogazione dello stato dei sensori. Il lavoro con i dati delle serie temporali viene effettuato come con normali collezioni di documenti, ma gli indici e il metodo di memorizzazione per questi dati sono ottimizzati tenendo conto del legame con il tempo, permettendo così di ridurre significativamente il consumo di spazio su disco, diminuire i tempi di attesa durante l'esecuzione delle query e implementare la possibilità di analizzare i dati in tempo reale.
MongoDB considera queste collezioni come viste non materializzate disponibili in scrittura, create sulla base di collezioni interne e, durante l'inserimento, raggruppa automaticamente i dati delle serie temporali in un formato di memorizzazione ottimizzato. Ogni registrazione vincolata al tempo viene interpretata come un documento separato durante le query. I dati vengono automaticamente ordinati e indicizzati nel tempo (non è necessario creare esplicitamente indici temporali).
- È stato aggiunto il supporto per gli operatori finestra (funzioni analitiche), che consentono di eseguire azioni su un insieme specifico di documenti nella collezione. A differenza delle funzioni aggregative, le funzioni finestra non riducono l'insieme raggruppato, ma producono aggregazione basata sul contenuto della 'finestra', che include uno o più documenti dall'insieme risultante. Per manipolare un sottoinsieme di documenti è stata proposta una nuova fase $setWindowFields, con cui è possibile, ad esempio, determinare le differenze tra due documenti nella collezione, calcolare la valutazione delle vendite e analizzare le informazioni in serie temporali complesse.
- È stato aggiunto il supporto per la versioning dell'API, che consente di collegare l'applicazione a uno stato specifico dell'API ed escludere i rischi legati a possibili interruzioni della retrocompatibilità durante la transizione a nuove versioni del DBMS. La versioning dell'API separa il ciclo di vita dell'applicazione dal ciclo di vita del DBMS e permette agli sviluppatori di apportare modifiche all'applicazione quando è necessario sfruttare nuove funzionalità, piuttosto che quando si effettua il passaggio a una nuova versione del DBMS.
- Aggiunto il supporto per il meccanismo Live Resharding, che consente di modificare al volo le chiavi di partizionamento (shard key) senza interrompere il DBMS.
- Ampliate le capacità di crittografia dei campi lato client (Client-Side Field Level Encryption). È possibile ora riconfigurare i filtri di audit e la rotazione dei certificati x509 senza interrompere il funzionamento del DBMS. Aggiunto il supporto per la configurazione del set di protocolli per TLS 1.3.
- Proposta una nuova shell della riga di comando MongoDB Shell (mongosh), che si sviluppa come progetto separato, scritta in JavaScript utilizzando la piattaforma Node.js e distribuita sotto licenza Apache 2.0. MongoDB Shell consente di connettersi al DBMS, modificare le impostazioni e inviare query. Supporta un smart completamento automatico dell'input per metodi, comandi ed espressioni MQL, l'evidenziazione della sintassi, suggerimenti contestuali, analisi dei messaggi di errore e la possibilità di estendere le funzionalità tramite plugin. La vecchia shell CLI 'mongo' è stata dichiarata obsoleta e verrà rimossa nella futura versione.

- Aggiunti nuovi operatori: $count, $dateAdd, $dateDiff, $dateSubtract, $sampleRate e $rand.
- Garantito l'uso degli indici quando si utilizzano operatori $eq, $lt, $lte, $gt e $gte all'interno dell'espressione $expr.
- Nei comandi aggregate, find, findAndModify, update, delete e nei metodi db.collection.aggregate(), db.collection.findAndModify(), db.collection.update() e db.collection.remove() è stata implementata la supporto dell'opzione 'let' per definire un elenco di variabili, rendendo i comandi più leggibili grazie alla separazione delle variabili dal testo della query.
- Le operazioni find, count, distinct, aggregate, mapReduce, listCollections e listIndexes ora non sono bloccate se viene eseguita contemporaneamente un'operazione che imposta un blocco esclusivo sulla collezione di documenti.
- Nell'ambito dell'iniziativa per eliminare i termini politicamente scorretti, il comando isMaster e il metodo db.isMaster() sono stati rinominati in hello e db.hello().
- È stato modificato lo schema di numerazione delle versioni e si è avviato un passaggio a un programma prevedibile per la formazione dei rilasci. Sarà rilasciata una versione significativa (5.0, 6.0, 7.0) una volta all'anno, rilasciate versioni intermedie con nuove funzionalità (5.1, 5.2, 5.3) ogni tre mesi e aggiornamenti correttivi per la risoluzione di bug e vulnerabilità (5.1.1, 5.1.2, 5.1.3) secondo necessità. Nelle versioni intermedie saranno sviluppate funzionalità per il successivo rilascio significativo, ovvero in MongoDB 5.1, 5.2 e 5.3 saranno sviluppate nuove funzionalità per il rilascio di MongoDB 6.0.
Fonte: opennet.ru

