Die dokumentenorientierte DBMS MongoDB 6.0 ist verfügbar.

Nach einem Jahr der Entwicklung wurde die dokumentenorientierte Datenbank MongoDB 6.0 vorgestellt, die eine Nische zwischen schnellen und skalierbaren Systemen einnimmt, die Daten im Schlüssel/Wert-Format verarbeiten, und relationalen Datenbanken, die funktional und benutzerfreundlich bei der Erstellung von Abfragen sind. Der Code von MongoDB ist in C++ geschrieben und wird unter der Lizenz SSPL verbreitet, die auf der Lizenz AGPLv3 basiert, aber nicht offen ist, da sie eine diskriminierende Anforderung zur Lieferung unter der SSPL-Lizenz nicht nur für den Code der Anwendung selbst, sondern auch für den Quellcode aller Komponenten enthält, die an der Bereitstellung des Cloud-Dienstes beteiligt sind.

MongoDB unterstützt die Speicherung von Dokumenten im JSON-ähnlichen Format, hat eine ausreichend flexible Sprache zur Abfrageerstellung, kann Indizes für verschiedene gespeicherte Attribute erstellen, gewährleistet effektiv die Speicherung großer binärer Objekte, unterstützt das Logging von Operationen zur Änderung und Hinzufügung von Daten in die Datenbank, kann gemäß der Map/Reduce-Paradigmen arbeiten, unterstützt Replikation und den Aufbau von ausfallsicheren Konfigurationen.

In MongoDB gibt es integrierte Mittel zur Sicherstellung des Sharding (Verteilung des Datensatzes auf Server basierend auf einem bestimmten Schlüssel), die in Kombination mit Replikation es ermöglichen, einen horizontal skalierbaren Speichercluster aufzubauen, der keinen einzelnen Fehlerpunkt hat (der Ausfall eines Knotens hat keine Auswirkungen auf den Betrieb der Datenbank), es wird eine automatische Wiederherstellung nach einem Fehler unterstützt und die Last wird von einem ausgefallenen Knoten umverteilt. Die Erweiterung des Clusters oder die Umwandlung eines Server in einen Cluster erfolgt ohne Anhalten des Datenbankbetriebs einfach durch das Hinzufügen neuer Maschinen.

Die wichtigsten Funktionen der neuen Version:

  • Die Möglichkeit, Abfragen auszuführen, die Daten umfassen, die in verschlüsselter Form gespeichert sind (Queryable Encryption), wurde realisiert. Die Daten werden auf der Benutzerseite entschlüsselt und bleiben während der Abfragebearbeitung verschlüsselt (die Abfrage wird über die verschlüsselten Daten ausgeführt, ohne dass eine vorherige Entschlüsselung erforderlich ist). Aktuell sind in Abfragen nur Vergleichsausdrücke zulässig, es ist jedoch geplant, in Zukunft die Unterstützung für Bereichs-, Präfix-, Suffix-, Substring- und andere Operationen hinzuzufügen.
  • Die Möglichkeiten zur Speicherung von Daten in Form von Zeitreihen (time series collections) wurden erweitert, die für die Speicherung von Werten optimiert sind, die in bestimmten Intervallen erfasst werden (Zeit und die entsprechenden Werte zu diesem Zeitpunkt). Beispielsweise besteht Bedarf an der Speicherung solcher Daten in Überwachungssystemen, Finanzplattformen und Sensorstatusabfrage-Systemen. In der neuen Version gibt es die Möglichkeit, sekundäre und zusammengesetzte Indizes mit Zeitreihen-Sammlungen zu verwenden. Die Unterstützung für das Anhängen zusätzlicher Daten, wie etwa geografischer Informationen zur Berücksichtigung von Distanz und Standort, wurde hinzugefügt. Die Leistung beim Lesen, Ausführen von Abfragen und Sortieren wurde verbessert.
  • Neue Werkzeuge zur Verfolgung von Änderungen („Änderungsströme“, API Change Streams) wurden hinzugefügt, mit denen Anwendungen Benachrichtigungen über Änderungen an den Daten in der Datenbank organisiert werden können. Informationen über Änderungen werden in Echtzeit geliefert und ermöglichen die Erstellung von Anwendungen mit reaktiver und ereignisgesteuerter Programmierung. Ereignisse werden mit der Methode watch verarbeitet, wobei die erforderlichen Ereignisse mithilfe der Operatoren $match, $project und $redact gefiltert und aggregiert werden können. In der neuen Version ist es möglich, den vorherigen und nachfolgenden Zustand des Dokuments zu erhalten (z. B. wenn das Dokument gelöscht oder geändert wird). Neben den Operationen mit der Datentransformationssprache DML (data manipulation language) wurde die Unterstützung für DDL-Operationen (data definition language) wie das Erstellen und Löschen von Indizes und Sammlungen hinzugefügt. Es wurden Werkzeuge zur Filterung der assoziierten Benachrichtigungen bereitgestellt.
  • In den Operatoren $lookup und $graphlookup wurde die vollständige Unterstützung für partitionierte (sharded) Speicher realisiert. Die Leistung der $lookup-Operation wurde optimiert; beispielsweise wird bei Vorhandensein eines Index über den Fremdschlüssel die Zuordnung einer kleinen Anzahl von Dokumenten nun 5-10 Mal schneller durchgeführt, während eine große Anzahl nun doppelt so schnell verarbeitet wird. Bei Zuordnungen ohne Verwendung von Indizes kann der Leistungszuwachs bis zu 100 Mal betragen.
  • Die Möglichkeit zur Durchführung komplexer analytischer Abfragen über konsistente Snapshots des Arbeitsdatenstatus wurde bereitgestellt. Solche analytischen Anfragen können mehrere Segmente in großen verteilten MongoDB-Konfigurationen abdecken.
  • Neue Operatoren $maxN, $minN und $lastN wurden hinzugefügt, um Werte in Datensätzen zu bestimmen, sowie der Operator $sortArray zur Sortierung von Array-Elementen.
  • Die Effizienz des Segmentierens wurde erheblich verbessert. Die standardmäßige Blockgröße für segmentierte Sammlungen wurde auf 128 MB erhöht. Der Befehl configureCollectionBalancing wurde zur Defragmentierung von segmentierten Sammlungen hinzugefügt.
  • Die clientseitige Verschlüsselung auf Feldebene (CSFLE) unterstützt jetzt KMIP-kompatible Schlüsselanbieter.
  • Die Möglichkeit zur Komprimierung und Verschlüsselung von Audit-Logs wurde hinzugefügt, die die Aktivität von Datenbankbenutzern widerspiegeln.
  • Ein experimenteller Modus zur Datensynchronisation zwischen MongoDB-Clustern (Cluster-to-Cluster Sync) wurde implementiert.

Quelle: opennet.ru

60GB SSD 8Gb DDR4