Uitgave van FerretDB 0.1, een implementatie van MongoDB gebaseerd op het PostgreSQL DBMS

De release van het FerretDB 0.1-project (voorheen MangoDB) is gepubliceerd, waardoor u de documentgeoriënteerde DBMS MongoDB kunt vervangen door PostgreSQL zonder wijzigingen aan te brengen in de applicatiecode. FerretDB is geïmplementeerd als een proxyserver die oproepen naar MangoDB vertaalt in SQL-query's naar PostgreSQL, waardoor PostgreSQL als daadwerkelijke opslag kan worden gebruikt. De code is geschreven in Go en gedistribueerd onder de Apache 2.0-licentie.

De noodzaak tot migratie kan ontstaan ​​als gevolg van de overgang van MongoDB naar een propriëtaire SSPL-licentie, die is gebaseerd op de AGPLv3-licentie, maar niet open is, omdat deze een discriminerende vereiste bevat om onder de SSPL-licentie niet alleen de applicatiecode zelf te leveren, maar ook de broncode van alle componenten die betrokken zijn bij de levering van de clouddienst.

De doelgroep van FerretDB bestaat uit gebruikers die de geavanceerde mogelijkheden van MongoDB niet in hun applicaties gebruiken, maar een volledig open softwarestack willen gebruiken. In de huidige ontwikkelingsfase ondersteunt FerretDB nog steeds slechts een deel van de MongoDB-mogelijkheden die het vaakst worden gebruikt in typische toepassingen. In de toekomst zijn ze van plan volledige compatibiliteit te bereiken met stuurprogramma's voor MongoDB en de mogelijkheid te bieden om FerretDB te gebruiken als een transparante vervanging voor MongoDB.

Laten we niet vergeten dat MongoDB een niche inneemt tussen snelle en schaalbare systemen die gegevens in sleutel/waarde-formaat verwerken, en relationele DBMS'en die functioneel zijn en gemakkelijk te formuleren vragen. MongoDB ondersteunt het opslaan van documenten in een JSON-achtig formaat, heeft een vrij flexibele taal voor het genereren van zoekopdrachten, kan indexen maken voor verschillende opgeslagen attributen, biedt efficiënt opslag van grote binaire objecten, ondersteunt het loggen van bewerkingen voor het wijzigen en toevoegen van gegevens aan de database, kan werkt volgens het paradigma Map/Reduce, ondersteunt replicatie en constructie van fouttolerante configuraties.

De release van FerretDB 0.1.0 heeft de methode voor het ophalen van gegevens uit PostgreSQL volledig opnieuw ontworpen. Voorheen werd voor elk binnenkomend MongoDB-verzoek één SQL-query gegenereerd naar PostgreSQL, waarbij functies werden gebruikt voor het werken met het JSON-formaat en het filteren van de resultaten aan de PostgreSQL-kant. Vanwege verschillen in de semantiek van PostgreSQL- en MongoDB json-functies was er een discrepantie in het gedrag bij het vergelijken en sorteren van verschillende typen. Om dit probleem op te lossen, worden gegevens nu redundant opgehaald uit PostgreSQL en wordt het resultaat gefilterd aan de FerretDB-kant, waardoor het mogelijk werd om het gedrag van MongoDB in de meeste situaties te repliceren.

De prijs van een grotere compatibiliteit was een afname van de prestaties, die ze in toekomstige releases verwachten te compenseren door selectief aan de FerretDB-kant alleen zoekopdrachten te filteren waarvoor er een discrepantie in het gedrag bestaat. De query "db.collection.find({_id: 'some-id-value'})" kan bijvoorbeeld volledig in PostgreSQL worden verwerkt. Het primaire doel van het project in deze ontwikkelingsfase is het bereiken van compatibiliteit met MongoDB, en de prestaties zijn voorlopig naar de achtergrond verbannen. Onder de functionele veranderingen in de nieuwe versie wordt ondersteuning voor alle bitoperatoren vermeld, de vergelijkingsoperator “$eq”, evenals de operatoren “$elemMatch” en “$bitsAllClear”.

Bron: opennet.ru

Voeg een reactie