FerretDB 0.1 को रिलीज, PostgreSQL DBMS मा आधारित MongoDB को कार्यान्वयन

Опубликован выпуск проекта 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 ले चाबी/मान ढाँचामा डाटा सञ्चालन गर्ने द्रुत र स्केलेबल प्रणालीहरू र रिलेसनल DBMS हरू जुन कार्यात्मक र प्रश्नहरू तयार गर्न सजिलो छ बीचको स्थान ओगटेको छ। MongoDB ले JSON-जस्तो ढाँचामा कागजातहरू भण्डारण गर्न समर्थन गर्दछ, प्रश्नहरू उत्पन्न गर्नको लागि एकदम लचिलो भाषा छ, विभिन्न भण्डारण विशेषताहरूको लागि अनुक्रमणिकाहरू सिर्जना गर्न सक्छ, कुशलतापूर्वक ठूला बाइनरी वस्तुहरूको भण्डारण प्रदान गर्दछ, डाटाबेसमा डाटा परिवर्तन गर्न र थप्नका लागि अपरेसनहरूको लगिङलाई समर्थन गर्दछ। प्रतिमान नक्सा / घटाउनुहोस् अनुसार काम गर्नुहोस्, त्रुटि-सहिष्णु कन्फिगरेसनहरूको प्रतिकृति र निर्माणलाई समर्थन गर्दछ।

В выпуске 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

एक टिप्पणी थप्न