Lanzamiento de FerretDB 0.1, una implementación de MongoDB basada en el DBMS PostgreSQL

Se ha publicado el lanzamiento del proyecto FerretDB 0.1 (anteriormente MangoDB), que permite reemplazar el DBMS MongoDB orientado a documentos con PostgreSQL sin realizar cambios en el código de la aplicación. FerretDB se implementa como un servidor proxy que traduce las llamadas a MangoDB en consultas SQL a PostgreSQL, lo que permite utilizar PostgreSQL como almacenamiento real. El código está escrito en Go y distribuido bajo la licencia Apache 2.0.

La necesidad de migración puede surgir debido a la transición de MongoDB a una licencia SSPL patentada, que se basa en la licencia AGPLv3, pero no está abierta, ya que contiene un requisito discriminatorio de entregar bajo la licencia SSPL no solo el código de la aplicación en sí, sino también el código fuente de todos los componentes involucrados en el suministro del servicio en la nube.

El público objetivo de FerretDB son los usuarios que no utilizan las capacidades avanzadas de MongoDB en sus aplicaciones, pero que desean utilizar una pila de software completamente abierta. En la etapa actual de desarrollo, FerretDB todavía admite solo una parte de las capacidades de MongoDB que se utilizan con mayor frecuencia en aplicaciones típicas. En el futuro, planean lograr compatibilidad total con los controladores de MongoDB y brindar la posibilidad de utilizar FerretDB como un reemplazo transparente de MongoDB.

Recordemos que MongoDB ocupa un nicho entre los sistemas rápidos y escalables que operan sobre datos en formato clave/valor, y los DBMS relacionales, funcionales y convenientes en la generación de consultas. MongoDB admite el almacenamiento de documentos en un formato similar a JSON, tiene un lenguaje bastante flexible para generar consultas, puede crear índices para varios atributos almacenados, proporciona almacenamiento eficiente de objetos binarios grandes, admite el registro de operaciones para cambiar y agregar datos a la base de datos, puede trabajar de acuerdo con el paradigma Map/Reduce, admite la replicación y la construcción de configuraciones tolerantes a fallas.

El lanzamiento de FerretDB 0.1.0 rediseñó completamente el método de recuperación de datos de PostgreSQL. Anteriormente, para cada solicitud entrante de MongoDB, se generaba una consulta SQL a PostgreSQL, utilizando funciones para trabajar con el formato JSON y filtrar los resultados en el lado de PostgreSQL. Debido a diferencias en la semántica de las funciones json de PostgreSQL y MongoDB, hubo una discrepancia en el comportamiento al comparar y ordenar diferentes tipos. Para resolver este problema, ahora los datos se obtienen de forma redundante desde PostgreSQL y el resultado se filtra en el lado de FerretDB, lo que hizo posible replicar el comportamiento de MongoDB en la mayoría de las situaciones.

El precio de una mayor compatibilidad fue una disminución en el rendimiento, que en futuras versiones esperan compensar filtrando selectivamente en el lado de FerretDB solo las consultas para las cuales existe una discrepancia en el comportamiento. Por ejemplo, la consulta "db.collection.find({_id: 'some-id-value'})" se puede procesar completamente en PostgreSQL. El objetivo principal del proyecto en esta etapa de desarrollo es lograr compatibilidad con MongoDB, y el rendimiento queda relegado a un segundo plano por ahora. Entre los cambios funcionales de la nueva versión se destaca la compatibilidad con todos los operadores de bits, el operador de comparación “$eq”, así como los operadores “$elemMatch” y “$bitsAllClear”.

Fuente: opennet.ru

Añadir un comentario