מעלדונג פון FerretDB 0.1, אַן ימפּלאַמענטיישאַן פון MongoDB באזירט אויף די PostgreSQL DBMS

Опубликован выпуск проекта 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-ווי פֿאָרמאַט, האט אַ פערלי פלעקסאַבאַל שפּראַך פֿאַר דזשענערייטינג פֿראגן, קענען שאַפֿן ינדעקסיז פֿאַר פאַרשידן סטאָרד אַטראַביוץ, יפישאַנטלי גיט סטאָרידזש פון גרויס ביינערי אַבדזשעקץ, שטיצט לאָגינג פון אַפּעריישאַנז פֿאַר טשאַנגינג און אַדינג דאַטן צו די דאַטאַבייס. אַרבעט אין לויט מיט די פּאַראַדיגם מאַפּע / רעדוסע, שטיצט רעפּלאַקיישאַן און קאַנסטראַקשאַן פון שולד-טאָלעראַנט קאַנפיגיעריישאַנז.

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

לייגן אַ באַמערקונג