Несколько недель назад мы делимся здесь в блоге новостями о изменение названия проекта MangoDB который позволяет вам заменить документно-ориентированную СУБД MongoDB на PostgreSQL без внесения каких-либо изменений в код вашего приложения.
Новое название проекта — FerretDB. а недавно был анонсирован выход версии 0.3 проекта. В версии FerretDB 0.3 представлена команда findAndModify, которая изменяет документ, но возвращает его исходную версию, а также, среди прочего, операторы обновления полей.
Для тех, кто еще не знаком с FerretDB, следует знать, что это реализовано в виде прокси-сервера, который переводит обращения к MongoDB в SQL-запросы к PostgreSQL, что позволяет использовать PostgreSQL как реальное хранилище.
Необходимость миграции может возникнуть в связи с переходом MongoDB на несвободную лицензию SSPL, которая основана на лицензии AGPLv3, но не является открытой, так как содержит дискриминационное требование предоставлять под лицензию SSPL не только приложение сам код, но и исходные коды всех компонентов, задействованных в предоставлении облачного сервиса.
Основная целевая аудитория FerretDB — пользователи, не использующие расширенные функции. MongoDB в своих приложениях, но хотят использовать полностью открытый программный стек.
На текущем этапе развития, FerretDB по-прежнему поддерживает только часть функций MongoDB. которые чаще всего используются в типичных приложениях. В будущем они планируют добиться полной поддержки драйверов для MongoDB и предоставить возможность использовать FerretDB в качестве прозрачной замены MongoDB.
MongoDB занимает нишу между быстрыми и масштабируемыми системами, работающими с данными типа «ключ-значение», и реляционными СУБД, которые функциональны и просты в обработке запросов.
MongoDB поддерживает хранение документов в JSON-подобном формате, обладает достаточно гибким языком формирования запросов, умеет создавать индексы для различных хранимых атрибутов, обеспечивает эффективное хранение бинарных больших объектов, поддерживает протоколирование операций по изменению и добавлению данных в базу данных, это может работать по парадигме Map/Reduce, поддерживает репликацию и построение отказоустойчивых конфигураций.
Из-за различий в семантике json-функций PostgreSQL и MongoDB, было несоответствие в поведении при сравнении и заказе разных типов. Для решения этой проблемы теперь из PostgreSQL извлекается выборка избыточных данных и выполняется фильтрация результата на стороне FerretDB, что позволило повторить поведение MongoDB в большинстве ситуаций.
Основные новинки FerretDB 0.3
Как упоминалось в начале, новая версия FerretDB 0.3 отличается введением команда findAndModify, который изменяет документ, но возвращает его исходную версию.
Другие изменения, которые выделяются, заключаются в том, что улучшена обработка отрицательных нулей, а также добавлена поддержка упорядочивания скалярных типов данных.
Также выделены реализованы новые операторы обновления полей: $inc и $set, плюс добавлена поддержка упорядочения скалярных типов данных.
С другой стороны, упоминаются различные улучшения для обработки версий PostgreSQL и MongoDB.
Кроме того, также отмечено, что исправлен некорректный тест для оператора $mod, также то, что тест проводится во всех операционных системах ARM64, и что добавлено больше информации об уровнях регистрации ошибок маршрутизатора/прокси-сервера.
Из других изменений которые выделяются из этой новой версии:
- Обновить ВЛАДЕЛЬЦЕВ КОДА
- Синхронизируйте фиктивные контроллеры и pg
- Переименуйте константы OP_* в OpCode*constants.
- Улучшить gopkg.in/yaml.v3
- Поднимите gopkg.in/yaml.v3 в инструментах
- Сделать путь к типу
- Паника в неожиданных значениях заказа
- Добавьте комментарии к функциям и переменным.
- Удалить мертвый код
В конце концов если вам интересно узнать об этом больше, вы можете проверить подробности По следующей ссылке.
Будьте первым, чтобы комментировать