Você parece estar fazendo muitas suposições, possivelmente com base em sua experiência com SVN e CVS.
Git e Mercurial são basicamente como SVN e CVS
Comparar git e CVS é como comparar um iPad e um Atari. O CVS foi criado quando dinossauros vagavam pela Terra . O Subversion é basicamente uma versão aprimorada do CVS. Assumir que sistemas modernos de controle de versão como git e Mercurial funcionem como eles faz muito pouco sentido.
Um banco de dados relacional é mais eficiente que um banco de dados de propósito único
Por quê? Os bancos de dados relacionais são realmente complicados e podem não ser tão eficientes quanto os de uso único. Algumas diferenças em cima da minha cabeça:
- Os sistemas de controle de versão não precisam de bloqueio complicado, pois você não pode fazer vários commit ao mesmo tempo.
- Os sistemas de controle de versão distribuído precisam ser extremamente eficientes em termos de espaço, pois o banco de dados local é uma cópia completa do repositório.
- Os sistemas de controle de versão precisam apenas procurar dados de duas maneiras específicas (por autor, por ID de revisão, às vezes, pesquisa em texto completo). Criar seu próprio banco de dados que possa lidar com pesquisas de autor / ID de revisão é trivial e as pesquisas de texto completo não são muito rápidas em nenhum banco de dados relacional que eu tentei.
- Os sistemas de controle de versão precisam funcionar em várias plataformas. Isso dificulta o uso de um banco de dados que precisa ser instalado e executado como um serviço (como MySQL ou PostgreSQL).
- Os sistemas de controle de versão em sua máquina local só precisam estar em execução quando você está fazendo algo (como uma confirmação). Deixar um serviço como o MySQL sendo executado o tempo todo, caso você queira fazer uma consolidação é um desperdício.
- Na maioria das vezes, os sistemas de controle de versão nunca desejam excluir o histórico, basta anexá-lo. Isso pode levar a diferentes otimizações e métodos diferentes de proteção da integridade.
Bancos de dados relacionais são mais seguros
Novamente, por que? Você parece supor que, como os dados são armazenados em arquivos, sistemas de controle de versão como git e Mercurial não possuem confirmações atômicas , mas possuem . Os bancos de dados relacionais também armazenam seus bancos de dados como arquivos. É notável aqui que o CVS não realiza confirmações atômicas, mas isso é provável porque é da idade das trevas, não porque eles não usam bancos de dados relacionais.
Há também a questão de proteger os dados contra corrupção, uma vez que estejam no banco de dados, e novamente a resposta é a mesma. Se o sistema de arquivos estiver corrompido, não importa qual banco de dados você está usando. Se o sistema de arquivos não estiver corrompido, seu mecanismo de banco de dados poderá estar quebrado. Não vejo por que um banco de dados de controle de versão seria mais propenso a isso do que um banco de dados relacional.
Eu diria que os sistemas distribuídos de controle de versão (como git e Mercurial) são melhores para proteger seu banco de dados do que o controle centralizado de versão, pois você pode restaurar o repositório inteiro de qualquer clone. Portanto, se o servidor central combinar espontaneamente, juntamente com todos os seus backups, você poderá restaurá-lo executando git init
no novo servidor e na máquinagit push
de qualquer desenvolvedor .
Reinventar a roda é ruim
Só porque você pode usar um banco de dados relacional para qualquer problema de armazenamento não significa que você deveria . Por que você usa arquivos de configuração em vez de um banco de dados relacional? Por que armazenar imagens no sistema de arquivos quando você pode armazenar os dados em um banco de dados relacional? Por que manter seu código no sistema de arquivos quando você pode armazenar tudo em um banco de dados relacional?
"Se tudo que você tem é um martelo, tudo parece um prego."
Há também o fato de que os projetos de código aberto podem se reinventar sempre que for conveniente, já que você não possui os mesmos tipos de restrições de recursos que os projetos comerciais. Se você tem um voluntário especialista em escrever bancos de dados, por que não usá-los?
Quanto ao motivo pelo qual confiaríamos aos escritores dos sistemas de controle de revisão para saber o que estão fazendo. Não posso falar por outros VCs, mas estou bastante confiante de que Linus Torvalds entende sistemas de arquivos .
Por que alguns sistemas comerciais de controle de versão usam um banco de dados relacional?
Provavelmente, alguma combinação do seguinte:
- Alguns desenvolvedores não querem escrever bancos de dados.
- Os desenvolvedores de sistemas comerciais de controle de versão têm restrições de tempo e recursos, portanto, não podem se dar ao luxo de escrever um banco de dados quando já tiverem algo próximo do que desejam. Além disso, os desenvolvedores são caros e os desenvolvedores de bancos de dados (como as pessoas que escrevem bancos de dados) provavelmente são mais caros, já que a maioria das pessoas não tem esse tipo de experiência.
- Os usuários de sistemas comerciais de controle de versão são menos propensos a se preocupar com a sobrecarga de configurar e executar um banco de dados relacional, já que eles já possuem um.
- É mais provável que os usuários de sistemas comerciais de controle de versão desejem um banco de dados relacional apoiando seus dados de revisão, pois isso pode se integrar melhor aos seus processos (como backups, por exemplo).