Wygląda na to, że przyjmujesz wiele założeń, być może opartych na twoim doświadczeniu z SVN i CVS.
Git i Mercurial są w zasadzie jak SVN i CVS
Porównanie git i CVS jest jak porównanie iPada i Atari. CVS powstał, gdy dinoaury wędrowały po Ziemi . Subversion jest w zasadzie ulepszoną wersją CVS. Zakładanie, że nowoczesne systemy kontroli wersji, takie jak git i Mercurial, działają jak one, nie ma większego sensu.
Relacyjna baza danych jest bardziej wydajna niż baza jednofunkcyjna
Czemu? Relacyjne bazy danych są naprawdę skomplikowane i mogą nie być tak wydajne jak bazy danych do jednego celu. Niektóre różnice z czubka mojej głowy:
- Systemy kontroli wersji nie wymagają skomplikowanego blokowania, ponieważ i tak nie można wykonać wielu zatwierdzeń jednocześnie.
- Rozproszone systemy kontroli wersji muszą być bardzo oszczędne pod względem miejsca, ponieważ lokalna baza danych jest pełną kopią repozytorium.
- Systemy kontroli wersji muszą wyszukiwać dane tylko na kilka konkretnych sposobów (według autora, identyfikatora wersji, czasami wyszukiwania pełnotekstowego). Tworzenie własnej bazy danych, która może obsługiwać wyszukiwanie autorów / numerów identyfikacyjnych wersji, jest banalne, a wyszukiwanie pełnotekstowe nie jest bardzo szybkie w żadnej relacyjnej bazie danych, którą próbowałem.
- Systemy kontroli wersji muszą działać na wielu platformach. Utrudnia to korzystanie z bazy danych, którą należy zainstalować i uruchomić jako usługę (np. MySQL lub PostgreSQL).
- Systemy kontroli wersji na twoim komputerze lokalnym muszą działać tylko wtedy, gdy coś robisz (np. Zatwierdzenie). Pozostawienie usługi takiej jak MySQL działającej cały czas na wypadek, gdybyś chciał dokonać zatwierdzenia, jest marnotrawstwem.
- W większości systemy kontroli wersji nigdy nie chcą usuwać historii, wystarczy do niej dołączyć. Może to prowadzić do różnych optymalizacji i różnych metod ochrony integralności.
Relacyjne bazy danych są bezpieczniejsze
Znowu dlaczego? Wydaje się, że zakładasz, że ponieważ dane są przechowywane w plikach, systemy kontroli wersji takie jak git i Mercurial nie mają atomowych zatwierdzeń , ale mają. Relacyjne bazy danych przechowują również swoje bazy danych jako pliki. Warto zauważyć, że CVS nie wykonuje atomowych zmian, ale prawdopodobnie dzieje się tak dlatego, że pochodzą z epoki ciemności, a nie dlatego, że nie używają relacyjnych baz danych.
Istnieje również problem ochrony danych przed uszkodzeniem, gdy znajdą się w bazie danych, i znowu odpowiedź jest taka sama. Jeśli system plików jest uszkodzony, nie ma znaczenia, której bazy danych używasz. Jeśli system plików nie jest uszkodzony, silnik bazy danych może być uszkodzony. Nie rozumiem, dlaczego baza danych kontroli wersji byłaby na to bardziej podatna niż relacyjna baza danych.
Argumentowałbym, że rozproszone systemy kontroli wersji (takie jak git i Mercurial) lepiej chronią bazę danych niż scentralizowana kontrola wersji, ponieważ można przywrócić całe repo z dowolnego klonu. Jeśli więc centralny serwer spontanicznie się zapali, wraz ze wszystkimi kopiami zapasowymi, możesz go przywrócić, uruchamiając go git init
na nowym serwerze, a następnie git push
z dowolnego komputera programisty .
Ponowne wynalezienie koła jest złe
Tylko dlatego, że można używać relacyjnej bazy danych dla każdego problemu składowania nie znaczy, że powinniśmy . Dlaczego korzystasz z plików konfiguracyjnych zamiast relacyjnej bazy danych? Po co przechowywać obrazy w systemie plików, skoro można przechowywać dane w relacyjnej bazie danych? Po co trzymać kod w systemie plików, skoro można go przechowywać w relacyjnej bazie danych?
„Jeśli masz tylko młotek, wszystko wygląda jak gwóźdź”.
Istnieje również fakt, że projekty open source mogą pozwolić sobie na wynalezienie koła, gdy tylko jest to wygodne, ponieważ nie masz takich samych ograniczeń zasobów, jakie mają projekty komercyjne. Jeśli masz wolontariusza, który jest ekspertem w tworzeniu baz danych, to dlaczego nie skorzystać z nich?
Co do tego, dlaczego mielibyśmy ufać autorom systemów kontroli wersji, aby wiedzieli, co robią. Nie mogę mówić w imieniu innych VCS, ale jestem całkiem pewien, że Linus Torvalds rozumie systemy plików .
Dlaczego zatem niektóre komercyjne systemy kontroli wersji używają relacyjnej bazy danych?
Najprawdopodobniej niektóre kombinacje następujących elementów:
- Niektórzy programiści nie chcą pisać baz danych.
- Twórcy komercyjnych systemów kontroli wersji mają ograniczenia czasowe i zasobowe, więc nie mogą sobie pozwolić na napisanie bazy danych, gdy mają już coś zbliżonego do tego, czego chcą. Poza tym programiści są kosztowni, a programiści baz danych (podobnie jak ludzie, którzy piszą bazy danych) są prawdopodobnie drożsi, ponieważ większość ludzi nie ma takiego doświadczenia.
- Użytkownicy komercyjnych systemów kontroli wersji rzadziej troszczą się o koszty związane z konfiguracją i uruchomieniem relacyjnej bazy danych, ponieważ już ją mają.
- Użytkownicy komercyjnych systemów kontroli wersji jest bardziej prawdopodobne, aby chciał relacyjnej bazy danych, tworzenie kopii ich rewizji, ponieważ może to zintegrować z ich procesów lepiej (jak na przykład tworzenie kopii zapasowych).