Foi publicado o lançamento do projeto FerretDB 0.3, que permite substituir o SGBD orientado a documentos MongoDB pelo PostgreSQL sem alterar o código dos aplicativos. O FerretDB é implementado como um servidor proxy, traduzindo as chamadas ao MongoDB em consultas SQL para o PostgreSQL, permitindo o uso do PostgreSQL como o verdadeiro repositório. O código é escrito na linguagem Go e é distribuído sob a licença Apache 2.0.
A necessidade de migração pode surgir devido à transição do MongoDB para uma licença não livre, SSPL, que se baseia na licença AGPLv3, mas não é aberta, pois contém uma exigência discriminatória de fornecimento sob a licença SSPL não apenas do código do próprio aplicativo, mas também dos textos-fonte de todos os componentes envolvidos na prestação do serviço em nuvem.
O principal público-alvo do FerretDB são os usuários que não utilizam em seus aplicativos as funcionalidades avançadas do MongoDB, mas desejam usar uma pilha de software completamente aberta. Neste estágio de desenvolvimento, o FerretDB suporta apenas parte das funcionalidades do MongoDB mais comumente usadas em aplicativos típicos. No futuro, planejam alcançar a plena compatibilidade com os drivers do MongoDB e oferecer a possibilidade de usar o FerretDB como uma substituição transparente do MongoDB.
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.
Na versão 0.3 do FerretDB, foi implementado o comando findAndModify que altera o documento, mas retorna sua versão original. Foram implementados os operadores de atualização de campos — $inc e $set. Adicionada a suporte à ordenação de tipos de dados escalares.
Fonte: opennet.ru
