Пускането на 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster