Veröffentlichung von FerretDB 0.1, einer Implementierung von MongoDB auf der Basis der Datenbank PostgreSQL

Die Veröffentlichung von FerretDB 0.1 (ehemals MangoDB) ermöglicht es, die dokumentenorientierte Datenbank MongoDB ohne Änderungen am Anwendungs-Code durch PostgreSQL zu ersetzen. FerretDB fungiert als Proxy-Server, der Anfragen an MangoDB in SQL-Abfragen an PostgreSQL übersetzt, was die Nutzung von PostgreSQL als tatsächlichem Speichersystem erlaubt. Der Code ist in Go geschrieben und wird unter der Apache 2.0-Lizenz verbreitet.

Die Notwendigkeit zur Migration kann entstehen, da MongoDB auf die nicht-freie SSPL-Lizenz umgestiegen ist, die auf der AGPLv3 basiert, jedoch nicht als offen gilt, da sie diskriminierende Anforderungen für die Bereitstellung unter der SSPL-Lizenz enthält, nicht nur für den Quellcode der Anwendung, sondern auch für die Quelltexte aller Komponenten, die an der Bereitstellung des Cloud-Dienstes beteiligt sind.

FerretDB richtet sich an Nutzer, die die erweiterten Funktionen von MongoDB in ihren Anwendungen nicht benötigen, jedoch einen vollständig offenen Software-Stack nutzen möchten. Aktuell unterstützt FerretDB nur einen Teil der in typischen Anwendungen am häufigsten verwendeten Funktionen von MongoDB. Zukünftig ist geplant, die vollständige Kompatibilität mit den Treibern für MongoDB zu erreichen und FerretDB als transparente Alternative zu MongoDB anzubieten.

MongoDB nimmt einen Platz ein zwischen schnellen, skalierbaren Systemen zur Verarbeitung von Daten im Schlüssel-Wert-Format und relationalen Datenbanksystemen, die funktional und benutzerfreundlich bei der Abfrageerstellung sind. MongoDB unterstützt die Speicherung von Dokumenten im JSON-ähnlichen Format, verfügt über eine ausreichend flexible Abfragesprache, kann Indizes für verschiedene gespeicherte Attribute erstellen und gewährleistet effizient die Speicherung großer binary Objekte. Es unterstützt das Protokollieren von Operationen zur Änderung und Hinzufügung von Daten in die Datenbank, kann gemäß dem Map/Reduce-Paradigma arbeiten und ermöglicht die Replikation sowie den Aufbau ausfallsicherer Konfigurationen.

In der Version FerretDB 0.1.0 wurde die Methode zur Datenextraktion aus PostgreSQL komplett neu gestaltet. Früher wurde für jede eingehende MongoDB-Anfrage eine SQL-Abfrage an PostgreSQL generiert, die Funktionen zur Verarbeitung des JSON-Formats verwendete und die Ergebnisse seitens PostgreSQL filterte. Aufgrund der Unterschiede in der Semantik der JSON-Funktionen von PostgreSQL und MongoDB kam es zu abweichendem Verhalten beim Vergleichen und Sortieren unterschiedlicher Typen. Um dieses Problem zu lösen, wird jetzt eine übermäßige Auswahl an Daten aus PostgreSQL extrahiert, und die Ergebnisfilterung erfolgt seitens FerretDB, was es ermöglicht, das Verhalten von MongoDB in den meisten Situationen nachzubilden.

Die Erhöhung der Kompatibilität führte zu einer Verringerung der Leistung, die in zukünftigen Versionen durch selektives Filtern von Anfragen auf der FerretDB-Seite für Anfragen, bei denen Verhaltensunterschiede beobachtet werden, ausgeglichen werden soll. Zum Beispiel kann die Anfrage „db.collection.find({_id: 'some-id-value'})“ vollständig in PostgreSQL verarbeitet werden. Das primäre Ziel des Projekts in dieser Entwicklungsphase besteht darin, die Kompatibilität mit MongoDB zu erreichen, während die Leistung vorerst in den Hintergrund gedrängt wird. Zu den funktionalen Änderungen in der neuen Version gehört die Unterstützung aller Bitoperatoren, des Vergleichsoperators „$eq“ sowie der Operatoren „$elemMatch“ und „$bitsAllClear“.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster