7

Mam ukierunkowaną strukturę danych wykresu, w której próbuję zaimplementować indywidualną kontrolę wersji dla każdego wierzchołka. Stwarza to ciekawe scenariusze i będę wdzięczny za wszelkie pomysły, które macie. W szczególności, staram się rozwiązać domyślne zachowanie systemu podczas napotkania określonych scenariuszy.Grafy i kontrola wersji

Zobacz następujący obraz: Graph versions

Scenariusz 1: "Null Pointer Paradox"

Vertex A jest przywracana do wersji 1.0. Ponieważ to wycofanie zniknie z podkatalogu, C nie będzie już wskazywać na D. Mogłoby to spowodować zagrożenie. W przypadku, gdy zachowanie się do:

  • 1,1: Usuwanie krawędzi C -> D, tworząc złamane wykres
  • 1,2: usuwanie D, pozostawiając e osierocony
  • 1,3: Usuwanie D i E
  • 1,4 : Odmowa wykonania wycofania, zanim wszystkie krawędzie wskazujące na D (w tym przypadku E -> D) zostaną usunięte.
  • 1.X: Alternatywne rozwiązania?

Scenariusz 2: "skutki pośrednie"

Vertex D jest aktualizowane tak, że zachodzi:

  • D jest teraz wersja 1.2
  • E jest obecnie wersja 1.1
  • C jest teraz wersją 1.3
  • A jest teraz wersją 1.3

wierzchołek A jest teraz przywracana do wersji 1.2, tak, że zachodzi:

  • A jest teraz w wersji 1.2
  • C jest wersja 1.2
  • D jest wersja 1.1

Jeżeli domyślne zachowanie jest:

  • 2.1: Przywróć E do 1.0
  • 2.2: Odmowa wycofania z powodu zagrożenia wersjami, w efekcie pogarszając funkcjonalność
  • 2.X: Alternatywne rozwiązania?

Odpowiedz

4

Wydaje mi się, że istnieje pewne zamieszanie o ziarnistości tutaj. Jeśli zmienisz tylko poszczególne wierzchołki, ale nie wykres, to odrzucenie pojedynczego wierzchołka nie powinno mieć wpływu na resztę wykresu. Jeśli, OTOH, ty chcesz wycofać cały wykres, powinieneś również wypróbować cały wykres.

Problemem jest to, że jeśli tylko wersja poszczególnych wierzchołków, a potem tylko masz gwarancji integralności poszczególnych wierzchołków, ale nie na wykresie jako całości. Jeśli więc, jak to opisałeś, wycofując pojedynczy werteks "prześlizguje się" przez cały wykres (lub przynajmniej podłączony subgraph), nie ma gwarancji, że zakończysz w spójnym stanie.

Badania, które wydają się być najbliższe temu, co próbujesz, dotyczą kontroli wersji dla XML, która jednak dotyczy tylko mocno wpisanych drzew (wykresy zdegenerowane IOW), a nie ogólnych.

+0

Przepraszam, że nie jest to bardziej jednoznaczne. –

+0

Zakłada się tu, że krawędzie należą do wierzchołka i są wersjonowane. W związku z tym podrzędny węzeł podrzędny, taki jak A, jest wersjonowany zgodnie ze zmianami w całym podgraphie. Jak wspomniano, w efekcie tworzy nie tylko zagnieżdżone, ale wielowymiarowe płaszczyzny integralności (lub warstwy), które mogą się przecinać. Jest oczywiste, że wszelkie możliwe rozwiązanie tego problemu wykracza poza moje osobiste zdolności matematyczne. –

+0

Jedynymi realnymi rozwiązaniami, jakie widzę w tym miejscu, są: A) Tylko vertexy wersji nie uwzględniają jej sub-i supergraph. Zasadniczo wartość, ale nie struktury B) obniżyć do struktury drzewa C), znamienny kompromisu konteksty kontroli wersji są dokładnie określona dla każdej podgrafu, ale nie pozwala na zagnieżdżone kontekst; lub, gdy kontekst zagnieżdżony jest ignorowany przez kontekst wyższego poziomu, co w pewnym stopniu uniezależnia strukturę danych i strukturę kontroli wersji. Czy mógłbyś wskazać mi badania, o których wspomniałeś? –

6

To, czym się zajmujesz, jest bardzo złożonym problemem i chociaż nie jestem świadomy zogniskowanych projektów badawczych w tym zakresie, usłyszałem pewne próby rozwiązania tego problemu. jest praktycznie niemożliwe, aby wyciągnąć szybkie i brudne rozwiązanie.Mogę wskazać na poprzednie pytania poprosiłem o tym względzie (wykresy i kontroli wersji):

Co skończyło się robi został odmowy wykonania jakiejkolwiek kontroli rewizyjnej , ale za każdym razem tworzył nowe węzły o nowych tożsamościach. Tracę rollback, tracę wszelkiego rodzaju śledzenie, ale utrzymałem to w zarządzaniu.

W praktyce jedyną rzeczą, którą można zrobić, to mieć kontrolę wersji wykresu jako całości. Bardzo trudno jest go mieć dla pojedynczych węzłów. Wszystkie problemy, które opisujesz, wynikają z faktu, że są to tranzytowe warstwy transakcji, w których w każdej warstwie masz spójny wykres utworzony w określonym momencie. Jeśli przekierujesz te warstwy, umożliwiając kontrolę wersji werteksów, masz do czynienia z puszką z robakami o rozmiarze Dune.

+0

dodając nowe węzły ze znaczników czasu, nie wydaje się tak trudne dla mnie do tej wersji cały wykres - wszystko, czego potrzeba, to lista (inny węzeł?) wszystkich węzłów (identyfikowanych przez znacznik czasu + identyfikator) w momencie tworzenia wersji. Może nawet pozwolić węzełowi rewersu na wszystkie węzły rewizji? Wycofanie się w zasadzie oznaczałoby zapytanie do wszystkich podłączonych węzłów pewnego węzła rewizyjnego. – CoDEmanX