Vydanie FerretDB 0.1, implementácia MongoDB založená na PostgreSQL DBMS

Bolo zverejnené vydanie projektu FerretDB 0.1 (predtým MangoDB), ktoré vám umožňuje nahradiť dokumentovo orientovaný DBMS MongoDB PostgreSQL bez vykonania zmien v kóde aplikácie. FerretDB je implementovaný ako proxy server, ktorý prekladá volania MangoDB do SQL dotazov do PostgreSQL, čo umožňuje PostgreSQL použiť ako skutočné úložisko. Kód je napísaný v Go a distribuovaný pod licenciou Apache 2.0.

Potreba migrácie môže vzniknúť v dôsledku prechodu spoločnosti MongoDB na proprietárnu licenciu SSPL, ktorá je založená na licencii AGPLv3, ale nie je otvorená, pretože obsahuje diskriminačnú požiadavku dodať v rámci licencie SSPL nielen samotný kód aplikácie, ale aj zdrojový kód všetkých komponentov zapojených do poskytovania cloudovej služby.

Cieľovou skupinou FerretDB sú používatelia, ktorí vo svojich aplikáciách nevyužívajú pokročilé možnosti MongoDB, ale chcú používať úplne otvorený softvérový balík. V súčasnej fáze vývoja FerretDB stále podporuje iba časť možností MongoDB, ktoré sa najčastejšie používajú 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.

Pripomeňme si, že MongoDB zaberá medzeru medzi rýchlymi a škálovateľnými systémami, ktoré prevádzkujú údaje vo formáte kľúč/hodnota, a relačnými DBMS, ktoré sú funkčné a ľahko formulovateľné dopyty. MongoDB podporuje ukladanie dokumentov vo formáte podobnom JSON, má pomerne flexibilný jazyk na generovanie 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 protokolovanie operácií pre zmenu a pridávanie údajov do databázy, pracovať v súlade s paradigmou Map/Reduce, podporuje replikáciu a konštrukciu konfigurácií odolných voči chybám.

Vydanie FerretDB 0.1.0 úplne prepracovalo spôsob získavania údajov z PostgreSQL. Predtým sa pre každú prichádzajúcu požiadavku MongoDB vygeneroval jeden SQL dotaz do PostgreSQL s využitím funkcií na prácu s formátom JSON a filtrovanie výsledkov na strane PostgreSQL. V dôsledku rozdielov v sémantike funkcií PostgreSQL a MongoDB json došlo k nesúladu v správaní pri porovnávaní a triedení rôznych typov. Aby sa tento problém vyriešil, údaje sa teraz redundantne načítavajú z PostgreSQL a výsledok je filtrovaný na strane FerretDB, čo umožnilo replikovať správanie MongoDB vo väčšine situácií.

Cenou za zvýšenú kompatibilitu bol pokles výkonu, ktorý v budúcich vydaniach očakávajú kompenzovať selektívnym filtrovaním na strane FerretDB len dopytov, pri ktorých existuje nesúlad v správaní. Napríklad dotaz "db.collection.find({_id: 'nejaká-id-hodnota'})" môže byť spracovaný celý v PostgreSQL. Primárnym cieľom projektu v tejto fáze vývoja je dosiahnuť kompatibilitu s MongoDB a výkon je zatiaľ odsunutý do úzadia. Medzi funkčné zmeny v novej verzii patrí podpora všetkých bitových operátorov, porovnávacieho operátora „$eq“, ako aj operátorov „$elemMatch“ a „$bitsAllClear“.

Zdroj: opennet.ru

Pridať komentár