Lansarea proiectului FerretDB 0.1 (fostul MangoDB) a fost publicată, permițându-vă să înlocuiți DBMS MongoDB orientat spre documente cu PostgreSQL fără a face modificări codului aplicației. FerretDB este implementat ca un server proxy care traduce apelurile către MangoDB în interogări SQL către PostgreSQL, permițând ca PostgreSQL să fie utilizat ca stocare reală. Codul este scris în Go și distribuit sub licența Apache 2.0.
Necesitatea de migrare poate apărea din cauza tranziției MongoDB la o licență SSPL proprietară, care se bazează pe licența AGPLv3, dar nu este deschisă, deoarece conține o cerință discriminatorie de a furniza sub licența SSPL nu numai codul aplicației în sine, ci și codul sursă al tuturor componentelor implicate în serviciul cloud de furnizare.
Publicul țintă al FerretDB este reprezentat de utilizatorii care nu folosesc capabilitățile avansate ale MongoDB în aplicațiile lor, dar doresc să utilizeze o stivă de software complet deschisă. În stadiul actual de dezvoltare, FerretDB încă acceptă doar o parte din capabilitățile MongoDB care sunt cele mai des folosite în aplicațiile tipice. În viitor, intenționează să obțină compatibilitate deplină cu driverele pentru MongoDB și să ofere posibilitatea de a utiliza FerretDB ca înlocuitor transparent pentru MongoDB.
Să ne amintim că MongoDB ocupă o nișă între sistemele rapide și scalabile care operează date în format cheie/valoare și SGBD-uri relaționale care sunt funcționale și ușor de formulat interogări. MongoDB acceptă stocarea documentelor într-un format asemănător JSON, are un limbaj destul de flexibil pentru generarea de interogări, poate crea indecși pentru diverse atribute stocate, oferă în mod eficient stocarea de obiecte binare mari, acceptă înregistrarea operațiunilor pentru modificarea și adăugarea datelor în baza de date, poate lucrează în conformitate cu paradigma Map/Reduce, acceptă replicarea și construirea de configurații tolerante la erori.
Lansarea FerretDB 0.1.0 a reproiectat complet metoda de preluare a datelor din PostgreSQL. Anterior, pentru fiecare solicitare MongoDB primită, a fost generată o interogare SQL către PostgreSQL, folosind funcții pentru lucrul cu formatul JSON și filtrarea rezultatelor pe partea PostgreSQL. Datorită diferențelor de semantică a funcțiilor json PostgreSQL și MongoDB, a existat o discrepanță în comportament la compararea și sortarea diferitelor tipuri. Pentru a rezolva această problemă, datele sunt acum preluate redundant de la PostgreSQL, iar rezultatul este filtrat pe partea FerretDB, ceea ce a făcut posibilă replicarea comportamentului MongoDB în majoritatea situațiilor.
Prețul compatibilității sporite a fost o scădere a performanței, pe care în versiunile viitoare se așteaptă să o compenseze prin filtrarea selectivă pe partea FerretDB numai a interogărilor pentru care există o discrepanță în comportament. De exemplu, interogarea „db.collection.find({_id: ‘some-id-value’})” poate fi procesată în întregime în PostgreSQL. Scopul principal al proiectului în această etapă de dezvoltare este acela de a obține compatibilitatea cu MongoDB, iar performanța este retrogradată pe fundal pentru moment. Printre modificările funcționale din noua versiune se remarcă suportul pentru toți operatorii de biți, operatorul de comparație „$eq”, precum și operatorii „$elemMatch” și „$bitsAllClear”.
Sursa: opennet.ru
