Компания Microsoft объявила об открытии кода проекта DocumentDB, который может использоваться как отдельная NoSQL СУБД, как платформа для создания собственных систем хранения или как дополнение для хранения данных в формате BSON в СУБД PostgreSQL. На практике DocumentDB применяется в Microsoft в качестве основы продукта “Azure Cosmos DB for MongoDB“, предоставляющего интерфейс, совместимый с документо-ориентированной СУБД MongoDB. Код проекта написан на языке Си и распространяется под лицензией MIT. Движок DocumentDB реализован в форме надстройки над СУБД PostgreSQL.
Как и в MongoDB для хранения структурированных документов в DocumentDB задействован JSON-подобный формат BSON (Binary JSON), позволяющий создавать иерархические структуры, в которых одни документы и массивы могут встраиваться в другие документы и массивы. Ключевым отличием от JSON является использование сериализации данных в бинарное представление. Проект предоставляет как NoSQL-операции для создания, чтения, обновления и удаления данных в формате BSON, так и API для штатного PostgreSQL (DocumentDB может рассматриваться как вариант PostgreSQL с поддержкой BSON). В DocumentDB могут использоваться возможности полнотекстового поиска, операции над векторными и геопространственными типами данных.
Проект состоит из двух компонентов:
- pg_documentdb_core – расширение к PostgreSQL с реализацией типа BSON и операций для работы в PostgreSQL с данными BSON.
- pg_documentdb – отщедоступный API DocumentDB с базовыми операциями для работы с документами в формате BSON, обработки запросов и управления индексами.
Первый выпуск DocumentDB предоставляет поддержку операций CRUD (создание, чтение, обновление, удаление), индексы для отдельных полей BSON, индексы для полнотекстового поиска (совместимы с RUM), векторные и геопространственные запросы (совместимые с pg_vector и postgis), возможности для формирования запросов и агрегирования данных BSON.
На использование DocumentDB уже уже перешёл проект FerretDB, развивающий реализацию СУБД MongoDB на базе СУБД PostgreSQL. FerretDB позволяет без внесения изменений в код приложений заменить проприетарную документо-ориентированную СУБД MongoDB на полностью открытый программный стек, основанный на PostgreSQL. Необходимость замены MongoDB объясняется переходом данной СУБД на лицензию SSPL, которая основана на лицензии AGPLv3, но не является открытой, так как содержит дискриминирующее требование поставки под лицензией SSPL не только кода самого приложения, но и исходных текстов всех компонентов, вовлечённых в предоставление облачного сервиса.
Изначально работа FerretDB сводилась к трансляции обращений к MongoDB в SQL-запросы к PostgreSQL, но начиная с версии FerretDB 2.0, которая находится на стадии кандидата в релизы, для реализации поддержки формата BSON задействовано PosgreSQL-расширение DocumentDB. Переход на использование DocumentDB позволил более чем в 20 раз повысить производительность FerretDB для некоторых видов нагрузки. Из других новшеств FerretDB 2.0 отмечается улучшение совместимости с MongoDB, возможность репликации и поддержка векторного поиска. Код FerretDB написан на языке Go и распространяется под лицензией Apache 2.0.