Udgivet er version 0.1 af FerretDB-projektet (tidligere MangoDB), som gør det muligt at erstatte den dokumentorienterede databasesystem MongoDB med PostgreSQL uden ændringer i applikationskoden. FerretDB implementeres som en proxyserver, der oversætter forespørgsler til MangoDB til SQL-forespørgsler til PostgreSQL, hvilket muliggør brugen af PostgreSQL som det faktiske lagringssystem. Koden er skrevet i Go og distribueres under Apache 2.0-licensen.
Behovet for migration kan opstå som følge af, at MongoDB overgår til den ikke-frie licens SSPL, som er baseret på AGPLv3-licensen, men ikke er åben, da den indeholder diskriminerende krav om levering under SSPL-licensen af både selve applikationskoden og kildekoden til alle komponenter involveret i levering af cloudtjeneste.
FerretDBs målgruppe omfatter brugere, der ikke benytter de avancerede funktioner i MongoDB i deres applikationer, men ønsker at anvende en fuldstændig åben softwarestak. I den nuværende udviklingsfase understøtter FerretDB kun en del af de funktioner, der oftest anvendes i typiske applikationer. I fremtiden planlægges det at opnå fuld kompatibilitet med drivere til MongoDB og give mulighed for at bruge FerretDB som en gennemsigtig erstatning for MongoDB.
Det skal bemærkes, at MongoDB befinder sig i en niche mellem hurtige og skalerbare systemer, der opererer med data i nøgle/værdi-format, og relationelle databasesystemer, som er funktionelle og brugervenlige til at formulere forespørgsler. MongoDB understøtter opbevaring af dokumenter i et JSON-lignende format, har et ret fleksibelt sprog til at formulere forespørgsler, kan oprette indekser for forskellige gemte attributter, sikrer effektiv opbevaring af store binære objekter, understøtter logning af operationer vedrørende ændringer og tilføjelser af data i databasen, kan arbejde i overensstemmelse med Map/Reduce-paradigmet og understøtter replikation og opbygning af failover-konfigurationer.
I udgivelsen af FerretDB 0.1.0 er metoden til dataudtrækning fra PostgreSQL blevet fuldstændig redesignet. Tidligere blev der for hver indkommende MongoDB-anmodning genereret én SQL-anmodning til PostgreSQL, der brugte funktioner til at arbejde med JSON-formatet og udførte filtrering af resultaterne på PostgreSQL-siden. På grund af forskelle i semantikken af json-funktioner i PostgreSQL og MongoDB blev der observeret uoverensstemmelser i adfærden ved sammenligning og sortering af forskellige typer. For at løse dette problem hentes der nu et overflødigt datasæt fra PostgreSQL, mens filtrering af resultatet udføres på FerretDB-siden, hvilket gør det muligt at efterligne MongoDB's adfærd i de fleste situationer.
Prisen for øget kompatibilitet er en nedsat ydeevne, som man forventer at kompensere for i fremtidige udgivelser gennem selektiv filtrering på FerretDB-siden, kun for anmodninger, hvor der observeres en adfærdsmæssig uoverensstemmelse. For eksempel kan anmodningen "db.collection.find({_id: 'some-id-value'})" behandles fuldstændigt i PostgreSQL. Det primære mål for projektet på dette udviklingstrin er at opnå kompatibilitet med MongoDB, mens ydeevnen i øjeblikket træder i baggrunden. Blandt de funktionelle ændringer i den nye version bemærkes understøttelse af alle bitoperatorer, sammenligningsoperatoren "$eq", samt operatorerne "$elemMatch" og "$bitsAllClear".
Kilde: opennet.ru
