Frigivelse af FerretDB 0.1, MongoDB-implementering baseret på PostgreSQL DBMS

Frigivelsen af ​​FerretDB 0.1-projektet (tidligere MangoDB) er blevet offentliggjort, hvilket giver dig mulighed for at erstatte det dokumentorienterede DBMS MongoDB med PostgreSQL uden at foretage ændringer i applikationskoden. FerretDB er implementeret som en proxyserver, der oversætter opkald til MangoDB til SQL-forespørgsler til PostgreSQL, hvilket tillader PostgreSQL at blive brugt som den faktiske lagring. Koden er skrevet i Go og distribueret under Apache 2.0-licensen.

Behovet for migrering kan opstå på grund af MongoDB's overgang til en proprietær SSPL-licens, som er baseret på AGPLv3-licensen, men som ikke er åben, da den indeholder et diskriminerende krav om at levere under SSPL-licensen ikke kun selve applikationskoden, men også kildekoden for alle komponenter, der er involveret i leveringsskytjenesten.

FerretDBs målgruppe er brugere, der ikke bruger de avancerede muligheder i MongoDB i deres applikationer, men ønsker at bruge en helt åben softwarestak. På det nuværende udviklingstrin understøtter FerretDB stadig kun en del af MongoDB-funktionerne, der oftest bruges i typiske applikationer. I fremtiden planlægger de at opnå fuld kompatibilitet med drivere til MongoDB og give mulighed for at bruge FerretDB som en gennemsigtig erstatning for MongoDB.

Husk, at MongoDB indtager en niche mellem hurtige og skalerbare systemer, der opererer på data i nøgle/værdi-formatet, og relationel DBMS, funktionel og praktisk til at generere forespørgsler. MongoDB understøtter lagring af dokumenter i et JSON-lignende format, har et ret fleksibelt sprog til generering af forespørgsler, kan oprette indekser til forskellige lagrede attributter, giver effektivt lagring af store binære objekter, understøtter logning af operationer for at ændre og tilføje data til databasen, kan arbejde i overensstemmelse med paradigmet Map/Reduce, understøtter replikering og opbygning af fejltolerante konfigurationer.

Frigivelsen af ​​FerretDB 0.1.0 redesignede fuldstændig metoden til at hente data fra PostgreSQL. Tidligere blev der for hver indkommende MongoDB-anmodning genereret en SQL-forespørgsel til PostgreSQL ved hjælp af funktioner til at arbejde med JSON-formatet og filtrere resultaterne på PostgreSQL-siden. På grund af forskelle i semantikken for PostgreSQL- og MongoDB json-funktioner, var der en uoverensstemmelse i adfærd ved sammenligning og sortering af forskellige typer. For at løse dette problem hentes data nu redundant fra PostgreSQL, og resultatet filtreres på FerretDB-siden, hvilket gjorde det muligt at replikere MongoDBs adfærd i de fleste situationer.

Prisen for øget kompatibilitet var et fald i ydeevnen, som de i fremtidige udgivelser forventer at kompensere ved selektivt at filtrere på FerretDB-siden kun forespørgsler, for hvilke der er en uoverensstemmelse i adfærd. For eksempel kan forespørgslen "db.collection.find({_id: 'some-id-value'})" behandles helt i PostgreSQL. Det primære mål med projektet på dette udviklingstrin er at opnå kompatibilitet med MongoDB, og ydeevnen er foreløbig henvist til baggrunden. Blandt de funktionelle ændringer i den nye version er understøttelse af alle bit-operatorer, "$eq"-sammenligningsoperatoren, samt "$elemMatch" og "$bitsAllClear"-operatorerne noteret.

Kilde: opennet.ru

Tilføj en kommentar