Die Version der dokumentenorientierten NoSQL-Datenbank MongoDB 5.0 wurde veröffentlicht. Sie nimmt eine Stellung zwischen schnellen und skalierbaren Systemen, die mit Schlüssel-Wert-Daten arbeiten, und relationalen Datenbanken ein, die funktional sind und eine benutzerfreundliche Abfrageerstellung ermöglichen. Der Code von MongoDB ist in C++ geschrieben und wird unter der SSPL-Lizenz verbreitet, die auf der AGPLv3 basiert, jedoch nicht als Open Source gilt, da sie eine diskriminierende Anforderung an die Bereitstellung unter der SSPL-Lizenz sowohl des Anwendungscodes als auch des Quellcodes aller Komponenten enthält, die an der Bereitstellung des Cloud-Dienstes beteiligt sind.
MongoDB unterstützt die Speicherung von Dokumenten im JSON-ähnlichen Format, verfügt über eine flexible Abfragesprache, kann Indizes für verschiedene gespeicherte Attribute erstellen, ermöglicht die effiziente Speicherung großer Binärobjekte, unterstützt das Protokollieren von Datenänderungen und -hinzufügungen in der Datenbank, kann nach dem Map/Reduce-Paradigma arbeiten und unterstützt Replikation sowie den Aufbau von ausfallsicheren Konfigurationen.
MongoDB bietet integrierte Funktionen zur Segmentierung an, die eine Verteilung des Datensatzes über Server basierend auf einem bestimmten Schlüssel ermöglichen. In Kombination mit der Replikation lässt sich so ein horizontal skalierbarer Speichercluster erstellen, der keinen einzelnen Ausfallpunkt aufweist (ein Ausfall eines Knotens hat keine Auswirkungen auf die Funktionsweise der Datenbank). Außerdem wird eine automatisierte Wiederherstellung nach einem Ausfall unterstützt, sowie die Lastverlagerung von einem ausgefallenen Knoten. Die Erweiterung des Clusters oder die Umwandlung einer Instanz in einen Cluster erfolgt ohne Unterbrechung des Datenbankbetriebs, einfach durch das Hinzufügen neuer Maschinen. Server Die Hauptmerkmale der neuen Version sind:
Besonderheiten der neuen Version:
- Zeitenserien-Kollektionen wurden hinzugefügt, die optimiert sind, um Schnappschüsse von Parametern zu speichern, die in bestimmten Intervallen erfasst werden (Zeit und die entsprechenden Werte zu diesem Zeitpunkt). Die Notwendigkeit zur Speicherung solcher Daten ergibt sich in Überwachungssystemen, Finanzplattformen und Systemen zur Abfrage von Sensordaten. Der Umgang mit Zeitseriendaten erfolgt wie bei normalen Dokumentensammlungen, jedoch sind die Indizes und die Speicherungsmethoden für sie optimiert, um die Zeitbindung zu berücksichtigen. Dies ermöglicht eine signifikante Reduzierung des Speicherplatzbedarfs, verringert die Verzögerung bei der Ausführung von Anfragen und ermöglicht die Echtzeitanalyse von Daten.
MongoDB betrachtet solche Sammlungen als schreibbare, nicht materialisierte Ansichten, die auf internen Sammlungen basieren und bei der Einfügung automatisch Zeitreihendaten in ein optimiertes Speicherformat gruppieren. Jede an die Zeit gebundene Aufzeichnung wird bei der Abfrage als separates Dokument behandelt. Die Daten werden automatisch nach Zeit geordnet und indiziert (es besteht keine Notwendigkeit, Zeitindizes explizit zu erstellen).
- Die Unterstützung von Fensterfunktionen (analytischen Funktionen) wurde hinzugefügt, mit denen Aktionen auf einem bestimmten Satz von Dokumenten in der Sammlung ausgeführt werden können. Im Gegensatz zu Aggregatfunktionen komprimieren Fensterfunktionen nicht die gruppierte Menge, sondern aggregieren basierend auf dem Inhalt des „Fensters“, das ein oder mehrere Dokumente aus dem Ergebnissatz umfasst. Eine neue Phase namens $setWindowFields wurde eingeführt, um beispielsweise Unterschiede zwischen zwei Dokumenten in der Sammlung zu definieren, Verkaufsrankings zu berechnen und Informationen in komplexen Zeitreihen zu analysieren.
- Die Unterstützung für die API-Versionierung wurde hinzugefügt, was es ermöglicht, die Anwendung an einen bestimmten Stand der API zu binden und Risiken im Zusammenhang mit möglichen Inkompatibilitäten beim Übergang zu neuen Versionen der Datenbankmanagementsysteme auszuschließen. Die API-Versionierung trennt den Lebenszyklus der Anwendung vom Lebenszyklus des DBMS und ermöglicht es den Entwicklern, Änderungen an der Anwendung vorzunehmen, sobald die Notwendigkeit besteht, neue Funktionen zu nutzen, anstatt nur beim Übergang zu einer neuen DBMS-Version.
- Die Unterstützung für den Mechanismus des Live Resharding wurde hinzugefügt, der es ermöglicht, die verwendeten Segmentierungsschlüssel (Shard Key) im laufenden Betrieb zu ändern, ohne das DBMS anzuhalten.
- Die Möglichkeiten zur clientseitigen Verschlüsselung von Feldern (Client-Side Field Level Encryption) wurden erweitert. Es besteht nun die Möglichkeit, Auditfilter und die Rotation von x509-Zertifikaten ohne Unterbrechung des DBMS neu zu konfigurieren. Außerdem wurde die Unterstützung für die Konfiguration von Cipher-Suiten für TLS 1.3 hinzugefügt.
- Eine neue Kommandozeilenoberfläche für MongoDB Shell (mongosh) wurde vorgestellt. Diese entwickelt sich als separates Projekt, ist in JavaScript unter Verwendung der Node.js-Plattform geschrieben und wird unter der Apache 2.0-Lizenz verbreitet. MongoDB Shell ermöglicht die Verbindung zu Datenbanken, das Ändern von Einstellungen und das Senden von Anfragen. Sie unterstützt intelligentes Autocomplete für Methoden, Befehle und MQL-Ausdrücke, Syntaxhervorhebung, kontextbezogene Hinweise, die Analyse von Fehlermeldungen und die Möglichkeit zur Erweiterung der Funktionen über Plugins. Die alte CLI-Oberfläche „mongo“ wurde als veraltet erklärt und wird in einer zukünftigen Version entfernt.

- Neue Operatoren wurden hinzugefügt: $count, $dateAdd, $dateDiff, $dateSubtract, $sampleRate und $rand.
- Die Nutzung von Indizes bei den Operatoren $eq, $lt, $lte, $gt und $gte innerhalb des Ausdrucks $expr wurde gewährleistet.
- In den Befehlen aggregate, find, findAndModify, update, delete sowie in den Methoden db.collection.aggregate(), db.collection.findAndModify(), db.collection.update() und db.collection.remove() wurde die Unterstützung der Option „let“ implementiert, um eine Liste von Variablen zu definieren und die Befehle lesbarer zu gestalten, indem Variablen vom Abfragetext getrennt werden.
- Die Operationen find, count, distinct, aggregate, mapReduce, listCollections und listIndexes blockieren jetzt nicht mehr, wenn gleichzeitig eine Operation ausgeführt wird, die eine exklusive Sperre auf die Dokumentensammlung setzt.
- Im Rahmen der Initiative zur Beseitigung politisch inkorrekter Begriffe wurden der Befehl isMaster und die Methode db.isMaster() in hello und db.hello() umbenannt.
- Das Versionsnummernschema wurde geändert und es wird jetzt ein vorhersehbarer Veröffentlichungszeitplan eingeführt. Ein bedeutendes Release (5.0, 6.0, 7.0) wird einmal im Jahr erstellt, alle drei Monate wird es Zwischenversionen mit neuen Funktionen (5.1, 5.2, 5.3) geben und bei Bedarf werden Fehlerbehebungen und Sicherheitsupdates (5.1.1, 5.1.2, 5.1.3) veröffentlicht. In den Zwischenversionen wird Funktionalität für das nächste bedeutende Release vorbereitet, d.h. in MongoDB 5.1, 5.2 und 5.3 werden neue Funktionen für die Veröffentlichung von MongoDB 6.0 geschaffen.
Quelle: opennet.ru

