Itusilẹ ti FerretDB 0.1, imuse ti MongoDB ti o da lori 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.

Jẹ ki a ranti pe MongoDB gba onakan laarin awọn ọna ṣiṣe iyara ati iwọn ti o nṣiṣẹ data ni ọna kika bọtini / iye, ati awọn DBMS ti o ni ibatan ti o jẹ iṣẹ ati rọrun lati ṣe agbekalẹ awọn ibeere. MongoDB ṣe atilẹyin titoju awọn iwe aṣẹ ni ọna kika bii JSON, ni ede ti o ni irọrun fun ṣiṣẹda awọn ibeere, le ṣẹda awọn atọka fun ọpọlọpọ awọn abuda ti o fipamọ, pese daradara ni ibi ipamọ ti awọn nkan alakomeji nla, ṣe atilẹyin gedu awọn iṣẹ fun iyipada ati fifi data kun si ibi ipamọ data, le ṣiṣẹ ni ibamu pẹlu Map/Dinku paragim, ṣe atilẹyin ẹda ati ikole awọn atunto ọlọdun ẹbi.

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

orisun: opennet.ru

Fi ọrọìwòye kun