Ntọhapụ nke FerretDB 0.1, mmejuputa MongoDB dabere na 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.

Ka anyị cheta na MongoDB nwere niche n'etiti sistemu ngwa ngwa na scalable nke na-arụ ọrụ data n'ụdị igodo/uru, yana DBMS mmekọrịta nke na-arụ ọrụ ma dị mfe ịmepụta ajụjụ. MongoDB na-akwado ịchekwa akwụkwọ n'ụdị JSON, nwere asụsụ na-agbanwe agbanwe maka ịmepụta ajụjụ, nwere ike ịmepụta indexes maka àgwà dị iche iche echekwara, na-enye nke ọma na nchekwa nke nnukwu ọnụọgụ abụọ, na-akwado ntinye ọrụ maka ịgbanwe na ịgbakwunye data na nchekwa data, nwere ike. na-arụ ọrụ dabere na Map/Reduce paradigm, na-akwado mmụgharị na iwu nke nhazi ndị na-anabata mmejọ.

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

isi: opennet.ru

Tinye a comment