Muva njes izinsuku kumenyezelwe izindaba zokwethulwa kwephrojekthi FerretDB, (owayekade eyi-MangoDB), ekuvumela ukuthi umiselele i-DBMS egxile kumadokhumenti ye-MongoDB ufake i-PostgreSQL ngaphandle kokwenza izinguquko kukhodi yakho yesicelo.
I-FerretDB isetshenziswa njengeseva elibamba ehumusha izingcingo eziya ku-MongoDB ziyise imibuzo ye-SQL ku-PostgreSQL, okukuvumela ukuthi usebenzise i-PostgreSQL njengendawo yokulondoloza yangempela.
I-FerretDB (eyayiyi-MangoDB) yasungulwa ukuze ibe umthombo ovulekile we-MongoDB. I-FerretDB iwumthombo ovulekile wommeleli oguqula imibuzo ye-MongoDB wire protocol ibe yi-SQL, isebenzisa i-PostgreSQL njengenjini yolwazi.
Isidingo sokufuduka singase siphakame ngenxa yokushintshwa kwe-MongoDB iye elayisensini ye-SSPL engakhululekile, esekelwe kulayisensi ye-AGPLv3, kodwa engeyona umthombo ovulekile, njengoba iqukethe imfuneko ebandlululayo yokuhlinzeka ngaphansi kwelayisensi ye-SSPL hhayi isicelo kuphela. yekhodi ngokwayo, kodwa futhi namakhodi omthombo azo zonke izingxenye ezihilelekile ekunikezeni isevisi yamafu.
Izithameli eziqondiswe ku-FerretDB abasebenzisi abangazisebenzisi izici ezithuthukile ze-MongoDB ezinhlelweni zabo, kodwa bafuna ukusebenzisa isitaki sesofthiwe esivuleke ngokuphelele.
Esigabeni samanje sokuthuthuka, i-FerretDB isasekela kuphela ingxenye yezici ze-MongoDB esetshenziswa kakhulu ezinhlelweni ezijwayelekile. Ngokuzayo, bahlela ukuzuza ukwesekwa okuphelele kwabashayeli be-MongoDB futhi banikeze amandla okusebenzisa i-FerretDB njengokumiselela okusobala kwe-MongoDB.
Kufanele kukhunjulwe lokho I-MongoDB ithatha i-niche phakathi kwezinhlelo ezisheshayo nezingakalayo esebenza kudatha ngefomethi yokhiye/inani, kanye ne-DBMS ehlobene, esebenzayo futhi elula ekukhiqizeni imibuzo.
Abasebenzisi abaningi be-MongoDB abazidingi izici ezithuthukile ezinikezwa yi-MongoDB; kodwa-ke, badinga isisombululo sesizindalwazi esivulekile sokusebenzisa umthombo ovulekile. Ngokubona lokhu, iFerretDB ilapha ukuze igcwalise leso sikhala.
I-MongoDB isekela ukugcinwa kwamadokhumenti ngefomethi efana ne-JSON, inolimi oluvumelana nezimo ngendlela efanele ukuze ikhiqize imibuzo, ingakha izinkomba zezibaluli ezihlukahlukene ezigciniwe, inikeza isitoreji esisebenzayo kanambambili sento enkulu, sekela ukuloga kwemisebenzi ukuze uguqule futhi wengeze idatha ku-database, ingasebenza ngokuya nge-paradigm ye-Map/Nciphisa, isekela ukuphindaphinda kanye nokwakhiwa kokucushwa okubekezelela amaphutha.
Ekukhishweni kwe-FerretDB 0.1.0 kuphawulwe ukuthi iklanywe kabusha ngokuphelele indlela idatha ye-PostgreSQL ebuyiselwa ngayo. Ngaphambilini, esicelweni ngasinye se-MongoDB esingenayo, umbuzo we-SQL kuya ku-PostgreSQL wawukhiqizwa, kusetshenziswa imisebenzi ukusebenza ngefomethi ye-JSON nokuhlunga imiphumela ohlangothini lwe-PostgreSQL.
Ngenxa yomehluko ku-semantics ye-PostgreSQL kanye nemisebenzi ye-MongoDB json, kwaba khona ukuphambana ekuziphatheni lapho uqhathanisa futhi uhlela izinhlobo ezahlukene. Ukuze kuxazululwe le nkinga, isampula yedatha engasasebenzi manje isikhishiwe ku-PostgreSQL futhi ukuhlungwa komphumela kwenziwa ohlangothini lwe-FerretDB, okwenze kwaba nokwenzeka ukuphinda ukuziphatha kwe-MongoDB ezimeni eziningi.
Intengo yokuhambisana okwenyukile kwakuyinhlawulo yokusebenza, okulindeleke ukuthi ekukhishweni okuzayo kuxazululwe ngokuhlunga okukhethiwe ohlangothini lwe-FerretDB lwemibuzo kuphela okukhona ukwehluka kokuziphatha.
Isibonelo, umbuzo othi "db.collection.find({_id: 'some-id-value'})" ungacutshungulwa ngokugcwele ku-PostgreSQL. Umgomo oyinhloko wephrojekthi kulesi sigaba sokuthuthuka ukuzuza ukusebenzisana ne-MongoDB, futhi ukusebenza kusahlehliselwe ngemuva.
Ezinguqukweni zokusebenza enguqulweni entsha, kukhona usekelo lwabo bonke opharetha be-bitwise, u-opharetha we-"$e" wokuqhathanisa, kanye nama-opharetha we-"$elemMatch" kanye ne-"$bitsAllClear".
Okokugcina kulabo abanentshisekelo yokwazi kabanzi ngalo, kufanele bazi ukuthi ikhodi ibhalwe ku-Go futhi isakazwa ngaphansi kwelayisensi ye-Apache 2.0 kanye ungabheka ikhodi yayo kusixhumanisi esilandelayo.