Sie scheinen viele Annahmen zu treffen, möglicherweise basierend auf Ihren Erfahrungen mit SVN und CVS.
Git und Mercurial sind im Grunde wie SVN und CVS
Das Vergleichen von Git und CVS ist wie das Vergleichen von iPad und Atari. CVS wurde erstellt, als Dinoaurier die Erde durchstreiften . Subversion ist im Grunde eine verbesserte Version von CVS. Unter der Annahme, dass moderne Versionskontrollsysteme wie git und Mercurial wie sie funktionieren, ergibt das wenig Sinn.
Eine relationale Datenbank ist effizienter als eine Einzweckdatenbank
Warum? Relationale Datenbanken sind sehr kompliziert und möglicherweise nicht so effizient wie Einzweckdatenbanken. Einige Unterschiede auf den ersten Blick:
- Versionskontrollsysteme benötigen keine komplizierten Sperren, da Sie sowieso nicht mehrere Commits gleichzeitig ausführen können.
- Verteilte Versionskontrollsysteme müssen sehr platzsparend sein, da die lokale Datenbank eine vollständige Kopie des Repos ist.
- Versionskontrollsysteme müssen nur auf einige bestimmte Arten nach Daten suchen (nach Autor, nach Revisions-ID, manchmal nach Volltextsuche). Es ist trivial, eine eigene Datenbank zu erstellen, die Autoren- / Revisions-ID-Suchen unterstützt, und die Volltextsuche ist in keiner relationalen Datenbank, die ich ausprobiert habe, sehr schnell.
- Versionskontrollsysteme müssen auf mehreren Plattformen funktionieren. Dies erschwert die Verwendung einer Datenbank, die als Dienst installiert und ausgeführt werden muss (z. B. MySQL oder PostgreSQL).
- Versionskontrollsysteme auf Ihrem lokalen Computer müssen nur ausgeführt werden, wenn Sie etwas tun (z. B. ein Commit). Es ist verschwenderisch, einen Dienst wie MySQL die ganze Zeit laufen zu lassen, nur für den Fall, dass Sie einen Commit durchführen möchten.
- In den meisten Fällen möchten Versionskontrollsysteme niemals den Verlauf löschen, sondern ihn lediglich anhängen. Dies kann zu unterschiedlichen Optimierungen und unterschiedlichen Methoden zum Schutz der Integrität führen.
Relationale Datenbanken sind sicherer
Nochmals, warum? Sie scheinen davon auszugehen, dass Versionskontrollsysteme wie git und Mercurial keine atomaren Commits haben, da Daten in Dateien gespeichert sind . Relationale Datenbanken auch speichern ihre Datenbanken als Dateien. Es ist hier bemerkenswert, dass CVS keine atomaren Commits ausführt, aber das liegt wahrscheinlich daran, dass es aus dem dunklen Zeitalter stammt, und nicht daran, dass sie keine relationalen Datenbanken verwenden.
Es gibt auch das Problem, die Daten vor Beschädigung zu schützen, sobald sie in der Datenbank sind, und die Antwort ist dieselbe. Wenn das Dateisystem beschädigt ist, spielt es keine Rolle, welche Datenbank Sie verwenden. Wenn das Dateisystem nicht beschädigt ist, ist möglicherweise Ihr Datenbankmodul defekt. Ich verstehe nicht, warum eine Versionskontrolldatenbank dafür anfälliger ist als eine relationale Datenbank.
Ich würde argumentieren, dass verteilte Versionskontrollsysteme (wie Git und Mercurial) besser zum Schutz Ihrer Datenbank geeignet sind als eine zentralisierte Versionskontrolle, da Sie das gesamte Repo von jedem Klon aus wiederherstellen können. Wenn also Ihr zentraler Server zusammen mit all Ihren Sicherungen spontan brennt, können Sie ihn wiederherstellen, indem Sie ihn git init
auf dem neuen Server und dann git push
von einem beliebigen Entwicklercomputer ausführen .
Das Rad neu zu erfinden ist schlecht
Gerade weil Sie können eine relationale Datenbank für jedes Speicherproblem verwenden bedeutet nicht , Sie sollten . Warum verwenden Sie Konfigurationsdateien anstelle einer relationalen Datenbank? Warum Bilder im Dateisystem speichern, wenn Sie die Daten in einer relationalen Datenbank speichern könnten? Warum sollten Sie Ihren Code im Dateisystem belassen, wenn Sie ihn alle in einer relationalen Datenbank speichern könnten?
"Wenn Sie nur einen Hammer haben, sieht alles aus wie ein Nagel."
Es gibt auch die Tatsache, dass Open-Source-Projekte es sich leisten können , das Rad immer dann neu zu erfinden, wenn es bequem ist, da Sie nicht die gleichen Ressourcenbeschränkungen haben wie kommerzielle Projekte. Wenn Sie einen Freiwilligen haben, der Experte für das Schreiben von Datenbanken ist, warum sollten Sie ihn dann nicht verwenden?
Was den Grund angeht, warum wir den Autoren von Revisionskontrollsystemen vertrauen, dass sie wissen, was sie tun. Ich kann nicht für andere VCS sprechen, aber ich bin ziemlich zuversichtlich, dass Linus Torvalds Dateisysteme versteht .
Warum verwenden einige kommerzielle Versionskontrollsysteme dann eine relationale Datenbank?
Höchstwahrscheinlich eine Kombination der folgenden:
- Einige Entwickler möchten keine Datenbanken schreiben.
- Entwickler von kommerziellen Versionskontrollsystemen haben Zeit- und Ressourcenbeschränkungen, sodass sie es sich nicht leisten können, eine Datenbank zu schreiben, wenn sie etwas in der Nähe haben, was sie bereits wollen. Außerdem sind Entwickler teuer, und Datenbankentwickler (wie z. B. Benutzer, die Datenbanken schreiben) sind wahrscheinlich teurer, da die meisten Benutzer nicht über diese Erfahrung verfügen.
- Benutzer von kommerziellen Versionskontrollsystemen kümmern sich mit geringerer Wahrscheinlichkeit um den Aufwand beim Einrichten und Ausführen einer relationalen Datenbank, da sie bereits eine haben.
- Benutzer von kommerziellen Versionskontrollsystemen möchten mit größerer Wahrscheinlichkeit eine relationale Datenbank, die ihre Revisionsdaten sichert, da sich diese möglicherweise besser in ihre Prozesse integrieren lässt (wie z. B. Sicherungen).