Foi lançado o FerretDB 1.0, um projeto que permite substituir o banco de dados orientado a documentos MongoDB pelo PostgreSQL sem mudanças no código das aplicações. O FerretDB é implementado como um servidor proxy, traduzindo as solicitações do MongoDB em consultas SQL para o PostgreSQL, permitindo assim o uso do PostgreSQL como o armazenamento real. A versão 1.0 é marcada como o primeiro lançamento estável, pronto para uso generalizado. O código é escrito na linguagem Go e distribuído sob a licença Apache 2.0.
O principal público-alvo do FerretDB são os usuários que não utilizam nos seus aplicativos os recursos avançados do MongoDB, mas desejam utilizar uma pilha de software completamente aberta. Neste estágio de desenvolvimento, o FerretDB suporta um subconjunto das funcionalidades do MongoDB que são mais comumente utilizadas em aplicativos típicos. A necessidade de implementar o FerretDB pode surgir devido à mudança do MongoDB para uma licença não livre, a SSPL, que se baseia na licença AGPLv3, mas não é considerada aberta, pois contém uma exigência discriminatória de que a entrega sob a licença SSPL inclua não apenas o código do próprio aplicativo, mas também o código fonte de todos os componentes envolvidos na prestação do serviço em nuvem.
O MongoDB ocupa um nicho entre sistemas rápidos e escaláveis que operam dados em formato chave/valor e SGBDs relacionais, funcionais e convenientes para formar consultas. O MongoDB suporta o armazenamento de documentos em formato semelhante ao JSON, possui uma linguagem bastante flexível para formar consultas, pode criar índices para vários atributos armazenados, garante efetivamente o armazenamento de grandes objetos binários, suporta o registro de operações de alteração e adição de dados no BD, pode operar de acordo com a paradigma Map/Reduce e suporta replicação e construção de configurações tolerantes a falhas.
Entre as mudanças no FerretDB 1.0:
- Implementados os comandos createIndexes e dropIndexes para criação e remoção de um ou mais índices em uma coleção.
- Implementado o comando getMore para exibir um novo lote de resultados obtidos na execução de comandos que retornam um cursor, como find e aggregate.
- Adicionada a suporte ao operador de agregação $sum para calcular a soma dos valores de um grupo.
- Adicionada a suporte aos operadores $limit e $skip para restringir o número de documentos e pular documentos ao agregar.
- Adicionada a suporte ao operador $count para contar documentos durante a agregação.
- Adicionada a suporte ao operador $unwind para desmembrar campos de array em documentos de entrada e formar uma lista com um documento separado para cada elemento do array.
- Adicionada a suporte parcial aos comandos collStats, dbStats e dataSize para obter estatísticas sobre a coleção e o banco de dados, assim como o tamanho dos dados.
Fonte: opennet.ru
