Lansarea FerretDB 0.1, implementarea MongoDB bazată pe sistemul de gestionare a bazelor de date PostgreSQL

A fost publicat lansarea proiectului FerretDB 0.1 (fost MangoDB), care permite înlocuirea sistemului de gestionare a bazelor de date orientate pe documente MongoDB cu PostgreSQL fără a aduce modificări în codul aplicațiilor. FerretDB este implementat ca un server proxy, care translatează cererile către MangoDB în interogări SQL către PostgreSQL, permițând utilizarea PostgreSQL ca depozit efectiv. Codul este scris în limbajul Go și este distribuit sub licența Apache 2.0.

Necesitatea migrației poate apărea din cauza trecerii MongoDB la o licență neagră SSPL, care se bazează pe licența AGPLv3, dar nu este deschisă, deoarece conține o cerință discriminatorie de livrare sub licența SSPL nu doar a codului aplicației în sine, ci și a codurilor sursă ale tuturor componentelor implicate în furnizarea unui serviciu cloud.

Ca audiență țintă, FerretDB vizează utilizatorii care nu folosesc în aplicațiile lor funcționalitățile avansate ale MongoDB, dar doresc să folosească un stivă software complet deschisă. În stadiul actual de dezvoltare, FerretDB suportă doar o parte din funcționalitățile MongoDB, cele mai utilizate în aplicații tipice. În viitor, se preconizează atingerea unei compatibilități complete cu driverele pentru MongoDB și oferirea posibilității de a folosi FerretDB ca o înlocuire transparentă pentru MongoDB.

Amintim că MongoDB ocupă o nișă între sistemele rapide și scalabile care operează date în format cheie/valoare și sistemele relationale, funcționale și convenabile pentru formarea interogărilor. MongoDB suportă stocarea documentelor în format similar JSON, are un limbaj destul de flexibil pentru formarea interogărilor, poate crea indecși pentru diferite atribute stocate, asigură eficient stocarea obiectelor binare mari, suportă jurnalizarea operațiunilor de modificare și adăugare a datelor în baza de date, poate funcționa conform paradigmei Map/Reduce, suportă replicarea și construirea unor configurații tolerante la erori.

În versiunea FerretDB 0.1.0, metoda de extragere a datelor din PostgreSQL a fost complet refăcută. Anterior, pentru fiecare cerere primită de la MongoDB, se genera o singură interogare SQL către PostgreSQL, utilizând funcții pentru a lucra cu formatul JSON și efectuând filtrarea rezultatelor la nivelul PostgreSQL. Din cauza diferențelor în semantica funcțiilor json ale PostgreSQL și MongoDB, s-au observat discrepanțe în comportament la compararea și sortarea diferitelor tipuri. Pentru a rezolva această problemă, acum se extrage un set de date redundant din PostgreSQL, iar filtrarea rezultatelor se realizează la nivelul FerretDB, ceea ce a permis replicarea comportamentului MongoDB în majoritatea situațiilor.

Prețul pentru creșterea compatibilității a fost o scădere a performanței, care, în versiunile viitoare, se intenționează a fi compensată prin filtrarea selectivă la nivelul FerretDB, doar pentru cererile în care s-au observat discrepanțe de comportament. De exemplu, cererea „db.collection.find({_id: ‘some-id-value’})” poate fi procesată complet în PostgreSQL. Obiectivul principal al proiectului în această etapă de dezvoltare este de a atinge compatibilitatea cu MongoDB, iar performanța este lăsată pe un plan secundar. Printre modificările funcționale din noua versiune se numără suportul pentru toți operatorii bit cu bit, operatorul de comparare „$eq”, precum și operatorii „$elemMatch” și „$bitsAllClear”.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster