Lanzamento de FerretDB 0.1, implementación de MongoDB baseada en DBMS PostgreSQL

O lanzamento do proxecto FerretDB 0.1 (anteriormente MangoDB) foi publicado, o que lle permite substituír o DBMS MongoDB orientado a documentos por PostgreSQL sen facer cambios no código da aplicación. FerretDB está implementado como un servidor proxy que traduce as chamadas a MangoDB en consultas SQL a PostgreSQL, o que permite que PostgreSQL se use como almacenamento real. O código está escrito en Go e distribúese baixo a licenza Apache 2.0.

A necesidade de migración pode xurdir debido á transición de MongoDB a unha licenza SSPL propietaria, que se basea na licenza AGPLv3, pero non está aberta, xa que contén un requisito discriminatorio para entregar baixo a licenza SSPL non só o propio código da aplicación, senón tamén o código fonte de todos os compoñentes implicados na prestación do servizo na nube.

O público obxectivo de FerretDB son os usuarios que non usan as capacidades avanzadas de MongoDB nas súas aplicacións, pero queren utilizar unha pila de software completamente aberta. Na fase actual de desenvolvemento, FerretDB aínda admite só parte das capacidades de MongoDB que se usan con máis frecuencia nas aplicacións típicas. No futuro, planean lograr unha compatibilidade total cos controladores para MongoDB e ofrecer a posibilidade de usar FerretDB como substituto transparente de MongoDB.

Recordemos que MongoDB ocupa un nicho entre sistemas rápidos e escalables que operan sobre datos en formato clave/valor, e DBMS relacionais, funcional e cómodo na xeración de consultas. MongoDB admite o almacenamento de documentos en formato JSON, ten unha linguaxe bastante flexible para xerar consultas, pode crear índices para varios atributos almacenados, ofrece almacenamento de grandes obxectos binarios de forma eficiente, admite o rexistro de operacións para cambiar e engadir datos á base de datos, pode traballar de acordo co paradigma Map/Reduce, admite a replicación e a creación de configuracións tolerantes a fallos.

O lanzamento de FerretDB 0.1.0 redeseñou completamente o método de recuperación de datos de PostgreSQL. Anteriormente, para cada solicitude de MongoDB entrante, xerábase unha consulta SQL a PostgreSQL, utilizando funcións para traballar co formato JSON e filtrar os resultados no lado de PostgreSQL. Debido ás diferenzas na semántica das funcións json de PostgreSQL e MongoDB, houbo unha discrepancia no comportamento ao comparar e clasificar diferentes tipos. Para resolver este problema, agora obtéñense datos de forma redundante de PostgreSQL e o resultado fíltrase no lado de FerretDB, o que permitiu replicar o comportamento de MongoDB na maioría das situacións.

O prezo do aumento da compatibilidade foi unha diminución do rendemento, que en futuras versións esperan compensar filtrando selectivamente no lado de FerretDB só consultas para as que hai discrepancia no comportamento. Por exemplo, a consulta "db.collection.find({_id: 'some-id-value'})" pódese procesar completamente en PostgreSQL. O obxectivo principal do proxecto nesta fase de desenvolvemento é lograr a compatibilidade con MongoDB, e polo momento o rendemento queda relegado a un segundo plano. Entre os cambios funcionais da nova versión, nótase o soporte para todos os operadores de bits, o operador de comparación "$eq", así como os operadores "$elemMatch" e "$bitsAllClear".

Fonte: opennet.ru

Engadir un comentario