Budowa drzewa zależności
Kompilacja w efekcie tworzy graf. Polecam poznać sortowanie topologiczne. Przydaje się.
Drzewo zależności to plan realizacji zapytań w postaci grafu skierowanego. Jest to struktura danych, która budowana jest w trakcie kompilacji oraz modyfikowana w trakcie dodawania zapytań AdHoc. Korzeniami tego grafu są deklaracje efemerydów. Wszelkiej postaci deklaracje tworzące obiekty zewnętrzne – tzw. Źródła danych. Wewnątrz grafu występują artefakty i substraty. Na końcu łańcucha przetwarzania znajdują się artefakty – jako wyniki końcowe łańcucha.
Taka konstrukcja to graf skierowany. Graf, który posiada wiele korzeni i wiele wierzchołków końcowych. Wewnątrz grafu znajdują się węzły łączące. Każdy węzeł znajduje się na drodze od korzenia do wierzchołka końcowego. Najlepiej to zwizualizuje przykład.
Na początku rozważmy następujące trywialne zapytanie:
DECLARE a UINT STREAM core0, 0.1 FILE 'datafile1.txt'
SELECT str1[0] STREAM str1 FROM core0Graf, w którym uwypuklone zostaną dependencje pomiędzy poszczególnymi obiektami uzyskamy w następujący sposób:
$ xretractor -c query5.rql -d > out.dot && dot -Tsvg out.dot -o out.svg
Rys. 14. Dependencja efemeryd-artefakt
Skomplikujmy trochę ten graf dodając dwie deklaracje efemerydów i dodatkowy artefakt.
Graf zależności dla powyższego zestawu zapytań prezentuje się następująco:

Rys. 15. Dependencja efemerydy-artefakty
Zbudujmy dodatkowy węzeł zależny od artefaktów. Najprościej dodać następujące zapytanie na końcu:
Graf zmieni swoją postać:

Rys. 16. Dependencja efemerydy-artefakty-artefakty
Jak widać na Rys. 16 strumień str3 nie jest zależny bezpośrednio od danych dostarczanych przez strumienie core0 i core1. Zapytania tworzą graf zależności a kolejności ich wywoływania jest uporządkowana. Wartość interwału w strumieniach rośnie w kierunku korzeni. Wzrost w kierunku korzenia wynika z równań wyznaczających interwały opracowanej algebry.
Proszę zwrócić uwagę, że zapytania w pliku rql przetwarzane są sekwencyjnie. Próba odwołania się w zapytaniu do obiektu, który nie jest jeszcze zdefiniowany skończy się błędem kompilacji.
W przypadku dołączenia do drzewa zależności następującego zapytania wytworzymy dodatkowy substrat.
Tak dołączone zapytanie spowoduje modyfikację drzewa zależności w sposób przedstawiony na Rys. 17.

Rys. 17. Dependencja z substratem
Substrat został oznaczony innym kolorem oraz oznaczeniem Auto znajdującym się obok interwału czasowego.
Last updated