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.

One table with three fields.

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.

Two tables with a common field.

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.

One table with two dimension fields.

Wartości pól MEASURE są również pozostawiane w bazie danych.

One table with measure field values left in the database.

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:

' 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.

Example:  

  1. Użytkownik dokonuje pierwszej selekcji.

    Do odpowiedniego źródła danych przesłane zostaje zapytanie SQL.

  2. 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.

  3. 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.