Выпуск FerretDB 0.1, рэалізацыі MongoDB на базе СКБД PostgreSQL

Апублікаваны выпуск праекта FerretDB 0.1 (былы MangoDB), які дазваляе замяніць дакумента-арыентаваную СКБД MongoDB на PostgreSQL без унясення змен у код прыкладанняў. FerretDB рэалізаваны як проксі-сервер, які транслюе звароты да MangoDB у SQL-запыты да PostgreSQL, што дазваляе выкарыстоўваць PostgreSQL у якасці фактычнага сховішча. Код напісаны на мове Go і распаўсюджваецца пад ліцэнзіяй Apache 2.0.

Патрэбнасць міграцыі можа ўзнікнуць з-за пераходу MongoDB на нявольную ліцэнзію SSPL, якая заснавана на ліцэнзіі AGPLv3, але не з'яўляецца адкрытай, бо змяшчае дыскрымінацыйнае патрабаванне пастаўкі пад ліцэнзіяй SSPL не толькі кода самога прыкладання, але і зыходных тэкстаў усіх кампанентаў, уцягнутых у прадастаўленне хмарнага сэрвісу.

У якасці мэтавай аўдыторыі FerretDB называюцца карыстальнікі, якія не прымяняюць у сваіх дадатках пашыраныя магчымасці MongoDB, але жадаюць выкарыстоўваць цалкам адкрыты праграмны стэк. На бягучым этапе развіцця FerretDB пакуль падтрымлівае толькі частка магчымасцяў MongoDB, найболей часта ўжывальных у тыпавых прыкладаннях. У будучыні плануюць дасягнуць поўнай сумяшчальнасці з драйверамі для MongoDB і падаць магчымасць выкарыстоўваць FerretDB у якасці празрыстай замены MongoDB.

Нагадаем, што MongoDB займае нішу паміж хуткімі і якія маштабуюцца сістэмамі, якія аперуюць дадзенымі ў фармаце ключ/значэнне, і рэляцыйнымі СКБД, функцыянальнымі і зручнымі ў фармаванні запытаў. MongoDB падтрымлівае захоўванне дакументаў у JSON-падобным фармаце, мае досыць гнуткую мову для фармавання запытаў, можа ствараць індэксы для розных захоўваемых атрыбутаў, эфектыўна забяспечвае захоўванне вялікіх бінарных аб'ектаў, падтрымлівае часопісаванне аперацый па змене і даданню дадзеных у БД, можа працаваць у адпаведнасці з парадыгмай Map/Reduce, падтрымлівае рэплікацыю і пабудову адмоваўстойлівых канфігурацый.

У выпуску FerretDB 0.1.0 цалкам перапрацаваны метад вымання дадзеных з PostgreSQL. Раней для кожнага які паступае запыту MongoDB фармаваўся адзін SQL-запыт да PostgreSQL, выкарыстоўвалы функцыі для працы з фарматам JSON і які выконвае фільтраванне вынікаў на боку PostgreSQL. З-за адрозненняў у семантыцы json-функцый PostgreSQL і MongoDB назіралася неадпаведнасць паводзін пры параўнанні і сартаванні розных тыпаў. Для рашэння дадзенай праблемы з PostgreSQL зараз здабываецца залішняя выбарка дадзеных, а фільтраванне выніку вырабляецца на боку FerretDB, што дазволіла паўтарыць паводзіны MongoDB у большасці сітуацый.

Коштам павышэння сумяшчальнасці стала зніжэнне прадукцыйнасці, якое ў будучых выпусках разлічваюць кампенсаваць за кошт выбарачнай фільтрацыі на баку FerretDB толькі запытаў, для якіх назіраецца разыходжанне паводзін. Напрыклад, запыт "db.collection.find({_id: 'some-id-value'})" можа быць цалкам апрацаваны ў PostgreSQL. Першаснай задачай праекту на дадзеным этапе развіцця завецца дасягненне сумяшчальнасці з MongoDB, а прадукцыйнасць пакуль адсоўваецца на другі план. З функцыянальных змен у новай версіі адзначаецца падтрымка ўсіх бітавых аператараў, аператара параўнання "$eq", а таксама аператараў "$elemMatch" і "$bitsAllClear".

Крыніца: opennet.ru

Дадаць каментар