Sortie de FerretDB 0.1, une implémentation de MongoDB basée sur le SGBD PostgreSQL

La publication du projet FerretDB 0.1 (anciennement MangoDB) permet de remplacer la base de données orientée documents MongoDB par PostgreSQL sans modifier le code des applications. FerretDB est implémenté comme un serveur proxy, traduisant les requêtes à MangoDB en requêtes SQL vers PostgreSQL, permettant ainsi d'utiliser PostgreSQL comme stockage réel. Le code est écrit en Go et distribué sous la licence Apache 2.0.

Le besoin de migration peut survenir en raison du passage de MongoDB à une licence non libre, SSPL, qui est basée sur la licence AGPLv3, mais n'est pas open source, car elle contient une exigence discriminatoire de livraison sous la licence SSPL non seulement du code de l'application elle-même, mais aussi des codes sources de tous les composants impliqués dans la fourniture de services cloud.

La cible démographique de FerretDB inclut les utilisateurs qui n'utilisent pas dans leurs applications les fonctionnalités avancées de MongoDB, mais qui souhaitent utiliser une pile logicielle entièrement open source. À ce stade, FerretDB prend en charge uniquement une partie des fonctionnalités de MongoDB, les plus couramment utilisées dans les applications standards. À l'avenir, ils prévoient d'atteindre une compatibilité totale avec les pilotes MongoDB et de permettre l'utilisation de FerretDB comme un substitut transparent de MongoDB.

Rappelons que MongoDB occupe une niche entre des systèmes rapides et évolutifs manipulant des données au format clé/valeur, et des bases de données relationnelles, fonctionnelles et pratiques pour formuler des requêtes. MongoDB prend en charge le stockage de documents au format JSON-like, dispose d'un langage suffisamment flexible pour formuler des requêtes, peut créer des index pour divers attributs stockés, assure efficacement le stockage de grands objets binaires, prend en charge le journal des opérations de modification et d'ajout de données à la DB, peut fonctionner selon le modèle Map/Reduce, prend en charge la réplication et la création de configurations tolérantes aux pannes.

Dans la version 0.1.0 de FerretDB, la méthode d'extraction des données depuis PostgreSQL a été entièrement refondue. Auparavant, pour chaque requête entrante MongoDB, une requête SQL unique était générée pour PostgreSQL, utilisant des fonctions pour manipuler le format JSON et appliquant le filtrage des résultats côté PostgreSQL. En raison des différences dans la sémantique des fonctions json de PostgreSQL et de MongoDB, un comportement incohérent était observé lors de la comparaison et du tri de différents types. Pour résoudre ce problème, FerretDB extrait désormais un ensemble de données redondant depuis PostgreSQL, tandis que le filtrage des résultats est effectué côté FerretDB, ce qui a permis de reproduire le comportement de MongoDB dans la plupart des situations.

Le prix de l'amélioration de la compatibilité a été une baisse des performances, que les futures versions envisagent de compenser par le filtrage sélectif côté FerretDB uniquement pour les requêtes où des divergences de comportement sont observées. Par exemple, la requête « db.collection.find({_id: ‘some-id-value’}) » peut être entièrement traitée dans PostgreSQL. L'objectif principal du projet à ce stade de développement est d'atteindre la compatibilité avec MongoDB, tandis que les préoccupations de performance sont mises au second plan. Parmi les changements fonctionnels dans cette nouvelle version, on note la prise en charge de tous les opérateurs binaires, de l'opérateur de comparaison « $eq », ainsi que des opérateurs « $elemMatch » et « $bitsAllClear ».

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster