Lanzamiento de FerretDB 0.1, implementación de MongoDB sobre la base de la base de datos PostgreSQL

Se ha publicado la versión 0.1 del proyecto FerretDB (anteriormente MangoDB), que permite reemplazar la base de datos orientada a documentos MongoDB por PostgreSQL sin modificar el código de las aplicaciones. FerretDB está implementado como un servidor proxy que traduce las solicitudes a MangoDB en consultas SQL a PostgreSQL, lo que permite utilizar PostgreSQL como el almacenamiento real. El código está escrito en Go y se distribuye bajo la licencia Apache 2.0.

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

FerretDB tiene como público objetivo a los usuarios que no utilizan las capacidades avanzadas de MongoDB en sus aplicaciones, pero desean utilizar un stack de software completamente abierto. En esta etapa de desarrollo, FerretDB solo admite parcialmente las funciones de MongoDB que se utilizan con mayor frecuencia en aplicaciones estándar. En el futuro, se espera lograr una compatibilidad total con los controladores de MongoDB y ofrecer 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 datos en formato clave/valor y las bases de datos relacionales, funcionales y cómodas para la construcción de consultas. MongoDB admite el almacenamiento de documentos en un formato similar a JSON, tiene un lenguaje bastante flexible para la formulación de consultas, puede crear índices para diversos atributos almacenados, garantiza de manera eficiente el almacenamiento de grandes objetos binarios, admite el registro de operaciones de modificación y adición de datos en la base de datos, puede funcionar según la paradigma Map/Reduce, y soporta la replicación y la creación de configuraciones tolerantes a fallos.

En la versión FerretDB 0.1.0, se ha reestructurado completamente el método de extracción de datos de PostgreSQL. Anteriormente, para cada consulta entrante de MongoDB, se generaba una consulta SQL única a PostgreSQL, que utilizaba funciones para trabajar con el formato JSON y realizaba la filtración de resultados en el lado de PostgreSQL. Debido a las diferencias en la semántica de las funciones json de PostgreSQL y MongoDB, se observaba una discrepancia en el comportamiento al comparar y ordenar diferentes tipos. Para resolver este problema, ahora se extrae un conjunto de datos redundante de PostgreSQL, y la filtración del resultado se realiza en el lado de FerretDB, lo que permite replicar el comportamiento de MongoDB en la mayoría de las situaciones.

El costo del aumento de compatibilidad ha sido una disminución en el rendimiento, que se espera compensar en futuras versiones mediante la filtración selectiva en el lado de FerretDB solo de las consultas en las que se observa discrepancia en el comportamiento. Por ejemplo, la consulta «db.collection.find({_id: ‘some-id-value’})» puede procesarse completamente en PostgreSQL. El objetivo principal del proyecto en esta fase de desarrollo es alcanzar la compatibilidad con MongoDB, mientras que el rendimiento queda en segundo plano. Entre los cambios funcionales en la nueva versión se destaca el soporte para todos los operadores de bits, el operador de comparación «$eq», así como los operadores «$elemMatch» y «$bitsAllClear».

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster