2008-09-16 21 views
13

Czy istnieje rozproszony system kontroli wersji (git, bazar, mercurial, darcs itp.), Który obsługuje pliki większe niż dostępna pamięć RAM?Czy istnieje rozproszony VCS, który może zarządzać dużymi plikami?

Potrzebuję być w stanie zatwierdzić duże pliki binarne (np. Zbiory danych, źródła wideo/obrazy, archiwa), ale nie muszę mieć możliwości ich zmieniania, po prostu być w stanie zatwierdzić, a następnie zaktualizować, gdy plik zmiany.

Ostatni raz patrzyłem na to około rok temu, a żaden z oczywistych kandydatów na to nie pozwolił, ponieważ wszystkie zostały zaprojektowane tak, by odmierzać pamięć. To pozostawiło mi VCS do zarządzania kodem i czymś innym (oprogramowanie "zarządzanie zasobami" lub po prostu rsync i skrypty) dla dużych plików, co jest dość brzydkie, gdy struktury katalogów tych dwóch pokrywają się.

Odpowiedz

12

To było 3 lata od kiedy zadał to pytanie, ale od wersji 2.0 Mercurial zawiera largefiles extension, który realizuje to, co było pierwotnie szukasz:

The Rozszerzenie largefiles pozwala na śledzenie dużych, nieściśliwych plików binarnych w Mercurial bez konieczności nadmiernej przepustowości klonów i ciągnięć. Pliki dodane jako pliki duże nie są śledzone bezpośrednio przez Mercurial; raczej ich korekty są identyfikowane przez sumę kontrolną, a Mercurial śledzi te sumy kontrolne. W ten sposób, podczas klonowania repozytorium lub pobierania zestawów zmian, duże pliki w starszych wersjach repozytorium nie są potrzebne i pobierane są tylko te, które są potrzebne do aktualizacji do bieżącej wersji.Oszczędza to zarówno przestrzeń dyskową, jak i przepustowość.

2

Myślę, że przechowywanie plików binarnych w dowolnej formie systemu kontroli wersji byłoby niewydajne.

Lepszym pomysłem byłoby przechowywanie plików tekstowych meta-danych w repozytorium odwołującym się do obiektów binarnych.

+0

Dziękuję za odpowiedź. Ale tak, miałem na myśli to, o co prosiłem. Potrzebuję wersji dużych plików - istnieje inna klasa oprogramowania "zarządzanie zasobami przedsiębiorstwa", czyli w zasadzie VCS/Aperture/Version Cue na serwerze dla zasobów multimedialnych. – joelhardi

+1

Myślę, że punktem, który starałem się zrobić (nie dość kawy, obawiam się) było to, że większość systemów VCS nie są zaprojektowane do wersji obiektów binarnych. Jak mówisz, robią różnice w pamięci i przechowują deltę ... Nie ma sensu porównywania plików binarnych, ponieważ są one nieodłączne. – pobk

0

Czy musi być rozpowszechniany? Podobno subversion ma jedną wielką zaletę dla nowszych, rozproszonych VCSesów jest jego lepsza zdolność radzenia sobie z plikami binarnymi.

+0

Dzięki za odpowiedź, ale tak, to prawda. Zgadzam się, że SVN dobrze radzi sobie z plikami binarnymi - co jest częścią tego, co mnie zaskakuje, że VCSes, które wcześniej testowałem działały tak, jakby segfaultowanie na pliku 400 MB było akceptowalnym zachowaniem. – joelhardi

10

Żaden system darmowej kontroli wersji nie obsługuje tego. Jeśli chcesz tę funkcję, musisz ją wdrożyć.

Możesz odpisać od git: są zainteresowani surową wydajnością w przypadku używania jądra Linux. Jest nieprawdopodobne, by kiedykolwiek zaakceptowali kompromis w zakresie wydajności w skalowaniu do ogromnych plików binarnych. Nie wiem o Mercurial, ale wydaje się, że dokonali podobnych wyborów, jak git w sprzężeniu ich modelu operacyjnego z modelem pamięci masowej pod kątem wydajności.

Zasadniczo Bazar powinien być w stanie wesprzeć Twój przypadek użycia za pomocą wtyczki, która implementuje formaty drzew/gałęzi/repozytoriów, których pamięć na dysku i strategia implementacji jest zoptymalizowana pod kątem Twojego przypadku użycia. W przypadku, gdy wewnętrzna architektura cię blokuje i zwolnisz użyteczny kod, oczekuję, że programiści podstawowi pomogą naprawić wewnętrzną architekturę. Można również utworzyć umowę rozwoju funkcji z firmą Canonical.

Prawdopodobnie najbardziej pragmatycznym podejściem, niezależnie od konkretnej DVCS, byłoby zbudowanie systemu hybrydowego: wdrożenie dużego magazynu plików i przechowywanie odniesień do obiektów typu blob w tym sklepie do wybranej przez ciebie DVCS.

Pełne ujawnienie: Jestem byłym pracownikiem firmy Canonical i ściśle współpracowałem z programistami Bazaru.

+0

Dziękuję bardzo za odpowiedź. W zeszłym roku korespondowałem z niektórymi programistami Hg i BZR, a to, co powiedzieli, odzwierciedla twoją ocenę - ludzie z BZR powiedzieli "Hmm, to ciekawe, możesz to zakodować" i rozważaliśmy to, ale koszt czasu nie miał sensu w porównaniu do używając SVN lub hakowania ... – joelhardi

+0

... w górę jakiegoś rozwiązania hybrydowego, w którym popełniamy hashy plików lub coś takiego. Wszystkie projekty DVCS wydają się być silnie napędzane rozproszonym zastosowaniem oprogramowania FOSS, w przeciwieństwie do SVN i komercyjnych produktów, które mają szerszy zakres zastosowań. Hg i BZR to świetne projekty, dla mnie tak źle. – joelhardi

4

Tak, . Jest on dystrybuowany i zarządza ogromnymi plikami w blokach 4 MB, więc nie jest ograniczony przez konieczność ładowania ich w całości na mem w dowolnym momencie. Znajdź tutorial DVCS tutaj: http://codicesoftware.blogspot.com/2010/03/distributed-development-for-windows.html

+0

Dzięki za podpowiedź, już nie pracuję nad tym problemem, ale twoja odpowiedź przyda się ludziom czytającym ten wątek. Wygląda na to, że z ich strony pochodzi wsparcie dla Linux/BSD/OS X dla Plastic SCM, ponieważ jest to C#/Mono. Korzystają z SQL do przechowywania backendu, więc nadal jestem sceptycznie nastawiony do obsługi/wydajności "dużego pliku", przez co początkowo miałem na myśli rzeczy do, powiedzmy, źródeł wideo DV w zakresie 1-10 G. Chunking/diffing coś takiego z SQLite * może * działa, ale jak dobrze? Jeśli ktokolwiek ma z tym jakieś doświadczenie, byłoby świetnie dodać informacje. – joelhardi

+0

Witam, w rzeczywistości po prostu uruchamiamy kolejny test z plikami 2 Gb ... wszystko polega na przechowywaniu 4-mili bloków w bazie danych, co jest ... bardzo szybkie ... przy użyciu programu SQL Server, Firebird lub nawet MySQL ... opcja zapisywania plików na fs też. – pablo

3

BUP może być tym, czego szukasz. Został zbudowany jako rozszerzenie funkcjonalności git do robienia kopii zapasowych, ale to faktycznie to samo. Łamie pliki na porcje i używa toczącego się skrótu, aby zawartość pliku była możliwa do adresowania/wydajnego przechowywania.

0

doszedłem do wniosku, że najlepszym rozwiązaniem w tym przypadku byłoby użyć ZFS.

Tak ZFS nie jest DVCS ale:

  • można przydzielić miejsca na składowiska poprzez tworzenie nowych FS
  • Możesz śledzić zmiany poprzez tworzenie migawek
  • można wysyłać zrzuty (zobowiązuje) do drugiego Zbiór danych ZFS:
Powiązane problemy