S'ha publicat el llançament del projecte FerretDB 0.1 (anteriorment MangoDB), que us permet substituir el DBMS MongoDB orientat a documents per PostgreSQL sense fer canvis al codi de l'aplicació. FerretDB s'implementa com a servidor intermediari que tradueix les trucades a MangoDB en consultes SQL a PostgreSQL, permetent que PostgreSQL s'utilitzi com a emmagatzematge real. El codi està escrit a Go i es distribueix sota la llicència Apache 2.0.
La necessitat de migració pot sorgir a causa de la transició de MongoDB a una llicència SSPL propietat, que es basa en la llicència AGPLv3, però no està oberta, ja que conté un requisit discriminatori per lliurar sota la llicència SSPL no només el codi de l'aplicació, sinó també el codi font de tots els components implicats en la prestació del servei al núvol.
El públic objectiu de FerretDB són els usuaris que no utilitzen les capacitats avançades de MongoDB a les seves aplicacions, però volen utilitzar una pila de programari completament oberta. En l'etapa actual de desenvolupament, FerretDB encara només admet una part de les capacitats de MongoDB que s'utilitzen amb més freqüència a les aplicacions típiques. En el futur, tenen previst aconseguir una compatibilitat total amb els controladors de MongoDB i oferir la possibilitat d'utilitzar FerretDB com a substitut transparent de MongoDB.
Recordem que MongoDB ocupa un nínxol entre sistemes ràpids i escalables que operen sobre dades en format clau/valor, i DBMS relacionals, funcionals i còmodes per generar consultes. MongoDB admet l'emmagatzematge de documents en un format semblant a JSON, té un llenguatge bastant flexible per generar consultes, pot crear índexs per a diversos atributs emmagatzemats, proporciona de manera eficient l'emmagatzematge d'objectes binaris grans, admet el registre d'operacions per canviar i afegir dades a la base de dades, pot treballar d'acord amb el paradigma Map/Reduce, admet la replicació i la creació de configuracions tolerants a errors.
El llançament de FerretDB 0.1.0 va redissenyar completament el mètode per recuperar dades de PostgreSQL. Anteriorment, per a cada sol·licitud MongoDB entrant, es generava una consulta SQL a PostgreSQL, utilitzant funcions per treballar amb el format JSON i filtrar els resultats al costat de PostgreSQL. A causa de les diferències en la semàntica de les funcions json de PostgreSQL i MongoDB, hi va haver una discrepància en el comportament en comparar i ordenar diferents tipus. Per resoldre aquest problema, ara les dades s'obtenen de manera redundant de PostgreSQL i el resultat es filtra pel costat de FerretDB, cosa que va permetre replicar el comportament de MongoDB en la majoria de situacions.
El preu de l'augment de la compatibilitat va ser una disminució del rendiment, que en futures versions esperen compensar filtrant selectivament al costat de FerretDB només les consultes per a les quals hi ha una discrepància en el comportament. Per exemple, la consulta "db.collection.find({_id: 'some-id-value'})" es pot processar completament a PostgreSQL. L'objectiu principal del projecte en aquesta fase de desenvolupament és aconseguir la compatibilitat amb MongoDB, i el rendiment queda relegat de moment a un segon pla. Entre els canvis funcionals de la nova versió, es destaca el suport per a tots els operadors de bits, l'operador de comparació "$eq", així com els operadors "$elemMatch" i "$bitsAllClear".
Font: opennet.ru
