Veröffentlichung von FerretDB 0.1, einer Implementierung von MongoDB basierend auf dem PostgreSQL-DBMS

Die Veröffentlichung des Projekts FerretDB 0.1 (ehemals MangoDB) wurde veröffentlicht, sodass Sie das dokumentenorientierte DBMS MongoDB durch PostgreSQL ersetzen können, ohne Änderungen am Anwendungscode vorzunehmen. FerretDB ist als Proxyserver implementiert, der Aufrufe an MangoDB in SQL-Abfragen an PostgreSQL übersetzt, sodass PostgreSQL als eigentlicher Speicher verwendet werden kann. Der Code ist in Go geschrieben und wird unter der Apache 2.0-Lizenz vertrieben.

Der Migrationsbedarf kann durch den Übergang von MongoDB zu einer proprietären SSPL-Lizenz entstehen, die auf der AGPLv3-Lizenz basiert, aber nicht offen ist, da sie eine diskriminierende Anforderung enthält, nicht nur den Anwendungscode selbst, sondern auch unter der SSPL-Lizenz bereitzustellen den Quellcode aller an der Bereitstellung des Cloud-Dienstes beteiligten Komponenten.

Die Zielgruppe von FerretDB sind Benutzer, die in ihren Anwendungen nicht die erweiterten Funktionen von MongoDB nutzen, sondern einen vollständig offenen Software-Stack nutzen möchten. Im aktuellen Entwicklungsstadium unterstützt FerretDB noch nur einen Teil der MongoDB-Funktionen, die in typischen Anwendungen am häufigsten verwendet werden. Für die Zukunft ist geplant, vollständige Kompatibilität mit Treibern für MongoDB zu erreichen und die Möglichkeit bereitzustellen, FerretDB als transparenten Ersatz für MongoDB zu verwenden.

Denken Sie daran, dass MongoDB eine Nische zwischen schnellen und skalierbaren Systemen, die Daten im Schlüssel-/Wertformat verarbeiten, und relationalen DBMS einnimmt, die funktional und praktisch bei der Generierung von Abfragen sind. MongoDB unterstützt das Speichern von Dokumenten in einem JSON-ähnlichen Format, verfügt über eine ziemlich flexible Sprache zum Generieren von Abfragen, kann Indizes für verschiedene gespeicherte Attribute erstellen, ermöglicht die effiziente Speicherung großer Binärobjekte, unterstützt die Protokollierung von Vorgängen zum Ändern und Hinzufügen von Daten zur Datenbank arbeitet nach dem Paradigma Map/Reduce, unterstützt die Replikation und den Aufbau fehlertoleranter Konfigurationen.

Mit der Veröffentlichung von FerretDB 0.1.0 wurde die Methode zum Abrufen von Daten aus PostgreSQL komplett neu gestaltet. Bisher wurde für jede eingehende MongoDB-Anfrage eine SQL-Abfrage an PostgreSQL generiert, wobei Funktionen zum Arbeiten mit dem JSON-Format und zum Filtern der Ergebnisse auf der PostgreSQL-Seite verwendet wurden. Aufgrund der Unterschiede in der Semantik der PostgreSQL- und MongoDB-JSON-Funktionen kam es zu einer Diskrepanz im Verhalten beim Vergleich und Sortieren verschiedener Typen. Um dieses Problem zu lösen, werden Daten nun redundant aus PostgreSQL abgerufen und das Ergebnis auf der FerretDB-Seite gefiltert, wodurch es möglich wurde, das Verhalten von MongoDB in den meisten Situationen zu reproduzieren.

Der Preis für die erhöhte Kompatibilität war ein Leistungsabfall, den sie in künftigen Versionen kompensieren wollen, indem auf der FerretDB-Seite selektiv nur Abfragen gefiltert werden, bei denen es eine Diskrepanz im Verhalten gibt. Beispielsweise kann die Abfrage „db.collection.find({_id: 'some-id-value'})“ vollständig in PostgreSQL verarbeitet werden. Das Hauptziel des Projekts in dieser Entwicklungsphase besteht darin, Kompatibilität mit MongoDB zu erreichen, und die Leistung wird vorerst in den Hintergrund gedrängt. Zu den funktionalen Änderungen in der neuen Version gehört die Unterstützung aller Bitoperatoren, des Vergleichsoperators „$eq“ sowie der Operatoren „$elemMatch“ und „$bitsAllClear“.

Source: opennet.ru

Kommentar hinzufügen