Die Firma Microsoft hat die Veröffentlichung des Quellcodes des Projekts DocumentDB angekündigt, das sowohl als eigenständige NoSQL-Datenbank als auch als Plattform zur Erstellung eigener Speichersysteme oder als Erweiterung zur Speicherung von Daten im BSON-Format in der PostgreSQL-Datenbank verwendet werden kann. In der Praxis wird DocumentDB von Microsoft als Grundlage für das Produkt „Azure Cosmos DB for MongoDB“ genutzt, das eine mit der dokumentenorientierten Datenbank MongoDB kompatible Schnittstelle bereitstellt. Der Code des Projekts ist in C geschrieben und wird unter der MIT-Lizenz veröffentlicht. Die DocumentDB-Engine wird als Erweiterung für die PostgreSQL-Datenbank implementiert.
Wie auch in MongoDB wird zur Speicherung strukturierter Dokumente in DocumentDB ein JSON-ähnliches BSON-Format (Binary JSON) verwendet, das die Erstellung hierarchischer Strukturen ermöglicht, in denen Dokumente und Arrays in andere Dokumente und Arrays eingebettet werden können. Ein entscheidender Unterschied zu JSON ist die Verwendung der Binärdarstellung zur Serialisierung der Daten. Das Projekt bietet sowohl NoSQL-Operationen zum Erstellen, Lesen, Aktualisieren und Löschen von Daten im BSON-Format als auch eine API für die standardmäßige PostgreSQL (DocumentDB kann als eine Variante von PostgreSQL mit BSON-Unterstützung betrachtet werden). In DocumentDB können die Möglichkeiten der Volltextsuchen, der Operationen mit Vektor- und Geodaten genutzt werden.
Das Projekt besteht aus zwei Komponenten:
- pg_documentdb_core — eine Erweiterung für PostgreSQL mit der Implementierung des BSON-Datentyps und der Operationen zur Verarbeitung von BSON-Daten in PostgreSQL.
- pg_documentdb — eine öffentliche API von DocumentDB mit grundlegenden Operationen zur Verarbeitung von Dokumenten im BSON-Format, zur Anfragebearbeitung und zur Verwaltung von Indizes.
Die erste Version von DocumentDB bietet Unterstützung für CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen), Indizes für einzelne BSON-Felder, Indizes für Volltextsuchen (kompatibel mit RUM), Vektor- und Geodatenabfragen (kompatibel mit pg_vector und postgis), Möglichkeiten zur Abfrageerstellung und zur Aggregation von BSON-Daten.
Das Projekt FerretDB, das die Implementierung der MongoDB-Datenbank auf der Basis der PostgreSQL-Datenbank entwickelt, hat bereits auf die Verwendung von DocumentDB umgestellt. FerretDB ermöglicht es, ohne Änderungen am Anwendungscode die proprietäre dokumentenorientierte Datenbank MongoDB durch einen vollständig offenen Software-Stack auf Basis von PostgreSQL zu ersetzen. Die Notwendigkeit, MongoDB zu ersetzen, ergibt sich aus der Umstellung dieser Datenbank auf die SSPL-Lizenz, die auf der AGPLv3-Lizenz basiert, jedoch nicht offen ist, da sie eine diskriminierende Anforderung an die Bereitstellung unter der SSPL-Lizenz nicht nur für den Code der Anwendung selbst, sondern auch für die Quelltexte aller Komponenten, die an der Bereitstellung des Cloud-Dienstes beteiligt sind, enthält.
Ursprünglich bestand die Aufgabe von FerretDB darin, Anfragen an MongoDB in SQL-Abfragen an PostgreSQL zu übersetzen, aber seit der Version 2.0 von FerretDB, die sich in der Release-Kandidatenphase befindet, wird das PostgreSQL-Erweiterung DocumentDB zur Unterstützung des BSON-Formats verwendet. Der Umstieg auf die Verwendung von DocumentDB hat es ermöglicht, die Leistung von FerretDB für bestimmte Arten von Lasten um mehr als das 20-fache zu steigern. Zu den weiteren Neuerungen in FerretDB 2.0 gehören verbesserte Kompatibilität mit MongoDB, die Möglichkeit zur Replikation und Unterstützung von vektorspezifischer Suche. Der Code von FerretDB ist in der Programmiersprache Go geschrieben und wird unter der Lizenz Apache 2.0 verbreitet.
Quelle: opennet.ru
