Dopo un anno di sviluppo, è stata presentata la versione 6.0 del database orientato ai documenti MongoDB, che si colloca tra i sistemi veloci e scalabili che gestiscono dati in formato chiave/valore e i database relazionali, funzionali e facili da interrogare. Il codice di MongoDB è scritto in C++ e distribuito sotto licenza SSPL, che si basa sulla licenza AGPLv3, ma non è open source, in quanto contiene requisiti discriminatori per la consegna sotto licenza SSPL non solo del codice dell'applicazione, ma anche dei testi 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 principali della nuova versione:
- È stata implementata la possibilità di eseguire query su dati memorizzati in forma cifrata (Queryable Encryption). I dati vengono decifrati lato utente e rimangono cifrati durante il processo di elaborazione della richiesta (la query viene eseguita su dati cifrati, senza la loro decifratura preventiva). Nella versione attuale, sono consentite solo espressioni di confronto nelle query, ma è previsto in futuro il supporto per il controllo di intervalli, prefissi, suffissi, sottostringhe e altre operazioni.
- Sono state ampliate le possibilità relative alla memorizzazione dei dati in forma di serie temporali (collezioni di time series), ottimizzate per la memorizzazione di istantanee dei valori dei parametri registrati a intervalli di tempo specifici (tempo e insieme corrispondente di valori per quel tempo); ad esempio, la necessità di memorizzare dati di questo tipo si presenta in sistemi di monitoraggio, piattaforme finanziarie e sistemi di sondaggio degli stati dei sensori. Nella nuova versione è stata introdotta la possibilità di utilizzare indici secondari e composti con collezioni di dati in forma di serie temporali. È stata aggiunta la supporto per l'aggiunta di dati supplementari, come informazioni geografiche per tenere conto della distanza e della posizione. È stata migliorata la velocità di lettura, esecuzione delle query e ordinamento.
- Sono stati aggiunti nuovi strumenti per il monitoraggio delle modifiche ("flussi di cambiamento", API Change Streams), grazie ai quali è possibile organizzare l'invio di notifiche alle applicazioni riguardo le modifiche ai dati nel database. Le informazioni sulle modifiche vengono ricevute in tempo reale e consentono di creare applicazioni utilizzando metodi di programmazione reattiva e orientata agli eventi. Gli eventi vengono elaborati tramite il metodo watch, mentre gli eventi necessari possono essere filtrati e aggregati utilizzando gli operatori $match, $project e $redact. Nella nuova versione è stata fornita la possibilità di ottenere lo stato precedente e successivo di un documento (ad esempio, quando un documento è stato eliminato o modificato). Oltre alle operazioni utilizzando il linguaggio DML (data manipulation language), è stata fornita supporto per le operazioni DDL (data definition language), come la creazione e l'eliminazione di indici e collezioni. Sono stati aggiunti strumenti per filtrare le notifiche associate.
- Negli operatori $lookup e $graphlookup è stata implementata un'ampia supporto per memorie sezionate (sharded). È stata ottimizzata la performance dell'operazione $lookup, ad esempio, in presenza di un indice sulla chiave esterna il confronto di un numero ridotto di documenti ora avviene da 5 a 10 volte più veloce, mentre per un gran numero di documenti è due volte più veloce. Per i confronti senza l'utilizzo di indici, l'incremento della performance può arrivare fino a 100 volte.
- È stata fornita la possibilità di eseguire query analitiche complesse su snapshot di dati di lavoro coerenti. Tali query analitiche possono coprire più segmenti in grandi configurazioni distribuite di MongoDB.
- Sono stati aggiunti nuovi operatori $maxN, $minN e $lastN per determinare valori in un dataset, oltre all'operatore $sortArray per ordinare gli elementi di un array.
- È stata notevolmente migliorata l'efficienza della segmentazione. La dimensione del blocco predefinita per una collezione segmentata è stata aumentata a 128 MB. È stato aggiunto il comando configureCollectionBalancing per la deframmentazione della collezione segmentata.
- Nella crittografia dei dati a livello di campo dal lato client (CSFLE, client-side field-level encryption) è stata aggiunta supporto per fornitori di chiavi compatibili con KMIP.
- È stata aggiunta la possibilità di comprimere e crittografare il log delle audit, nel quale viene riflessa l'attività degli utenti del DBMS.
- È stato implementato un regime sperimentale di sincronizzazione dei dati tra cluster MongoDB (Cluster-to-Cluster Sync).
Fonte: opennet.ru
