La empresa Microsoft ha anunciado la apertura del código del proyecto DocumentDB, que puede ser utilizado como una base de datos NoSQL independiente, como plataforma para crear sistemas de almacenamiento propios o como complemento para guardar datos en formato BSON en bases de datos PostgreSQL. En la práctica, DocumentDB se utiliza en Microsoft como base del producto 'Azure Cosmos DB for MongoDB', que proporciona una interfaz compatible con la base de datos orientada a documentos MongoDB. El código del proyecto está escrito en C y se distribuye bajo la licencia MIT. El motor de DocumentDB se implementa como una extensión sobre la base de datos PostgreSQL.
Al igual que en MongoDB, para almacenar documentos estructurados en DocumentDB se utiliza un formato similar a JSON llamado BSON (Binary JSON), que permite crear estructuras jerárquicas, en las que los documentos y arrays pueden incrustarse unos en otros. La principal diferencia respecto a JSON es el uso de la serialización de datos en representación binaria. El proyecto proporciona operaciones NoSQL para crear, leer, actualizar y eliminar datos en formato BSON, así como una API para PostgreSQL estándar (DocumentDB puede considerarse como una variante de PostgreSQL con soporte para BSON). DocumentDB puede utilizar capacidades de búsqueda de texto completo, operaciones sobre tipos de datos vectoriales y geoespaciales.
El proyecto consta de dos componentes:
- pg_documentdb_core — una extensión para PostgreSQL que implementa el tipo BSON y las operaciones para trabajar con datos BSON en PostgreSQL.
- pg_documentdb — API de DocumentDB pública con operaciones básicas para trabajar con documentos en formato BSON, procesamiento de consultas y gestión de índices.
La primera versión de DocumentDB proporciona soporte para operaciones CRUD (crear, leer, actualizar, eliminar), índices para campos individuales BSON, índices para búsqueda de texto completo (compatibles con RUM), consultas vectoriales y geoespaciales (compatibles con pg_vector y postgis), capacidades para construir consultas y agregar datos BSON.
El proyecto FerretDB, que desarrolla la implementación de la base de datos MongoDB basada en la base de datos PostgreSQL, ya ha migrado al uso de DocumentDB. FerretDB permite reemplazar la base de datos propietaria orientada a documentos MongoDB por un stack de software completamente abierto basado en PostgreSQL, sin necesidad de modificar el código de las aplicaciones. La necesidad de reemplazar MongoDB se debe a que esta base de datos ha cambiado a la licencia SSPL, que se basa en la licencia AGPLv3, pero no es considerada abierta, ya que contiene requisitos discriminatorios respecto a la entrega no solo del código de la aplicación, sino también de los textos fuente de todos los componentes involucrados en la provisión del servicio en la nube.
Inicialmente, el trabajo de FerretDB consistía en traducir las solicitudes a MongoDB en consultas SQL para PostgreSQL, pero a partir de la versión 2.0 de FerretDB, que se encuentra en la etapa de candidato para lanzamientos, se ha utilizado la extensión DocumentDB de PostgreSQL para implementar el soporte del formato BSON. La transición al uso de DocumentDB ha permitido aumentar la performance de FerretDB más de 20 veces para ciertos tipos de carga. Entre otras novedades de FerretDB 2.0 se destacan la mejora de la compatibilidad con MongoDB, la posibilidad de replicación y el soporte para búsqueda vectorial. El código de FerretDB está escrito en el lenguaje Go y se distribuye bajo la licencia Apache 2.0.
Fuente: opennet.ru
