Lançamento do FerretDB 0.1, uma implementação do MongoDB baseada no SGBD PostgreSQL

Foi publicada a versão do projeto FerretDB 0.1 (anteriormente MangoDB), que permite substituir o DBMS MongoDB orientado a documentos pelo PostgreSQL sem fazer alterações no código do aplicativo. FerretDB é implementado como um servidor proxy que traduz chamadas para MangoDB em consultas SQL para PostgreSQL, permitindo que o PostgreSQL seja usado como armazenamento real. O código é escrito em 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 SSPL proprietária, que é baseada na licença AGPLv3, mas não é aberta, pois contém uma exigência discriminatória de entrega sob a licença SSPL não apenas o código da aplicação em si, mas também o código-fonte de todos os componentes envolvidos no fornecimento do serviço em nuvem.

O público-alvo do FerretDB são usuários que não usam os recursos avançados do MongoDB em seus aplicativos, mas desejam usar uma pilha de software totalmente aberta. No atual estágio de desenvolvimento, o FerretDB ainda suporta apenas parte dos recursos do MongoDB que são usados ​​com mais frequência em aplicações típicas. No futuro, eles planejam alcançar total compatibilidade com drivers para MongoDB e fornecer a capacidade de usar o FerretDB como um substituto transparente para o MongoDB.

Lembremos que o MongoDB ocupa um nicho entre sistemas rápidos e escaláveis ​​que operam dados em formato chave/valor, e SGBDs relacionais que são funcionais e fáceis de formular consultas. O MongoDB suporta o armazenamento de documentos em um formato semelhante ao JSON, possui uma linguagem bastante flexível para gerar consultas, pode criar índices para vários atributos armazenados, fornece armazenamento eficiente de grandes objetos binários, suporta registro de operações para alterar e adicionar dados ao banco de dados, pode trabalha de acordo com o paradigma Map/Reduce, suporta replicação e construção de configurações tolerantes a falhas.

O lançamento do FerretDB 0.1.0 redesenhou completamente o método de recuperação de dados do PostgreSQL. Anteriormente, para cada solicitação recebida do MongoDB, uma consulta SQL era gerada no PostgreSQL, usando funções para trabalhar com o formato JSON e filtrar os resultados no lado do PostgreSQL. Devido às diferenças na semântica das funções json do PostgreSQL e do MongoDB, houve uma discrepância no comportamento ao comparar e classificar diferentes tipos. Para resolver esse problema, os dados agora são buscados de forma redundante no PostgreSQL e o resultado é filtrado no lado do FerretDB, o que possibilitou replicar o comportamento do MongoDB na maioria das situações.

O preço do aumento da compatibilidade foi uma diminuição no desempenho, que em versões futuras eles esperam compensar filtrando seletivamente no lado do FerretDB apenas as consultas para as quais há uma discrepância de comportamento. Por exemplo, a consulta "db.collection.find({_id: 'some-id-value'})" pode ser processada inteiramente no PostgreSQL. O objetivo principal do projeto neste estágio de desenvolvimento é alcançar compatibilidade com o MongoDB, e o desempenho é relegado para segundo plano por enquanto. Entre as mudanças funcionais da nova versão, destaca-se o suporte para todos os operadores de bits, o operador de comparação “$eq”, bem como os operadores “$elemMatch” e “$bitsAllClear”.

Fonte: opennet.ru

Adicionar um comentário