Vydání FerretDB 0.1, implementace MongoDB založená na PostgreSQL DBMS

Byla zveřejněna verze projektu FerretDB 0.1 (dříve MangoDB), která vám umožňuje nahradit dokumentově orientovaný DBMS MongoDB PostgreSQL bez provádění změn v kódu aplikace. FerretDB je implementován jako proxy server, který převádí volání MangoDB do SQL dotazů do PostgreSQL, což umožňuje PostgreSQL použít jako skutečné úložiště. Kód je napsán v Go a distribuován pod licencí Apache 2.0.

Potřeba migrace může vyvstat z důvodu přechodu MongoDB na proprietární licenci SSPL, která je založena na licenci AGPLv3, ale není otevřená, protože obsahuje diskriminační požadavek dodávat pod licencí SSPL nejen samotný kód aplikace, ale také zdrojový kód všech komponent zapojených do poskytování cloudové služby.

Cílovou skupinou FerretDB jsou uživatelé, kteří ve svých aplikacích nevyužívají pokročilé možnosti MongoDB, ale chtějí používat zcela otevřený softwarový stack. V současné fázi vývoje FerretDB stále podporuje pouze část funkcí MongoDB, které se nejčastěji používají v typických aplikacích. V budoucnu plánují dosáhnout plné kompatibility s ovladači pro MongoDB a poskytnout možnost používat FerretDB jako transparentní náhradu za MongoDB.

Připomeňme, že MongoDB zaujímá mezeru mezi rychlými a škálovatelnými systémy, které pracují s daty ve formátu klíč / hodnota, a relačním DBMS, funkčním a pohodlným při generování dotazů. MongoDB podporuje ukládání dokumentů ve formátu JSON, má poměrně flexibilní jazyk pro generování dotazů, umí vytvářet indexy pro různé uložené atributy, efektivně zajišťuje ukládání velkých binárních objektů, podporuje protokolování operací pro změnu a přidávání dat do databáze, umí pracovat v souladu s paradigmatem Map/Reduce, podporuje replikaci a vytváření konfigurací odolných vůči chybám.

Vydání FerretDB 0.1.0 zcela přepracovalo způsob získávání dat z PostgreSQL. Dříve byl pro každý příchozí požadavek MongoDB vygenerován jeden SQL dotaz do PostgreSQL s využitím funkcí pro práci s formátem JSON a filtrování výsledků na straně PostgreSQL. Kvůli rozdílům v sémantice funkcí PostgreSQL a MongoDB json došlo k nesrovnalostem v chování při porovnávání a řazení různých typů. Aby se tento problém vyřešil, data jsou nyní redundantně načítána z PostgreSQL a výsledek je filtrován na straně FerretDB, což umožnilo replikovat chování MongoDB ve většině situací.

Cenou za zvýšenou kompatibilitu byl pokles výkonu, který v budoucích vydáních očekávají kompenzovat selektivním filtrováním na straně FerretDB pouze dotazy, u kterých existuje nesoulad v chování. Například dotaz „db.collection.find({_id: 'some-id-value'})“ lze zpracovat zcela v PostgreSQL. Primárním cílem projektu v této fázi vývoje je dosažení kompatibility s MongoDB a výkon je prozatím odsunut do pozadí. Mezi funkční změny v nové verzi patří podpora všech bitových operátorů, porovnávací operátor „$eq“ a také operátory „$elemMatch“ a „$bitsAllClear“.

Zdroj: opennet.ru

Přidat komentář