nyligs dager ble nyheten om lanseringen av prosjektet kunngjort FerretDB, (tidligere MangoDB), som lar deg erstatte MongoDBs dokumentorienterte DBMS med PostgreSQL uten å gjøre noen endringer i applikasjonskoden.
FerretDB er implementert som en proxy-server som oversetter kall til MongoDB til SQL-spørringer til PostgreSQL, slik at du kan bruke PostgreSQL som den faktiske lagringen.
FerretDB (tidligere MangoDB) ble grunnlagt for å bli den de facto åpen kildekode-erstatning for MongoDB. FerretDB er en åpen kildekode-proxy som konverterer MongoDB-trådprotokollspørringer til SQL, ved å bruke PostgreSQL som databasemotor.
Behovet for migrering kan oppstå på grunn av overgangen av MongoDB til en ikke-fri SSPL-lisens, som er basert på AGPLv3-lisensen, men ikke er åpen kildekode, da den inneholder et diskriminerende krav om å gi under SSPL-lisensen ikke bare applikasjonen av selve koden, men også kildekodene til alle komponentene som er involvert i å levere skytjenesten.
Målgruppen for FerretDB er brukere som ikke bruker de avanserte funksjonene til MongoDB i sine applikasjoner, men ønsker å bruke en helt åpen programvarestabel.
I det nåværende utviklingsstadiet, FerretDB den støtter fortsatt bare deler av MongoDB-funksjonene som oftest brukes i typiske applikasjoner. I fremtiden planlegger de å oppnå full førerstøtte for MongoDB og gi muligheten til å bruke FerretDB som en transparent erstatning for MongoDB.
Det skal huskes MongoDB opptar en nisje blant raske og skalerbare systemer som opererer på data i nøkkel/verdi-format, og relasjons-DBMS, funksjonelle og praktiske for å generere spørringer.
De fleste MongoDB-brukere trenger ikke mange av de avanserte funksjonene som MongoDB tilbyr; imidlertid trenger de en enkel å bruke åpen kildekode-databaseløsning. FerretDB erkjenner dette, og er her for å fylle det gapet.
MongoDB støtter lagring av dokumenter i et JSON-lignende format, har et ganske fleksibelt språk for å generere spørringer, kan lage indekser for ulike lagrede attributter, gir effektiv binær lagring av store objekter, støtte logging av operasjoner for å endre og legge til data til databasen kan den fungere i henhold til Map/Reduce-paradigmet, den støtter replikering og konstruksjon av feiltolerante konfigurasjoner.
I utgivelsen av FerretDB 0.1.0 bemerkes det at fullstendig redesignet måten PostgreSQL-data hentes på. Tidligere, for hver innkommende MongoDB-forespørsel, ble det generert en SQL til PostgreSQL-spørring, ved å bruke funksjoner for å jobbe med JSON-formatet og filtrere resultatene på PostgreSQL-siden.
På grunn av forskjellene i semantikken til PostgreSQL og MongoDB json-funksjoner, det var et avvik i oppførsel når man sammenligner og bestiller ulike typer. For å løse dette problemet trekkes det nå ut et utvalg overflødige data fra PostgreSQL og filtreringen av resultatet gjøres på FerretDB-siden, noe som gjorde det mulig å gjenta oppførselen til MongoDB i de fleste situasjoner.
Prisen for økt kompatibilitet var en ytelsesstraff, som i fremtidige utgivelser forventes å bli oppveid av selektiv filtrering på FerretDB-siden av kun spørringer som det er adferdsforskjeller for.
For eksempel kan søket "db.collection.find({_id: 'some-id-value'})" behandles fullstendig i PostgreSQL. Hovedmålet med prosjektet på dette utviklingsstadiet er å oppnå kompatibilitet med MongoDB, og ytelsen er fortsatt henvist til bakgrunnen.
Av funksjonsendringene i den nye versjonen er det støtte for alle bitvise operatorer, sammenligningsoperatoren «$e», samt operatorene «$elemMatch» og «$bitsAllClear».
Endelig for de som er interessert i å vite mer om det, bør de vite at koden er skrevet i Go og distribueres under Apache 2.0-lisensen og du kan sjekke koden i den følgende lenken.