Izdanje FerretDB 0.1, implementacije MongoDB-a temeljene na PostgreSQL DBMS-u

Objavljeno je izdanje projekta FerretDB 0.1 (bivši MangoDB), što vam omogućuje da zamijenite DBMS MongoDB orijentiran na dokumente s PostgreSQL bez izmjena koda aplikacije. FerretDB je implementiran kao proxy poslužitelj koji prevodi pozive prema MangoDB-u u SQL upite za PostgreSQL, dopuštajući da se PostgreSQL koristi kao stvarna pohrana. Kod je napisan u Go i distribuiran pod licencom Apache 2.0.

Potreba za migracijom može nastati zbog prelaska MongoDB-a na vlasničku SSPL licencu, koja se temelji na AGPLv3 licenci, ali nije otvorena, budući da sadrži diskriminirajući zahtjev za isporuku pod SSPL licencom ne samo samog koda aplikacije, već i izvorni kod svih komponenti uključenih u pružanje usluge oblaka.

Ciljana publika FerretDB-a su korisnici koji ne koriste napredne mogućnosti MongoDB-a u svojim aplikacijama, već žele koristiti potpuno otvoreni softverski stog. U trenutnoj fazi razvoja, FerretDB još uvijek podržava samo dio MongoDB mogućnosti koje se najčešće koriste u tipičnim aplikacijama. U budućnosti planiraju postići potpunu kompatibilnost s upravljačkim programima za MongoDB i pružiti mogućnost korištenja FerretDB-a kao transparentne zamjene za MongoDB.

Podsjetimo se da MongoDB zauzima nišu između brzih i skalabilnih sustava koji rade na podacima u formatu ključ/vrijednost i relacijskih DBMS-ova, funkcionalnih i praktičnih u generiranju upita. MongoDB podržava pohranjivanje dokumenata u formatu sličnom JSON-u, ima prilično fleksibilan jezik za generiranje upita, može stvoriti indekse za razne pohranjene atribute, učinkovito omogućuje pohranjivanje velikih binarnih objekata, podržava bilježenje operacija za promjenu i dodavanje podataka u bazu podataka, može rad u skladu s paradigmom Map/Reduce, podržava replikaciju i izgradnju konfiguracija otpornih na greške.

Izdanje FerretDB 0.1.0 potpuno je redizajniralo metodu dohvaćanja podataka iz PostgreSQL-a. Prethodno je za svaki dolazni MongoDB zahtjev generiran jedan SQL upit prema PostgreSQL-u, koristeći funkcije za rad s JSON formatom i filtriranje rezultata na strani PostgreSQL-a. Zbog razlika u semantici PostgreSQL i MongoDB json funkcija, došlo je do odstupanja u ponašanju prilikom usporedbe i sortiranja različitih tipova. Kako bi se riješio ovaj problem, podaci se sada redundantno dohvaćaju iz PostgreSQL-a, a rezultat se filtrira na strani FerretDB-a, što je omogućilo repliciranje ponašanja MongoDB-a u većini situacija.

Cijena povećane kompatibilnosti bilo je smanjenje performansi, za koje se očekuje da će u budućim izdanjima kompenzirati selektivnim filtriranjem na strani FerretDB-a samo upite za koje postoji odstupanje u ponašanju. Na primjer, upit "db.collection.find({_id: 'some-id-value'})" može se u potpunosti obraditi u PostgreSQL-u. Primarni cilj projekta u ovoj fazi razvoja je postizanje kompatibilnosti s MongoDB-om, a performanse su za sada potisnute u drugi plan. Među funkcionalnim promjenama u novoj verziji ističe se podrška za sve bitne operatore, operator usporedbe “$eq”, kao i operatore “$elemMatch” i “$bitsAllClear”.

Izvor: opennet.ru

Dodajte komentar