Phát hành FerretDB 0.1, một triển khai MongoDB dựa trên DBMS PostgreSQL

Опубликован выпуск проекта 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.

Chúng ta hãy nhớ lại rằng MongoDB chiếm một vị trí thích hợp giữa các hệ thống nhanh và có thể mở rộng, vận hành dữ liệu ở định dạng khóa/giá trị và các DBMS quan hệ có chức năng và dễ tạo các truy vấn. MongoDB hỗ trợ lưu trữ tài liệu ở định dạng giống JSON, có ngôn ngữ khá linh hoạt để tạo truy vấn, có thể tạo chỉ mục cho các thuộc tính được lưu trữ khác nhau, cung cấp khả năng lưu trữ hiệu quả các đối tượng nhị phân lớn, hỗ trợ ghi nhật ký các hoạt động để thay đổi và thêm dữ liệu vào cơ sở dữ liệu, có thể hoạt động theo mô hình Map/Reduce, hỗ trợ sao chép và xây dựng các cấu hình có khả năng chịu lỗi.

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

Nguồn: opennet.ru

Thêm một lời nhận xét