Vous semblez faire beaucoup d'hypothèses, peut-être basées sur votre expérience avec SVN et CVS.
Git et Mercurial sont fondamentalement comme SVN et CVS
Comparer Git et CVS, c'est comme comparer un iPad et un Atari. CVS a été créé à l'époque où les dinosaures parcouraient la Terre . Subversion est fondamentalement une version améliorée de CVS. En supposant que les systèmes de contrôle de version modernes comme git et Mercurial fonctionnent comme eux, cela n'a pas beaucoup de sens.
Une base de données relationnelle est plus efficace qu'une base de données à usage unique
Pourquoi? Les bases de données relationnelles sont vraiment compliquées et peuvent ne pas être aussi efficaces que les bases de données à usage unique. Quelques différences du haut de ma tête:
- Les systèmes de contrôle de version n'ont pas besoin d'un verrouillage compliqué, car vous ne pouvez pas faire plusieurs validations en même temps de toute façon.
- Les systèmes de contrôle de version distribués doivent être extrêmement efficaces en termes d'espace, car la base de données locale est une copie complète du dépôt.
- Les systèmes de contrôle de version n'ont besoin de rechercher les données que de deux manières spécifiques (par auteur, par ID de révision, parfois recherche en texte intégral). Faire votre propre base de données qui peut gérer les recherches d'ID auteur / révision est trivial et les recherches en texte intégral ne sont pas très rapides dans les bases de données relationnelles que j'ai essayées.
- Les systèmes de contrôle de version doivent fonctionner sur plusieurs plates-formes. Cela rend plus difficile l'utilisation d'une base de données qui doit être installée et exécutée en tant que service (comme MySQL ou PostgreSQL).
- Les systèmes de contrôle de version sur votre machine locale ne doivent être exécutés que lorsque vous faites quelque chose (comme un commit). Laisser un service comme MySQL fonctionner tout le temps au cas où vous voudriez faire un commit est un gaspillage.
- Pour la plupart, les systèmes de contrôle de version ne veulent jamais supprimer l'historique, il suffit de l'ajouter. Cela peut conduire à différentes optimisations et à différentes méthodes de protection de l'intégrité.
Les bases de données relationnelles sont plus sûres
Encore une fois, pourquoi? Vous semblez supposer que parce que les données sont stockées dans des fichiers, les systèmes de contrôle de version comme git et Mercurial n'ont pas de commits atomiques , mais ils en ont. Les bases de données relationnelles stockent également leurs bases de données sous forme de fichiers. Il est notable ici que CVS ne fait pas de commit atomique, mais c'est probablement parce qu'il vient des âges sombres, pas parce qu'ils n'utilisent pas de bases de données relationnelles.
Il y a aussi le problème de la protection des données contre la corruption une fois qu'elles sont dans la base de données, et là encore la réponse est la même. Si le système de fichiers est corrompu, peu importe la base de données que vous utilisez. Si le système de fichiers n'est pas corrompu, votre moteur de base de données peut être endommagé. Je ne vois pas pourquoi une base de données de contrôle de version serait plus sujette à cela qu'une base de données relationnelle.
Je dirais que les systèmes de contrôle de version distribués (comme git et Mercurial) sont meilleurs pour protéger votre base de données que le contrôle de version centralisé, car vous pouvez restaurer l'intégralité du référentiel à partir de n'importe quel clone. Donc, si votre serveur central brûle spontanément, avec toutes vos sauvegardes, vous pouvez le restaurer en l'exécutant git init
sur le nouveau serveur, puis git push
depuis n'importe quelle machine de développeur .
Réinventer la roue est mauvais
Ce n'est pas parce que vous pouvez utiliser une base de données relationnelle pour tout problème de stockage que vous le devriez . Pourquoi utilisez-vous des fichiers de configuration au lieu d'une base de données relationnelle? Pourquoi stocker des images sur le système de fichiers alors que vous pouvez stocker les données dans une base de données relationnelle? Pourquoi garder votre code sur le système de fichiers alors que vous pouvez tout stocker dans une base de données relationnelle?
"Si tout ce que vous avez est un marteau, tout ressemble à un clou."
Il y a aussi le fait que les projets open source peuvent se permettre de réinventer la roue quand cela est pratique, car vous n'avez pas les mêmes types de contraintes de ressources que les projets commerciaux. Si vous avez un bénévole qui est un expert dans la rédaction de bases de données, alors pourquoi ne pas les utiliser?
Quant à savoir pourquoi nous ferions confiance aux auteurs de systèmes de contrôle des révisions pour savoir ce qu'ils font .. Je ne peux pas parler pour les autres VCS, mais je suis assez confiant que Linus Torvalds comprend les systèmes de fichiers .
Pourquoi certains systèmes de contrôle de version commerciaux utilisent-ils alors une base de données relationnelle?
Très probablement une combinaison des éléments suivants:
- Certains développeurs ne veulent pas écrire de bases de données.
- Les développeurs de systèmes de contrôle de version commerciaux ont des contraintes de temps et de ressources, ils ne peuvent donc pas se permettre d'écrire une base de données lorsqu'ils ont déjà quelque chose de proche de ce qu'ils veulent. En outre, les développeurs sont chers et les développeurs de bases de données (comme dans les personnes qui écrivent des bases de données) sont probablement plus chers, car la plupart des gens n'ont pas ce genre d'expérience.
- Les utilisateurs de systèmes de contrôle de version commerciaux sont moins susceptibles de se soucier des frais généraux liés à la configuration et à l'exécution d'une base de données relationnelle, car ils en ont déjà une.
- Les utilisateurs de systèmes de contrôle de version commerciaux sont plus susceptibles de vouloir une base de données relationnelle sauvegardant leurs données de révision, car cela peut mieux s'intégrer à leurs processus (comme les sauvegardes par exemple).