Випуск FerretDB 0.1, реалізації MongoDB на базі СУБД 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.

Нагадаємо, що MongoDB займає нішу між швидкими та масштабованими системами, що оперують даними у форматі ключ/значення, та реляційними СУБД, функціональними та зручними у формуванні запитів. MongoDB підтримує зберігання документів у JSON-подібному форматі, має досить гнучкий мову для формування запитів, може створювати індекси для різних атрибутів, що зберігаються, ефективно забезпечує зберігання великих бінарних об'єктів, підтримує журналування операцій зі зміни та додавання даних у БД, може працювати відповідно до парадигми Map/Reduce, підтримує реплікацію та побудову відмовостійких конфігурацій.

У випуску 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

Додати коментар або відгук