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

La version du projet FerretDB 0.1 (anciennement MangoDB) a été publiée, vous permettant de remplacer le SGBD orienté document MongoDB par PostgreSQL sans apporter de modifications au code de l'application. FerretDB est implémenté en tant que serveur proxy qui traduit les appels à MangoDB en requêtes SQL vers PostgreSQL, permettant à PostgreSQL d'être utilisé 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 de la transition de MongoDB vers une licence SSPL propriétaire, basée sur la licence AGPLv3, mais qui n'est pas ouverte, car elle contient une exigence discriminatoire de fournir sous la licence SSPL non seulement le code de l'application lui-même, mais aussi le code source de tous les composants impliqués dans la fourniture du service cloud.

Le public cible de FerretDB est constitué d'utilisateurs qui n'utilisent pas les capacités avancées de MongoDB dans leurs applications, mais souhaitent utiliser une pile logicielle complètement ouverte. Au stade actuel de développement, FerretDB ne prend encore en charge qu'une partie des fonctionnalités de MongoDB les plus souvent utilisées dans les applications typiques. À l'avenir, ils prévoient d'atteindre une compatibilité totale avec les pilotes pour MongoDB et d'offrir la possibilité d'utiliser FerretDB comme remplacement transparent de MongoDB.

Rappelons que MongoDB occupe une niche entre les systèmes rapides et évolutifs qui fonctionnent sur des données au format clé/valeur, et les SGBD relationnels, fonctionnels et pratiques pour générer des requêtes. MongoDB prend en charge le stockage de documents dans un format de type JSON, dispose d'un langage assez flexible pour générer des requêtes, peut créer des index pour divers attributs stockés, fournit efficacement le stockage d'objets binaires volumineux, prend en charge la journalisation des opérations pour modifier et ajouter des données à la base de données, peut fonctionne conformément au paradigme Map/Reduce, prend en charge la réplication et la construction de configurations tolérantes aux pannes.

La version de FerretDB 0.1.0 a complètement repensé la méthode de récupération des données depuis PostgreSQL. Auparavant, pour chaque requête MongoDB entrante, une requête SQL était générée vers PostgreSQL, en utilisant des fonctions permettant de travailler avec le format JSON et de filtrer les résultats côté PostgreSQL. En raison des différences dans la sémantique des fonctions json de PostgreSQL et MongoDB, il y avait une différence de comportement lors de la comparaison et du tri des différents types. Pour résoudre ce problème, les données sont désormais récupérées de manière redondante depuis PostgreSQL, et le résultat est filtré côté FerretDB, ce qui a permis de répliquer le comportement de MongoDB dans la plupart des situations.

Le prix d'une compatibilité accrue a été une diminution des performances, qu'ils espèrent compenser dans les versions futures en filtrant sélectivement du côté de FerretDB uniquement les requêtes pour lesquelles il existe une différence de comportement. 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, et les performances sont pour l'instant reléguées au second plan. Parmi les changements fonctionnels de la nouvelle version, on note la prise en charge de tous les opérateurs de bits, de l'opérateur de comparaison « $eq », ainsi que des opérateurs « $elemMatch » et « $bitsAllClear ».

Source: opennet.ru

Ajouter un commentaire