FerretDB 0.3 ya fue liberada, conoce las novedades de esta modernización de MangoDB

junio 03, 2022 , 0 Comments

Hace algunas semanas compartimos aquí en el blog la noticia sobre el cambio del nombre del proyecto de MangoDB que permite reemplazar el DBMS orientado a documentos de MongoDB con PostgreSQL sin realizar cambios en el código de la aplicación.

El nuevo nombre del proyecto es FerretDB y recientemente se dio a conocer la liberación de la versión 0.3 del proyecto. La versión FerretDB 0.3 presenta el comando findAndModify, que modifica un documento pero devuelve su versión original, ademas de que se implementaron operadores de actualización de campo, entre otras cosas mas.

Para quienes aún desconocen de FerretDB, deben saber que este se implementa como un servidor proxy que traduce las llamadas a MongoDB en consultas SQL a PostgreSQL, lo que le permite usar PostgreSQL como almacenamiento real.

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

El público objetivo principal de FerretDB son los usuarios que no utilizan las funciones avanzadas de MongoDB en sus aplicaciones, pero que desean utilizar una pila de software completamente abierta.

En la etapa actual de desarrollo, FerretDB aún admite solo una parte de las características de MongoDB que se usan con mayor frecuencia en las aplicaciones típicas. En el futuro, planean lograr una compatibilidad total con los controladores para MongoDB y brindar la capacidad de usar FerretDB como un reemplazo transparente para MongoDB.

MongoDB ocupa un nicho entre los sistemas rápidos y escalables que operan con datos clave/valor y los DBMS relacionales que son funcionales y fáciles de consultar.

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.

Debido a las 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 se extrae una muestra de datos redundantes de PostgreSQL y el filtrado del resultado se realiza en el lado de FerretDB, lo que hizo posible repetir el comportamiento de MongoDB en la mayoría de las situaciones.

Principales novedades de FerretDB 0.3

Tal y como se mencionó al inicio, la nueva versión de FerretDB 0.3 se destaca por introducir el comando findAndModify, que modifica un documento, pero devuelve su versión original.

Otros de los cambios que se destacan es que se ha mejorado el manejo del cero negativo, asi como tambien que se agregó el soporte para ordenar tipos de datos escalares.

Tambien se destacan los nuevos operadores de actualización de campo implementados: $inc y $set, además de que se agregó soporte para ordenar tipos de datos escalares.

Por otra parte, se menciona que se han realizado diversas mejoras para el manejo de las versiones de PostgreSQL y MongoDB.

Ademas de ello, también se destaca que se solucionó la prueba incorrecta para el operador $mod, tambien que se emite la prueba en todos los sistemas operativos ARM64 y que se agregó más visibilidad para los niveles de registro de errores del enrutador/proxy.

De los demás cambios que se destacan de esta nueva versión:

  • Actualizar CODEOWNERS
  • Sincronizar controladores ficticios y pg
  • Renombrar OP_*constantes a OpCode*constantes
  • Mejorar gopkg.in/yaml.v3
  • Bump gopkg.in/yaml.v3 en herramientas
  • Hacer tipo Path
  • Pánico en valores de pedidos inesperados
  • Agregue algunos comentarios a las funciones y variables
  • Eliminar código muerto

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.