FerretDB 0.1 väljalase, PostgreSQL DBMS-il põhinev MongoDB rakendus

Avaldatud on FerretDB 0.1 projekti (endine MangoDB) väljalase, mis võimaldab teil asendada dokumendile orienteeritud DBMS MongoDB PostgreSQL-iga ilma rakenduse koodis muudatusi tegemata. FerretDB on rakendatud puhverserverina, mis tõlgib MangoDB kõned SQL-päringuteks PostgreSQL-i, võimaldades kasutada PostgreSQL-i tegeliku salvestusruumina. Kood on kirjutatud Go-s ja seda levitatakse Apache 2.0 litsentsi all.

Vajadus migratsiooni järele võib tekkida seoses MongoDB üleminekuga varalisele SSPL-litsentsile, mis põhineb AGPLv3 litsentsil, kuid ei ole avatud, kuna sisaldab diskrimineerivat nõuet tarnida SSPL-litsentsi alusel mitte ainult rakenduse koodi ennast, vaid ka kõigi pilveteenuse pakkumisega seotud komponentide lähtekood.

FerretDB sihtrühmaks on kasutajad, kes ei kasuta oma rakendustes MongoDB täiustatud võimalusi, vaid soovivad kasutada täiesti avatud tarkvarapinu. Praeguses arendusetapis toetab FerretDB endiselt vaid osa MongoDB võimalustest, mida tüüpilistes rakendustes kõige sagedamini kasutatakse. Tulevikus kavatsevad nad saavutada täieliku ühilduvuse MongoDB draiveritega ja pakkuda võimalust kasutada FerretDB-d MongoDB läbipaistva asendusena.

Tuletagem meelde, et MongoDB on nišš kiirete ja skaleeritavate süsteemide vahel, mis töötavad võtme/väärtuse vormingus, ning relatsiooniliste DBMS-ide vahel, mis on funktsionaalsed ja kergesti formuleeritavad. MongoDB toetab dokumentide salvestamist JSON-laadses vormingus, päringute genereerimiseks on üsna paindlik keel, suudab luua indekseid erinevatele salvestatud atribuutidele, võimaldab tõhusalt salvestada suuri binaarobjekte, toetab toimingute logimist andmete muutmiseks ja andmebaasi lisamiseks, saab töötab vastavalt paradigmale Map/Reduce, toetab tõrketaluvusega konfiguratsioonide replikatsiooni ja ehitamist.

FerretDB 0.1.0 väljalase kujundas PostgreSQL-ist andmete toomise meetodi täielikult ümber. Varem genereeriti iga sissetuleva MongoDB päringu jaoks üks SQL-päring PostgreSQL-ile, kasutades funktsioone JSON-vorminguga töötamiseks ja tulemuste filtreerimiseks PostgreSQL-i poolel. PostgreSQL-i ja MongoDB json-funktsioonide semantika erinevuste tõttu ilmnes erinevate tüüpide võrdlemisel ja sortimisel käitumises lahknevus. Selle probleemi lahendamiseks hangitakse nüüd üleliigselt PostgreSQL-ist andmed ja tulemus filtreeritakse FerretDB poolel, mis võimaldas enamikus olukordades MongoDB käitumist korrata.

Suurenenud ühilduvuse hind oli jõudluse vähenemine, mida nad loodavad tulevastes väljaannetes kompenseerida, filtreerides FerretDB poolel valikuliselt ainult päringuid, mille käitumises on lahknevusi. Näiteks päringut "db.collection.find({_id: 'some-id-value'})" saab täielikult töödelda PostgreSQL-is. Projekti esmane eesmärk selles arendusfaasis on saavutada ühilduvus MongoDB-ga ja jõudlus on praegu tagaplaanile jäetud. Uue versiooni funktsionaalsete muudatuste hulgas märgitakse ära kõigi bitioperaatorite tugi, võrdlusoperaator "$eq" ning operaatorid "$elemMatch" ja "$bitsAllClear".

Allikas: opennet.ru

Lisa kommentaar