Bol spustený projekt FerretDB 0.1 (bývalý MangoDB), ktorý umožňuje nahradiť dokumentovo orientovanú databázu MongoDB PostgreSQL bez zmien v kóde aplikácií. FerretDB funguje ako proxy server, ktorý prevádza dopyty z MangoDB na SQL príkazy pre PostgreSQL, čím umožňuje používať PostgreSQL ako skutočné úložisko. Kód je napísaný v programovacom jazyku Go a je distribuovaný pod licenciou Apache 2.0.
Potreba migrácie môže vzniknúť v dôsledku prechodu MongoDB na neopen-source licenciu SSPL, ktorá je založená na licencii AGPLv3, ale nie je otvorená, pretože obsahuje diskriminačné požiadavky na dodanie pod licenciou SSPL nielen kódu samotnej aplikácie, ale aj zdrojových kódov všetkých komponentov zapojených do poskytovania cloudovej služby.
Ako cieľová skupina FerretDB sú označení používatelia, ktorí vo svojich aplikáciách nevyužívajú pokročilé funkcie MongoDB, ale chcú používať úplne otvorený softvérový stack. V súčasnej fáze vývoja FerretDB zatiaľ podporuje len časť funkcií MongoDB, najčastejšie využívaných v typických aplikáciách. V budúcnosti plánujú dosiahnuť plnú kompatibilitu s ovládačmi pre MongoDB a poskytnúť možnosť používať FerretDB ako transparentnú náhradu za MongoDB.
Pripomíname, že MongoDB zaberá medzeru medzi rýchlymi a škálovateľnými systémami, ktoré spravujú dáta vo formáte kľúč/hodnota, a relačnými SDB, funkčnými a pohodlnými na vytváranie dotazov. MongoDB podporuje ukladanie dokumentov v JSON podobnom formáte, má dostatočne flexibilný jazyk na formulovanie dotazov, dokáže vytvárať indexy pre rôzne uložené atribúty, efektívne zabezpečuje ukladanie veľkých binárnych objektov, podporuje žurnálovanie operácií pri zmene a pridávaní dát do DB, môže fungovať v súlade s paradigmatickým modelom Map/Reduce, podporuje replikáciu a budovanie odolných konfigurácií.
Vo vydaní FerretDB 0.1.0 bol úplne prepracovaný spôsob extrakcie dát z PostgreSQL. Predtým sa pre každý prichádzajúci dopyt MongoDB vytváral jeden SQL dopyt na PostgreSQL, ktorý používal funkcie na prácu s formátom JSON a vykonával filtráciu výsledkov na strane PostgreSQL. Vzhľadom na rozdiely v semantike json-funkcií PostgreSQL a MongoDB sa pozoroval nesúlad správania pri porovnávaní a triedení rôznych typov. Na vyriešenie tohto problému sa z PostgreSQL teraz extrahuje nadbytočný súbor dát a filtrácia výsledkov sa vykonáva na strane FerretDB, čo umožnilo napodobniť správanie MongoDB vo väčšine situácií.
Cena zvýšenia kompatibility bola poklesom výkonu, ktorý sa v budúcich vydaniach plánuje kompenzovať pomocou selektívneho filtrovania na strane FerretDB, iba pre dopyty, pri ktorých sa pozoruje rozpor v správaní. Napríklad dopyt „db.collection.find({_id: 'some-id-value'})“ môže byť úplne spracovaný v PostgreSQL. Primárnym cieľom projektu v tomto štádiu vývoja je dosiahnuť kompatibilitu s MongoDB, a výkon sa zatiaľ posúva na druhú koľaj. Medzi funkčné zmeny v novej verzii patrí podpora všetkých bitových operátorov, operátora porovnania „$eq“, ako aj operátorov „$elemMatch“ a „$bitsAllClear“.
Zdroj: opennet.ru
