Sembra che tu stia facendo molte ipotesi, probabilmente sulla base della tua esperienza con SVN e CVS.
Git e Mercurial sono fondamentalmente come SVN e CVS
Confrontare git e CVS è come confrontare un iPad e un Atari. CVS è stato creato quando i dinosauri vagavano per la Terra . Subversion è sostanzialmente una versione migliorata di CVS. Supponendo che i moderni sistemi di controllo delle versioni come git e Mercurial funzionino come loro, ha poco senso.
Un database relazionale è più efficiente di un database monouso
Perché? I database relazionali sono davvero complicati e potrebbero non essere efficienti come i database monouso. Alcune differenze dalla parte superiore della mia testa:
- I sistemi di controllo della versione non richiedono un blocco complicato, poiché non è possibile eseguire più commit contemporaneamente allo stesso tempo.
- I sistemi di controllo della versione distribuita devono essere estremamente efficienti in termini di spazio, poiché il database locale è una copia completa del repository.
- I sistemi di controllo della versione devono solo cercare i dati in un paio di modi specifici (per autore, per ID di revisione, a volte ricerca full-text). Creare il proprio database in grado di gestire ricerche di ID autore / revisione è banale e le ricerche full-text non sono molto veloci in nessun database relazionale che ho provato.
- I sistemi di controllo della versione devono funzionare su più piattaforme. Ciò rende più difficile l'uso di un database che deve essere installato ed eseguito come servizio (come MySQL o PostgreSQL).
- I sistemi di controllo della versione sul tuo computer locale devono essere in esecuzione solo quando stai facendo qualcosa (come un commit). Lasciando un servizio come MySQL in esecuzione tutto il tempo nel caso in cui si vuole fare un commit è uno spreco.
- Per la maggior parte, i sistemi di controllo della versione non vogliono mai eliminare la cronologia, basta accedervi. Ciò può comportare diverse ottimizzazioni e diversi metodi di protezione dell'integrità.
I database relazionali sono più sicuri
Ancora una volta, perché? Sembri presumere che, poiché i dati sono archiviati in file, i sistemi di controllo della versione come git e Mercurial non hanno commit atomici , ma lo fanno. I database relazionali memorizzano anche i loro database come file. È degno di nota qui che CVS non esegue commit atomici, ma è probabile perché proviene dai secoli bui, non perché non usano database relazionali.
C'è anche il problema di proteggere i dati dalla corruzione una volta che sono nel database, e di nuovo la risposta è la stessa. Se il filesystem è corrotto, non importa quale database stai usando. Se il filesystem non è danneggiato, il tuo motore di database potrebbe essere danneggiato. Non vedo perché un database di controllo versione sarebbe più incline a questo di un database relazionale.
Direi che i sistemi di controllo della versione distribuita (come git e Mercurial) sono migliori per proteggere il tuo database rispetto al controllo centralizzato della versione, poiché puoi ripristinare l'intero repository da qualsiasi clone. Quindi, se il tuo server centrale combina spontaneamente, insieme a tutti i tuoi backup, puoi ripristinarlo eseguendolo git init
sul nuovo server, quindi git push
da qualsiasi macchina dello sviluppatore .
Reinventare la ruota è male
Solo perché puoi utilizzare un database relazionale per qualsiasi problema di archiviazione non significa che dovresti . Perché usi i file di configurazione anziché un database relazionale? Perché archiviare immagini sul filesystem quando è possibile archiviare i dati in un database relazionale? Perché conservare il codice sul filesystem quando è possibile archiviarlo tutto in un database relazionale?
"Se tutto ciò che hai è un martello, tutto sembra un chiodo."
C'è anche il fatto che i progetti open source possono permettersi di reinventare la ruota ogni volta che è conveniente, dal momento che non hai gli stessi tipi di vincoli di risorse dei progetti commerciali. Se hai un volontario esperto nella scrittura di database, perché non usarli?
Per quanto riguarda il motivo per cui dovremmo fidarci degli autori dei sistemi di controllo delle revisioni per sapere cosa stanno facendo .. Non posso parlare per altri VCS, ma sono abbastanza sicuro che Linus Torvalds capisca i filesystem .
Perché alcuni sistemi di controllo delle versioni commerciali utilizzano un database relazionale?
Molto probabilmente una combinazione dei seguenti:
- Alcuni sviluppatori non vogliono scrivere database.
- Gli sviluppatori di sistemi di controllo delle versioni commerciali hanno vincoli di tempo e risorse, quindi non possono permettersi di scrivere un database quando hanno qualcosa di simile a ciò che desiderano già. Inoltre, gli sviluppatori sono costosi e gli sviluppatori di database (come in, le persone che scrivono database) sono probabilmente più costosi, poiché la maggior parte delle persone non ha quel tipo di esperienza.
- Gli utenti dei sistemi di controllo della versione commerciale hanno meno probabilità di preoccuparsi del sovraccarico di impostazione e gestione di un database relazionale, poiché ne hanno già uno.
- È più probabile che gli utenti dei sistemi di controllo delle versioni commerciali desiderino che un database relazionale supporti i propri dati di revisione, poiché ciò potrebbe integrarsi meglio con i loro processi (come ad esempio i backup).