Väljaanne FerretDB 0.1, MongoDB teostus PostgreSQL andmebaasi põhjal

Avaldasime projekti FerretDB 0.1 (endine MangoDB), mis võimaldab asendada dokumentide põhise andmebaasi MongoDB PostgreSQL-iga, ilma et tuleks teha muudatusi rakenduste koodis. FerretDB on rakendatud proksiserverina, mis tõlgib MangoDB päringud SQL-päringuteks PostgreSQL-ile, võimaldades PostgreSQL-i kasutada tegeliku salvestusena. Kood on kirjutatud Go keeles ja levitatakse Apache 2.0 litsentsi alusel.

Migratsioonivajadus võib tekkida seoses MongoDB üleminekuga mittetäielikult avatud SSPL litsentsile, mis põhineb AGPLv3 litsentsil, kuid ei ole avatud, kuna see sisaldab diskrimineerivat nõuet anda mitte ainult rakenduse enda kood, vaid ka kõigi komponentide allikaid, mis on seotud pilveteenuse osutamisega, SSPL litsentsi alusel.

FerretDB sihtgrupp on kasutajad, kes ei kasuta oma rakendustes MongoDB laiendatud võimalusi, kuid soovivad kasutada täielikult avatud tarkvarastakki. FerretDB toetab praegu alles osa MongoDB võimalustest, mis on kõige sagedamini kasutatavad tüüpilistes rakendustes. Tulevikus plaanivad nad saavutada täieliku ühilduvuse MongoDB draiveritega ning pakkuda võimalust kasutada FerretDB-d MongoDB läbipaistva asendajana.

MongDB asub kiirete ja skaaleeritavate süsteemide nišši, mis töötlevad andmeid võtme/väärtuse formaadis ning relatsioonilised andmebaasid, mis on funktsionaalsed ja mugavad päringute koostamisel. MongoDB toetab dokumentide salvestamist JSON-sarnases formaadis, omab piisavalt paindlikku päringute keelt, suudab luua indekseid erinevate salvestatud atribuutide jaoks, tõhusalt talletab suuri binaarseid objekte, toetab andmebaasis andmete muutmise ja lisamise toimingute logimist, suudab töötada Map/Reduce paradigma kohaselt, toetab replikatsiooni ja kõrgelt saadud konfiguratsioonide loomist.

FerretDB 0.1.0 versioonis on andmete ekstraktsioon PostgreSQL-ist täielikult ümber kujundatud. Varem genereeriti iga MongoDB küsimuse jaoks üks SQL päring PostgreSQL-ile, mis kasutas JSON formaadi töötlemiseks funktsioone ja filtreeris tulemusi PostgreSQL-i poolel. PostgreSQL-i ja MongoDB json-funktsioonide semantika erinevuste tõttu täheldati erinevat käitumist erinevate tüüpide võrdlemisel ja sorteerimisel. Selle probleemi lahendamiseks ekstraktsioneeritakse PostgreSQL-ist nüüd üleliigne andmevalik ja tulemuste filtreerimine toimub FerretDB poolel, mis võimaldab enamikus olukordades MongoDB käitumist korrata.

Ühilduvuse suurendamine tõi kaasa jõudluse languse, mida tulevastes väljaannetes kavatsetakse kompenseerida FerretDB poolel valikuliselt filtreerides ainult neid päringuid, millega käitumises esineb lahknevusi. Näiteks päring "db.collection.find({_id: 'some-id-value'})" saab täielikult töödelda PostgreSQLis. Projekti peamine eesmärk antud arenguetapis on saavutada ühilduvus MongoDB-ga, samas kui jõudlus on hetkel teisejärguline. Uues versioonis on funktsionaalsete muudatuste seas toetatud kõiki bititegureid, võrdlusoperaatorit "$eq", samuti operaatorid "$elemMatch" ja "$bitsAllClear".

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster