Die Veröffentlichung der FerretDB 0.1 (ehemals MangoDB) ermöglicht es, die dokumentenorientierte Datenbank MongoDB durch PostgreSQL zu ersetzen, ohne Ănderungen am Anwendungscode vorzunehmen. FerretDB fungiert als Proxy-Server, der Anfragen an MangoDB in SQL-Abfragen an PostgreSQL umwandelt, wodurch PostgreSQL als tatsĂ€chlicher Speicher verwendet werden kann. Der Code ist in Go geschrieben und steht unter der Apache 2.0-Lizenz.
Die Notwendigkeit zur Migration kann aufgrund des Wechsels von MongoDB zu der nicht freien SSPL-Lizenz entstehen, die auf der AGPLv3-Lizenz basiert, aber nicht offen ist, da sie diskriminierende Anforderungen an die Bereitstellung unter der SSPL-Lizenz nicht nur fĂŒr den Anwendungscode, sondern auch fĂŒr die Quelltexte aller an der Bereitstellung des Cloud-Services beteiligten Komponenten enthĂ€lt.
FerretDB richtet sich an Nutzer, die in ihren Anwendungen keine erweiterten Funktionen von MongoDB verwenden, aber einen vollstĂ€ndig offenen Software-Stack nutzen möchten. In der aktuellen Entwicklungsphase unterstĂŒtzt FerretDB bisher nur einen Teil der Funktionen von MongoDB, die in typischen Anwendungen am hĂ€ufigsten verwendet werden. In Zukunft wird die vollstĂ€ndige KompatibilitĂ€t mit den Treibern fĂŒr MongoDB angestrebt, um FerretDB als transparente Alternative zu MongoDB anbieten zu können.
Lassen Sie uns daran erinnern, dass MongoDB eine Nische zwischen schnellen und skalierbaren Systemen einnimmt, die mit Daten im SchlĂŒssel-/Wert-Format arbeiten, und relationalen DBMS, die funktional und benutzerfreundlich bei der Erstellung von Abfragen sind. MongoDB unterstĂŒtzt die Speicherung von Dokumenten im JSON-Ă€hnlichen Format, hat eine ausreichend flexible Sprache zur Formulierung von Abfragen, kann Indizes fĂŒr verschiedene gespeicherte Attribute erstellen, sichert effektiv groĂe binĂ€re Objekte, unterstĂŒtzt die Protokollierung von Ănderungen und ErgĂ€nzungen in der Datenbank, kann gemÀà dem Map-/Reduce-Paradigma arbeiten, unterstĂŒtzt Replikation und den Aufbau ausfallsicherer Konfigurationen.
In der Version FerretDB 0.1.0 wurde die Methode zur Datenextraktion aus PostgreSQL vollstĂ€ndig ĂŒberarbeitet. FrĂŒher wurde fĂŒr jede eingehende MongoDB-Anfrage eine SQL-Abfrage an PostgreSQL erstellt, die Funktionen zur Verarbeitung des JSON-Formats verwendete und die Ergebnisse auf der Seite von PostgreSQL filterte. Aufgrund der Unterschiede in der Semantik der JSON-Funktionen von PostgreSQL und MongoDB gab es Abweichungen im Verhalten bei Vergleichen und Sortierungen verschiedener Typen. Zur Lösung dieses Problems wird nun eine ĂŒberflĂŒssige Datenabfrage aus PostgreSQL durchgefĂŒhrt, und die Ergebnisfilterung erfolgt auf der Seite von FerretDB, was es ermöglicht hat, das Verhalten von MongoDB in den meisten Situationen nachzuahmen.
Der Preis der erhöhten KompatibilitĂ€t war eine verringerte Leistung, die in zukĂŒnftigen Versionen durch gezielte Filterung auf der FerretDB-Seite nur fĂŒr Anfragen, bei denen ein abweichendes Verhalten festgestellt wird, kompensiert 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 ist die Erreichung von KompatibilitĂ€t mit MongoDB, wĂ€hrend die Leistung vorerst in den Hintergrund rĂŒckt. 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
