FerretDB 1.0 ya fue liberado y estas son sus novedades
Se dio a conocer hace poco el lanzamiento de la nueva versión del proyecto FerretDB 1.0, que permite reemplazar el SGBD orientado a documentos de MongoDB por PostgreSQL sin realizar cambios en el código de la aplicación. FerretDB 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 versión 1.0 está marcada como la primera versión estable lista para uso general. El público objetivo principal de FerretDB son los usuarios que no utilizan las funciones avanzadas de MongoDB en sus aplicaciones, pero desean utilizar una pila de software completamente abierta.
En su etapa actual de desarrollo, FerretDB es compatible con un subconjunto de las características de MongoDB que se usan más comúnmente en las aplicaciones típicas. La necesidad de implementar FerretDB 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 es de código abierto, ya que contiene un requisito discriminatorio para suministrar bajo la licencia SSPL no solo el código de la aplicación en sí, pero también los códigos fuente de todos los componentes involucrados en la provisión de servicios en la nube.
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.
Principales novedades de FerretDB 1.0
En esta nueva versión que se presenta se destaca que se han implementado los comandos createIndexes y dropIndexes para crear y colocar uno o más índices en una colección, ademas de que el comando getMore se implementó para mostrar una nueva porción del resultado obtenido de la ejecución de comandos que devuelven un cursor, como buscar y agregar.
Otro de los cambios que se destaca de la nueva versión se agregó soporte para el operador de agregación $sum para calcular la suma de valores de grupo, asi como tambien que se agrego soporte para los operadores $limit y $skip para limitar el número y omitir documentos al agregar y que se agregó soporte para el operador $count para contar documentos al agregar.
Ademas de ello, tambien se destaca que se agregó soporte para el operador $unwind para analizar los campos de la matriz en los documentos entrantes y formar una lista con un documento separado para cada elemento de la matriz y tambien que se agregó compatibilidad parcial con los comandos collStats , dbStats y dataSize para obtener estadísticas de recopilación y base de datos y el tamaño de los datos.
De los demás cambios que se destacan de la nueva versión:
- Ahora se usan iteradores para `sort`, `limit`, `skip` y `projection`
- Bump dependencias
- Mejoras del seguimiento de recursos
- Se añadieron pruebas para el argumento `skip` de `find` y `count
- Cierre el iterador correctamente
- Mejoras en la inicialización de números grandes en datos de prueba
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.
Para los interesados en el código, deben saber que está escrito en Go y se distribuye bajo la licencia Apache 2.0.
Y deben saber que la mejor forma de probar FerretDB es modificarlo y ejecutarlo en el host (Linux, macOS o Windows) con PostgreSQL y otras dependencias que se ejecutan dentro de los contenedores de Docker a través de Docker Compose.
En Linux, docker debe instalarse en el host. En macOS y Windows, se debe usar Docker Desktop, mientras que en Windows, debe configurarse para usar WSL 2 sin ninguna distribución; todos los comandos deben ejecutarse en el host.