2009-08-02 16 views
34

Właśnie się zastanawiałem, czy na stronach takich jak stackoverflow i wikipedia, przechowują historię edycji w nieskończoność i pozwala użytkownikowi wycofać zmiany. Czy ktoś może polecić jakieś zasoby/książki/artykuły dotyczące tego, jak to zrobić, używając dowolnej odpowiedniej technologii (takiej jak bazy danych itp.)W jaki sposób skutecznie zapisuje historię zmian?

Wielkie dzięki!

+3

+1 dobre pytanie –

Odpowiedz

14

Istnieje wiele opcji; Najprostszym oczywiście jest po prostu nagrywanie wszystkich wersji niezależnie. W przypadku witryny takiej jak stackoverflow, gdzie posty nie są zwykle edytowane bardzo wiele razy, jest to właściwe. Jednak dla czegoś jak wikipedia, trzeba być bardziej sprytnym, aby zaoszczędzić miejsce.

W przypadku Wikipedii strony są początkowo przechowywane z każdą wersją oddzielną, w text table. Okresowo wiele starszych wersji jest kompresowanych razem, a następnie pakowane do jednego pola. Ponieważ będzie wiele powtórzeń, w ten sposób zaoszczędzisz dużo miejsca.

Możesz również sprawdzić, jak radzą sobie niektóre systemy kontroli wersji - na przykład subversion używa skip deltas, gdzie wersje są przechowywane jako różnica w porównaniu z wersją do połowy historii. Oznacza to, że będzie trzeba zbadać co najwyżej korekty O (lg n), aby zrekonstruować weryfikację zainteresowania.

Git, z drugiej strony, używa czegoś bardziej podobnego do podejścia Wikipedii. Wersje są najpierw przechowywane jako indywidualnie skompresowane "luźne" obiekty, a następnie okresowo git przejmuje wszystkie luźne obiekty, sortuje je według nieco złożonej heurystyki, a następnie buduje skompresowane delty między "pobliskimi" obiektami i zrzuca wynik jako packfile. Liczba wersji, które należy odczytać w celu odtworzenia pliku, jest ograniczona przez argument do procesu budowania pakietu. Ma to interesującą właściwość, że delty mogą być budowane między obiektami, które nie są ze sobą powiązane, w niektórych przypadkach.

+1

Nie wiedziałem o deltach pomijania, algorytmach <3 logn – Patashu

Powiązane problemy