Różnice między danymi Direct Discovery i danymi w pamięci głównej
Model oparty na pamięci głównej
W ramach udostępnianego przez QlikView modelu opartego na pamięci głównej (in-memory model) wszystkie niepowtarzalne wartości w polach wybranych z tabeli w skrypcie ładowania są ładowane do struktur pól, podczas gdy dane asocjacyjne są jednocześnie ładowane do tej tabeli. Wszystkie dane pól i dane asocjacyjne są przechowywane w pamięci głównej.
Druga powiązana tabela załadowana do pamięci głównej będzie mieć wspólne pole i może dodawać do tego wspólnego pola nowe niepowtarzalne wartości lub współdzielić z nim istniejące wartości.
Direct Discovery
Jeśli pola tabeli zostaną załadowane za pomocą instrukcji Direct DiscoveryLOAD (Direct Query), utworzona zostanie wówczas podobna tabela wyłącznie z polami DIMENSION. Jak ma to miejsce w modelu opartym na pamięci głównej, niepowtarzalne wartości dla pól DIMENSION są ładowane do pamięci głównej. Asocjacje między polami pozostają jednak nadal zapisane w bazie danych.
Wartości pól MEASURE są również pozostawiane w bazie danych.
Po określeniu struktury Direct Discovery pola Direct Discovery mogą być używane z określonymi obiektami wykresu oraz na potrzeby asocjacji z polami zapisanymi w pamięci głównej. Jeśli korzysta się z pola Direct Discovery, QlikView automatycznie tworzy odpowiednie zapytanie SQL uruchamiane względem danych zewnętrznych. Po dokonaniu selekcji wartości powiązanych danych z pól Direct Discovery są używane w warunkach WHERE zapytań do bazy danych.
W odniesieniu do każdej selekcji wykresy z polami Direct Discovery są ponownie przeliczane, a obliczenia mają miejsce w tabeli źródłowej bazy danych w wyniku wykonania zapytania SQL utworzonego przez QlikView. Funkcja warunku obliczenia może być stosowana w celu określenia momentu ponownego obliczenia wartości wykresu. Dopóki taki warunek nie zostanie spełniony, QlikView nie wysyła zapytań w celu ponownego obliczenia wartości wykresu.
Różnice w działaniu pól w pamięci głównej i pól Direct Discovery
Przetwarzanie odbywające się w pamięci głównej jest zawsze szybsze niż przetwarzanie odbywające się w źródłowych bazach danych. Działanie Direct Discovery odzwierciedla działanie systemu obsługującego bazę danych przetwarzającą zapytania Direct Discovery.
Można korzystać ze standardowej bazy danych i najlepszych praktyk w zakresie dostrajania zapytań dla Direct Discovery. Każde takie dostrajanie działania powinno być wykonywane w ramach źródłowej bazy danych. Direct Discovery nie obsługuje funkcji dostrajania zapytań z poziomu dokumentu QlikView. Do bazy danych można jednak kierować asynchroniczne wywołania jednoczesne, korzystając z możliwości buforowania połączeń. Składnia skryptu ładowania przeznaczonego do ustawiania buforowania połączeń jest następująca:
SET DirectConnectionMax=10;
Funkcja buforowania w QlikView również pozytywnie wpływa na działanie tego rozwiązania. Zob.Buforowanie i Direct Discovery poniżej.
Działanie Direct Discovery z polami DIMENSION może być również ulepszone przez odłączenie niektórych pól od asocjacji. W tym celu należy skorzystać ze słowa kluczowego DETACH w ramach DIRECT QUERY. Odłączone pola nie są uwzględniane w zapytaniu o asocjacje, ale nadal wchodzą w skład filtrów i skracają czas związany z selekcją.
Zarówno pola oparte na pamięci głównej QlikView, jak i pola Direct Discovery DIMENSION zapisują wszystkie swoje dane w pamięci głównej, ale sposób, w jaki dane te są ładowane, wpływa na szybkość ładowania do pamięci głównej. W QlikView pola oparte na pamięci głównej mają tylko jedną kopię wartości pola w przypadku wielu wystąpień tej samej wartości. Wszystkie dane pól są jednak ładowane, a następnie zduplikowane dane zostają zidentyfikowane.
Pola DIMENSION również mają tylko jedną kopię wartości pola, wartości powielone są jednak odrzucane już przy sortowaniu w bazie danych, przed załadowaniem do pamięci. W przypadku przetwarzania dużych ilości danych, jak ma to zazwyczaj miejsce w przypadku korzystania z Direct Discovery, dane te zostają załadowane znacznie szybciej w ramach instrukcji DIRECT QUERY, niż w ramach instrukcji SQL SELECT używanej dla pól opartych na pamięci głównej.
Różnice między danymi w pamięci głównej i danymi w bazie danych
Instrukcja DIRECT QUERY uwzględnia wielkość liter podczas tworzenia asocjacji z danymi opartymi na pamięci głównej. Direct Discovery wybiera dane ze źródłowych baz danych zgodnie z zasadami uwzględniania wielkości liter w polach bazy danych, których dotyczą zapytania. Jeśli w polach w bazie danych wielkość liter nie jest uwzględniana, wówczas zapytanie Direct Discovery może zwrócić dane, których nie zwróciłoby zapytanie oparte na pamięci głównej. Jeśli na przykład następujące dane występowały w bazie danych, która nie uwzględnia wielkości liter, zapytanie Direct Discovery o wartość "Red" zwróciłoby wszystkie cztery wiersze.
ColumnA | ColumnB |
---|---|
red | one |
Red | two |
rED | three |
RED | four |
W przypadku modelu opartego na pamięci głównej wybór "Red," zwróciłby jednak tylko następujący wynik:
Red two
QlikView normalizuje dane w zakresie, który zwraca określone wartości w odniesieniu do wybranych danych, których to wartości baza danych by nie zwróciła. W efekcie zapytanie oparte na pamięci głównej może zwrócić więcej pasujących wartości niż zapytanie Direct Discovery. Na przykład w następującej tabeli wartości dla liczby "1" różnią się lokalizacją spacji dookoła niej:
ColumnA | ColumnB |
---|---|
' 1' | space_before |
'1' | no_space |
'1 ' | space_after |
'2' | two |
W przypadku wybrania "1" na liście wartości dla ColumnA, gdy dane są podane w standardowym modelu QlikView opartym na pamięci głównej, powiązane zostaną trzy pierwsze wiersze:
ColumnA | ColumnB |
---|---|
' 1' | space_before |
'1' | no_space |
'1 ' | space_after |
Jeśli lista wartości zawiera dane Direct Discovery, wybór liczby "1" może powiązać tylko wartość "no_space". Wyniki zwracane dla danych Direct Discovery zależą od bazy danych. Czasami zwrócone zostaną tylko wartości "no_space", a czasami, na przykład w przypadku SQL Server, zwrócone zostaną wartości "no_space" i "space_after".
Buforowanie i Direct Discovery
W QlikView buforowanie powoduje, że stany wyboru zapytań i wyniki powiązanych zapytań są umieszczane w pamięci głównej. W przypadku dokonania tych samych selekcji QlikView korzysta z zapytania zapisanego w buforze i nie przesyła już zapytania do bazy danych. W przypadku dokonania innej selekcji, do źródła danych przesyłane jest zapytanie SQL. Znajdujące się w buforze wyniki są udostępniane użytkownikom.
Przykład:
-
Użytkownik dokonuje pierwszej selekcji.
Do odpowiedniego źródła danych przesłane zostaje zapytanie SQL.
-
Użytkownik czyści selekcję i ponownie dokonuje tej samej selekcji.
Zwracany jest wynik z bufora, a zapytanie SQL nie zostaje przesłane do źródła danych.
-
Użytkownik dokonuje innej selekcji.
Do odpowiedniego źródła danych przesłane zostaje zapytanie SQL.
Za pomocą zmiennej systemowej DirectCacheSeconds można określić limit czasu buforowania. Po osiągnięciu tego limitu QlikView czyści bufor z wyników zapytań Direct Discovery, które zostały zwrócone dla poprzednich selekcji.Następnie QlikView generuje zapytania do danych źródłowych pod kątem selekcji i odtwarza bufor, który istnieje do osiągnięcia wyznaczonego limitu czasu.
Domyślny czas buforowania dla wyników zapytania Direct Discovery to 30 minut, chyba że zastosowana została zmienna systemowa DirectCacheSeconds.