Die Version 1.0 des Projekts FerretDB wurde veröffentlicht, welches eine Umstellung von der dokumentenorientierten Datenbank MongoDB auf PostgreSQL ermöglicht, ohne Änderungen am Anwendungscode vornehmen zu müssen. FerretDB funktioniert als Proxy-Server, der MongoDB-Anfragen in SQL-Abfragen für PostgreSQL übersetzt, sodass PostgreSQL als tatsächlicher Speicher verwendet werden kann. Die Version 1.0 wird als erste stabile Veröffentlichung angesehen, die bereit für den breiten Einsatz ist. Der Code ist in Go geschrieben und wird unter der Apache 2.0-Lizenz veröffentlicht.
Die Hauptzielgruppe von FerretDB sind Benutzer, die in ihren Anwendungen nicht die erweiterten Funktionen von MongoDB nutzen, aber einen vollständig offenen Software-Stack verwenden möchten. In der aktuellen Entwicklungsphase unterstützt FerretDB eine Teilmenge der Funktionen von MongoDB, die am häufigsten in Standardanwendungen verwendet werden. Der Bedarf an FerretDB kann durch den Wechsel von MongoDB zu der nicht freien Lizenz SSPL entstehen, die auf der Lizenz AGPLv3 basiert, jedoch nicht offen ist, da sie diskriminierende Anforderungen an die Bereitstellung nicht nur des Codes der Anwendung selbst, sondern auch des Quellcodes aller Komponenten enthält, die an der Bereitstellung des Cloud-Dienstes beteiligt sind.
MongoDB nimmt eine Sonderstellung zwischen schnellen und skalierbaren Systemen ein, die mit Schlüssel/Wert-Daten arbeiten, und relationalen Datenbanksystemen, die funktional und benutzerfreundlich für die Abfragegestaltung 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 binärer Objekte. Darüber hinaus unterstützt es das Logging von Operationen zur Datenänderung und -erweiterung, kann gemäß der Map/Reduce-Paradigma arbeiten und bietet Replikation sowie den Aufbau von fehlertoleranten Konfigurationen.
Zu den Änderungen in FerretDB 1.0 gehören:
- Die Befehle createIndexes und dropIndexes wurden implementiert, um einen oder mehrere Indizes für eine Sammlung zu erstellen und zu löschen.
- Der Befehl getMore wurde implementiert, um eine neue Ergebnisportion aus den ausgeführten Befehlen zu liefern, die einen Cursor zurückgeben, wie zum Beispiel find und aggregate.
- Die Unterstützung des aggregierenden Operators $sum wurde hinzugefügt, um die Summe der Werte einer Gruppe zu berechnen.
- Die Unterstützung der Operatoren $limit und $skip wurde hinzugefügt, um die Anzahl der Dokumente beim Aggregieren zu begrenzen und zu überspringen.
- Die Unterstützung des Operators $count wurde hinzugefügt, um die Anzahl der Dokumente beim Aggregieren zu zählen.
- Die Unterstützung des Operators $unwind wurde hinzugefügt, um Array-Felder in den eingehenden Dokumenten zu analysieren und eine Liste mit separaten Dokumenten für jedes Element des Arrays zu erstellen.
- Teilweise Unterstützung für die Befehle collStats, dbStats und dataSize wurde hinzugefügt, um Statistiken über Sammlungen und Datenbanken sowie die Datenmenge zu erhalten.
Quelle: opennet.ru
