Parece que está haciendo muchas suposiciones, posiblemente basadas en su experiencia con SVN y CVS.
Git y Mercurial son básicamente como SVN y CVS
Comparar git y CVS es como comparar un iPad y un Atari. CVS fue creado cuando los dinosaurios vagaban por la Tierra . Subversion es básicamente una versión mejorada de CVS. Asumir que los sistemas modernos de control de versiones como git y Mercurial funcionan como ellos tiene muy poco sentido.
Una base de datos relacional es más eficiente que una base de datos de un solo propósito.
¿Por qué? Las bases de datos relacionales son realmente complicadas y pueden no ser tan eficientes como las bases de datos de propósito único. Algunas diferencias en la parte superior de mi cabeza:
- Los sistemas de control de versiones no necesitan un bloqueo complicado, ya que de todos modos no puede realizar múltiples confirmaciones al mismo tiempo.
- Los sistemas de control de versiones distribuidos deben ser extremadamente eficientes en cuanto al espacio, ya que la base de datos local es una copia completa del repositorio.
- Los sistemas de control de versiones solo necesitan buscar datos de un par de formas específicas (por autor, por ID de revisión, a veces búsqueda de texto completo). Hacer su propia base de datos que pueda manejar búsquedas de ID de autor / revisión es trivial y las búsquedas de texto completo no son muy rápidas en ninguna base de datos relacional que he probado.
- Los sistemas de control de versiones deben funcionar en múltiples plataformas. Esto dificulta el uso de una base de datos que debe instalarse y ejecutarse como un servicio (como MySQL o PostgreSQL).
- Los sistemas de control de versiones en su máquina local solo necesitan ejecutarse cuando está haciendo algo (como un commit). Dejar un servicio como MySQL ejecutándose todo el tiempo en caso de que desee realizar una confirmación es un desperdicio.
- En su mayor parte, los sistemas de control de versiones nunca quieren eliminar el historial, solo añádelo. Eso puede conducir a diferentes optimizaciones y diferentes métodos de protección de la integridad.
Las bases de datos relacionales son más seguras
De nuevo por qué? Parece suponer que debido a que los datos se almacenan en archivos, los sistemas de control de versiones como git y Mercurial no tienen compromisos atómicos , pero los tienen. Las bases de datos relacionales también almacenan sus bases de datos como archivos. Es notable aquí que CVS no realiza confirmaciones atómicas, pero eso es probablemente porque es de la Edad Media, no porque no usen bases de datos relacionales.
También está el problema de proteger los datos de la corrupción una vez que están en la base de datos, y nuevamente la respuesta es la misma. Si el sistema de archivos está dañado, no importa qué base de datos esté usando. Si el sistema de archivos no está dañado, entonces su motor de base de datos podría estar dañado. No veo por qué una base de datos de control de versiones sería más propensa a esto que una base de datos relacional.
Yo diría que los sistemas de control de versiones distribuidos (como git y Mercurial) son mejores para proteger su base de datos que el control de versiones centralizado, ya que puede restaurar todo el repositorio desde cualquier clon. Por lo tanto, si su servidor central se quema espontáneamente, junto con todas sus copias de seguridad, puede restaurarlo ejecutándose git initen el nuevo servidor, y luego git pushdesde la máquina de cualquier desarrollador .
Reinventar la rueda es malo
El hecho de que pueda usar una base de datos relacional para cualquier problema de almacenamiento no significa que deba hacerlo . ¿Por qué utiliza archivos de configuración en lugar de una base de datos relacional? ¿Por qué almacenar imágenes en el sistema de archivos cuando podría almacenar los datos en una base de datos relacional? ¿Por qué mantener su código en el sistema de archivos cuando podría almacenarlo todo en una base de datos relacional?
"Si todo lo que tienes es un martillo, todo parece un clavo".
También existe el hecho de que los proyectos de código abierto pueden permitirse reinventar la rueda siempre que sea conveniente, ya que no tiene los mismos tipos de limitaciones de recursos que los proyectos comerciales. Si tiene un voluntario experto en escribir bases de datos, ¿por qué no usarlo?
En cuanto a por qué confiaríamos en los escritores de sistemas de control de revisiones para saber lo que están haciendo ... No puedo hablar por otros VCS, pero estoy bastante seguro de que Linus Torvalds entiende los sistemas de archivos .
¿Por qué algunos sistemas de control de versiones comerciales usan una base de datos relacional entonces?
Lo más probable es una combinación de lo siguiente:
- Algunos desarrolladores no quieren escribir bases de datos.
- Los desarrolladores de sistemas de control de versiones comerciales tienen limitaciones de tiempo y recursos, por lo que no pueden darse el lujo de escribir una base de datos cuando ya tienen algo cercano a lo que quieren. Además, los desarrolladores son caros, y los desarrolladores de bases de datos (como en las personas que escriben bases de datos) son probablemente más caros, ya que la mayoría de las personas no tienen ese tipo de experiencia.
- Los usuarios de sistemas de control de versiones comerciales tienen menos probabilidades de preocuparse por la sobrecarga de configurar y ejecutar una base de datos relacional, ya que ya tienen una.
- Es más probable que los usuarios de sistemas de control de versiones comerciales deseen una base de datos relacional que respalde sus datos de revisión, ya que esto puede integrarse mejor con sus procesos (como las copias de seguridad, por ejemplo).