Utgivelse av FerretDB 0.1, en implementering av MongoDB basert på PostgreSQL DBMS

Utgivelsen av FerretDB 0.1-prosjektet (tidligere MangoDB) har blitt publisert, slik at du kan erstatte den dokumentorienterte DBMS MongoDB med PostgreSQL uten å gjøre endringer i applikasjonskoden. FerretDB er implementert som en proxy-server som oversetter kall til MangoDB til SQL-spørringer til PostgreSQL, slik at PostgreSQL kan brukes som den faktiske lagringen. Koden er skrevet i Go og distribuert under Apache 2.0-lisensen.

Behovet for migrering kan oppstå på grunn av MongoDBs overgang til en proprietær SSPL-lisens, som er basert på AGPLv3-lisensen, men som ikke er åpen, siden den inneholder et diskriminerende krav om å levere under SSPL-lisensen ikke bare selve applikasjonskoden, men også kildekoden til alle komponentene som er involvert i skytjenesten.

FerretDBs målgruppe er brukere som ikke bruker de avanserte mulighetene til MongoDB i sine applikasjoner, men ønsker å bruke en helt åpen programvarestabel. På det nåværende utviklingsstadiet støtter FerretDB fortsatt bare deler av MongoDB-funksjonene som oftest brukes i typiske applikasjoner. I fremtiden planlegger de å oppnå full kompatibilitet med drivere for MongoDB og gi muligheten til å bruke FerretDB som en transparent erstatning for MongoDB.

La oss huske at MongoDB opptar en nisje mellom raske og skalerbare systemer som opererer data i nøkkel/verdi-format, og relasjonelle DBMS-er som er funksjonelle og enkle å formulere spørringer. 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 effektivt lagring av store binære objekter, støtter logging av operasjoner for å endre og legge til data til databasen, kan arbeid i samsvar med paradigmet Kart/Reduser, støtter replikering og konstruksjon av feiltolerante konfigurasjoner.

Utgivelsen av FerretDB 0.1.0 redesignet metoden for å hente data fra PostgreSQL fullstendig. Tidligere, for hver innkommende MongoDB-forespørsel, ble én SQL-spørring generert til PostgreSQL, ved å bruke funksjoner for å jobbe med JSON-formatet og filtrere resultatene på PostgreSQL-siden. På grunn av forskjeller i semantikken til PostgreSQL- og MongoDB json-funksjoner, var det et avvik i oppførsel når man sammenlignet og sorterte forskjellige typer. For å løse dette problemet hentes data nå redundant fra PostgreSQL, og resultatet filtreres på FerretDB-siden, noe som gjorde det mulig å replikere oppførselen til MongoDB i de fleste situasjoner.

Prisen på økt kompatibilitet var en nedgang i ytelsen, som i fremtidige utgivelser de forventer å kompensere ved selektivt å filtrere på FerretDB-siden kun spørringer som det er uoverensstemmelser i oppførsel for. For eksempel kan søket "db.collection.find({_id: 'some-id-value'})" behandles i sin helhet i PostgreSQL. Hovedmålet med prosjektet på dette utviklingsstadiet er å oppnå kompatibilitet med MongoDB, og ytelsen er henvist til bakgrunnen foreløpig. Blant funksjonsendringene i den nye versjonen er støtte for alle bitoperatorer, sammenligningsoperatoren «$eq», samt «$elemMatch» og «$bitsAllClear»-operatorene nevnt.

Kilde: opennet.ru

Legg til en kommentar