Se ha publicado la versión 1.0 del proyecto FerretDB, que permite reemplazar la base de datos orientada a documentos MongoDB por PostgreSQL sin necesidad de realizar cambios en el código de las aplicaciones. FerretDB se implementa como un servidor proxy que traduce llamadas a MongoDB en consultas SQL a PostgreSQL, lo que permite utilizar PostgreSQL como el almacenamiento real. La versión 1.0 se considera el primer lanzamiento estable, listo para su uso general. El código está escrito en Go y se distribuye bajo la licencia Apache 2.0.
El principal público objetivo de FerretDB son los usuarios que no utilizan las capacidades avanzadas de MongoDB en sus aplicaciones, pero que desean emplear una pila de software completamente abierta. En esta etapa de desarrollo, FerretDB soporta un subconjunto de las características de MongoDB más comúnmente utilizadas en aplicaciones típicas. La necesidad de implementar FerretDB puede surgir debido a la transición de MongoDB a la licencia no libre SSPL, que se basa en la licencia AGPLv3, pero no es abierta, ya que incluye la exigencia discriminatoria de proporcionar no solo el código de la aplicación, sino también el código fuente de todos los componentes involucrados en la prestación de servicios en la nube bajo la licencia SSPL.
MongoDB ocupa un nicho entre sistemas rápidos y escalables que operan con datos en formato clave/valor, y bases de datos relacionales, que son funcionales y cómodas para la creación de consultas. MongoDB es compatible con el almacenamiento de documentos en formato similar a JSON, tiene un lenguaje bastante flexible para la creación de consultas, puede crear índices para diferentes atributos almacenados, gestiona de manera eficiente el almacenamiento de grandes objetos binarios, soporta el registro de operaciones de modificación y adición de datos en la base de datos, puede operar de acuerdo con la paradigma Map/Reduce, y ofrece replicación y configuraciones de alta disponibilidad.
Entre las novedades en FerretDB 1.0:
- Se han implementado los comandos createIndexes y dropIndexes para crear y eliminar uno o varios índices en una colección.
- Se ha implementado el comando getMore para obtener un nuevo lote de resultados de comandos que devuelven un cursor, como find y aggregate.
- Se ha añadido soporte para el operador de agregación $sum para calcular la suma de los valores de un grupo.
- Se ha añadido soporte para los operadores $limit y $skip para limitar la cantidad y omitir documentos durante la agregación.
- Se ha añadido soporte para el operador $count para contar los documentos durante la agregación.
- Se ha añadido soporte para el operador $unwind para desglosar los campos de matriz en los documentos de entrada y crear una lista con un documento separado para cada elemento de la matriz.
- Se ha añadido soporte parcial para los comandos collStats, dbStats y dataSize para obtener estadísticas sobre la colección y la base de datos, así como sobre el tamaño de los datos.
Fuente: opennet.ru
