Wygląda na to, że więcej systemów kontroli źródła nadal wykorzystuje pliki jako sposób przechowywania danych wersji. Vault i TFS używają Sql Server jako magazynu danych, co moim zdaniem byłoby lepsze zarówno pod względem spójności danych, jak i szybkości.
Dlaczego więc SVN, jak sądzę, GIT, CVS itp. Nadal używa systemu plików jako zasadniczo bazy danych (zadaję to pytanie, ponieważ nasz serwer SVN właśnie się zepsuł podczas normalnego zatwierdzania) zamiast korzystania z rzeczywistego oprogramowania bazy danych ( MSSQL, Oracle, Postgre itp.)?
EDYCJA: Myślę, że innym sposobem zadania mojego pytania jest „dlaczego programiści VCS wprowadzają własny system przechowywania danych strukturalnych zamiast używać istniejącego?”
version-control
Andy
źródło
źródło
Odpowiedzi:
TL; DR: Niewiele systemów kontroli wersji korzysta z bazy danych, ponieważ nie jest to konieczne.
Jako pytanie do odpowiedzi na pytanie, dlaczego nie mieliby? Jakie zalety oferują „rzeczywiste” systemy baz danych w porównaniu z systemem plików w tym kontekście?
Weź pod uwagę, że kontrola wersji polega głównie na śledzeniu niewielkich metadanych i wielu różnic tekstowych. Tekst nie jest przechowywany w bazach danych bardziej wydajnie, a indeksowalność treści nie będzie czynnikiem.
Załóżmy, że Git (ze względu na argument) użył BDB lub SQLite DB dla swojego zaplecza do przechowywania danych. Co byłoby bardziej wiarygodne? Wszystko, co może uszkodzić proste pliki, może również uszkodzić bazę danych (ponieważ jest to również prosty plik z bardziej złożonym kodowaniem).
Z paradygmatu programisty polegającego na nieoptymalizowaniu, chyba że jest to konieczne, jeśli system kontroli wersji jest wystarczająco szybki i działa wystarczająco niezawodnie, po co zmieniać cały projekt na bardziej złożony?
źródło
TL;DR
to skrócona wersja odpowiedzi, a nie stwierdzenie, że pytanie jest za długie i nie przeczytał go przed odpowiedzią.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:
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ępniegit 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:
źródło
svn
różne katalogi w twoim katalogu roboczym mogą znajdować się w różnychsvn
wersjach, a prawdziwą atomicznością w całym repozytorium, którą otrzymujesz zgit
lubhg
.Właściwie
svn
używany do używania BDB do repozytoriów. W końcu się go pozbył, ponieważ był podatny na pękanie.Innym VCS, który obecnie korzysta z DB (SQLite), jest
fossil
. Zawiera także narzędzie do śledzenia błędów.Domyślam się, że prawdziwy powód jest taki, że VCSes działają z wieloma plikami. Systemy plików to po prostu inny rodzaj bazy danych (hierarchiczny, skoncentrowany na wydajności pamięci CLOB / BLOB). Normalne bazy danych nie radzą sobie tak dobrze, ponieważ nie ma powodu - systemy plików już istnieją.
źródło
System plików to baza danych. Oczywiście nie jest to relacyjna baza danych, ale większość z nich to bardzo wydajne magazyny kluczy / wartości. A jeśli twoje wzorce dostępu są dobrze zaprojektowane dla magazynu klucz-wartość (np. Format repozytorium git), to użycie bazy danych prawdopodobnie nie oferuje znaczących korzyści w porównaniu z użyciem systemu plików. (W rzeczywistości jest to kolejna warstwa abstrakcji, która może przeszkadzać.)
Wiele funkcji bazy danych to tylko dodatkowy bagaż. Wyszukiwanie pełnotekstowe? Czy wyszukiwanie pełnotekstowe ma sens w przypadku kodu źródłowego? A może musisz to inaczej tokenizować? Wymaga to również przechowywania pełnych plików przy każdej wersji, co jest rzadkie. Wiele systemów kontroli wersji przechowuje delty między wersjami tego samego pliku w celu zaoszczędzenia miejsca, na przykład Subversion i Git (przynajmniej przy użyciu plików paczek).
Wymagania dotyczące wielu platform sprawiają, że korzystanie z bazy danych jest trudniejsze.
Większość narzędzi kontroli wersji jest zbudowanych do działania na wielu platformach. W przypadku scentralizowanych narzędzi kontroli wersji wpływa to tylko na komponent serwera, ale nadal trudno jest polegać na jednym serwerze bazy danych, ponieważ użytkownicy systemu Unix nie mogą zainstalować Microsoft SQL Server, a użytkownicy systemu Windows mogą nie chcieć instalować PostgreSQL lub MySQL. System plików jest najmniej powszechnym mianownikiem. Istnieje jednak kilka narzędzi, w których serwer musi być zainstalowany na komputerze z systemem Windows, a zatem wymaga programu SQL Server, na przykład SourceGear Vault i Microsoft Team Foundation Server .
Rozproszone systemy kontroli wersji jeszcze bardziej utrudniają, ponieważ każdy użytkownik otrzymuje kopię repozytorium. Oznacza to, że każdy użytkownik potrzebuje bazy danych do umieszczenia repozytorium. Oznacza to, że oprogramowanie:
Dlatego większość rozproszonych systemów kontroli wersji używa tylko systemu plików. Godnym uwagi wyjątkiem jest Veracity SourceGear , które może przechowywać w bazie danych SQLite (przydatne dla lokalnych repozytoriów) lub relacyjnej bazy danych, takiej jak SQL Server (być może przydatne dla serwera). Oferowana przez nich usługa w chmurze może wykorzystywać nierelacyjny backend pamięci, taki jak Amazon SimpleDB , ale nie wiem, czy to prawda.
źródło
O ile widziałem w wielu ofertach, wydaje się, że pliki są „wystarczająco dobre” do zadania, co jest rozsądne, biorąc pod uwagę, że pod koniec dnia wyjściem VCSes są również pliki.
Istnieje wiele firm, które oferują zaplecze RDBMS z interfejsem svn / git / etc, więc to, o co prosisz, już istnieje.
źródło
Powiedziałbym, że dzieje się tak, ponieważ podstawową strukturą danych systemu kontroli wersji jest DAG, która bardzo słabo odwzorowuje bazy danych. Wiele danych jest również adresowalnych pod względem zawartości, co również bardzo słabo odwzorowuje bazy danych.
Integralność danych nie jest jedyną kwestią związaną z VCS, dotyczą one również integralności historii wersji , w których bazy danych nie są zbyt dobre. Innymi słowy, kiedy pobierasz wersję, musisz nie tylko upewnić się, że wersja nie ma aktualnych wad, ale także, że nic w całej historii nie zostało ukradkowo zmienione.
VCS są również produktem konsumenckim oprócz produktu korporacyjnego. Ludzie używają ich w małych, jednoosobowych projektach hobbystycznych. Jeśli dodasz kłopot związany z instalacją i konfiguracją serwera bazy danych, zrazisz większość tej części rynku. Domyślam się, że nie widzisz dużo instalacji Vault i TFS w domu. Z tego samego powodu arkusze kalkulacyjne i edytory tekstu nie korzystają z baz danych.
Jest to również powód DVCS, ale nieużywanie bazy danych czyni ją niezwykle przenośną. Mogę skopiować moje drzewo źródłowe na pendrive i użyć go ponownie na dowolnym komputerze, bez konieczności konfigurowania procesu serwera bazy danych.
Jeśli chodzi o zgorszenie podczas zatwierdzeń, VCS wykorzystuje te same techniki jak bazy danych, aby zapobiec jednoczesnego dostępu, transakcji, w atomowych itp zepsucie w obie są bardzo rzadkie, ale nie stało . Dla wszystkich celów i celów magazyn danych VCS jest bazą danych.
źródło
Lepsze odzyskiwanie po awarii (najgorszy scenariusz: przeanalizujemy to naocznie, jak w dawnych czasach)
Ułatwienie śledzenia i debugowania takich katastrof, prawdopodobnie spowodowanych błędami w systemie VCS.
Obniżenie liczby zależności. (nie zapominajmy o jednym z tych systemów jest obchodzenia się z jądra, a drugi miał)
Edytor tekstu jest zawsze dostępny. (Licencje MS SQL Server ... nie bardzo)
źródło
sqlite
jest jedyną możliwą alternatywą dla plików tekstowych, biorąc pod uwagę ogromną liczbę rozproszonych scenariuszy, które obsługują nowoczesne DVCS. (idk, być może przegapiłeś „rozproszoną” część DVCS) Wszystko inne byłoby zbyt kłopotliwe (konfiguracja + zapora ogniowa + licencja) lub nawet głupie, aby je rozpowszechnić . Z drugiej strony wykonanie najgorszego scenariusza po śmierci na sqlite może okazać się trudne.Fossil to doskonały rozproszony system kontroli wersji (DVCS), który używa SQLite do przechowywania danych, bez plików tekstowych.
Naprawdę podoba mi się, że ma zintegrowane: śledzenie błędów, Wiki i to, że jest naprawdę rozproszone. Mam na myśli, że naprawdę możesz pracować w trybie offline i naprawiać błędy.
Fossil używa Sqlite jako formatu pliku aplikacji. W przemówieniu PgCon dr Richard Hipp wyjaśnia, jakie są zalety korzystania z sqlite jako systemu plików aplikacji, i dość przekonująco argumentuje na korzyść korzystania z bazy danych jako systemu plików.
Teraz dr Hipp zajął się obawami dotyczącymi zapisywania kodu w bazie danych
źródło