Direct Discovery與記憶體內資料之間的差異

記憶體內資料

QlikView記憶體內模型中,載入指令碼內表格中所選欄位的所有唯一值都會載入於欄位結構,而關聯資料也會同時載入表格中。欄位資料與關聯資料都會保留在記憶體內。

載入記憶體的第二個相關表格會共用共同欄位,而此表格可能會在共同欄位中新增唯一值,也可能會共用現有值。

Direct Discovery

Direct DiscoveryLOAD陳述式 (Direct Query) 載入表格欄位時,會建立一個只有DIMENSION 欄位的類似表格。和記憶體內欄位一樣,DIMENSION欄位的唯一值會載入於記憶體內。但欄位之間的關聯則會留在資料庫中。

MEASURE欄位值也會留在資料庫中。

在建立 Direct Discovery結構後,Direct Discovery 欄位便可與某些圖表物件搭配使用,並可用於記憶體內欄位的關聯。使用 Direct Discovery欄位時,QlikView 會自動建立適當的SQL 查詢,以便在外部資料上執行。進行選取時,Direct Discovery欄位的關聯資料值會用於資料庫查詢的 WHERE 條件中。

每選取一次,便會透過執行 QlikView建立的 SQL 查詢,在來源資料庫表格重新計算具有Direct Discovery 欄位的圖表。計算條件功能可用來指定何時重新計算圖表。QlikView只會在符合條件時才傳送要重新計算圖表的查詢。

記憶體內欄位與 Direct Discovery欄位之間的效能差異

記憶體內的處理速度一向比來源資料庫的處理速度來得快。Direct Discovery的效能會反映系統在資料庫處理 Direct Discovery 查詢時的執行效能。

您可以使用標準資料庫及查詢來調整Direct Discovery的最佳做法。所有效能調整應在來源資料庫進行。Direct Discovery不支援來自QlikView 文件的查詢效能調整。不過,透過連接共用功能,即可對資料庫執行非同步的平行呼叫。設定共用功能的載入指令碼語法為︰

SET DirectConnectionMax=10;

QlikView快取也會改善整體使用者體驗。請參閱下方的快取和 Direct Discovery

將部分關聯的欄位分離,可改善具有 DIMENSION欄位的Direct Discovery 效能。這是透過 DIRECT QUERY上的DETACH 關鍵字來達成。雖然分離的欄位不會被查詢關聯,它們仍是篩選的一部分,有助於加速選取時間。

雖然 QlikView記憶體內欄位及Direct DiscoveryDIMENSION 欄位的資料都存在記憶體內,但是載入方式會影響載入記憶體的速度。當QlikView記憶體內欄位中有多個相同值時,只會保留一份欄位值。不過,載入所有欄位資料後,便會將重複資料排序出來。

DIMENSION欄位也只會儲存一份欄位値,但是會在載入記憶體前於資料庫中將重複值排序出來。處理大量資料,也就是通常在使用 Direct Discovery時,針對記憶體內欄位使用 DIRECT QUERY 載入資料的速度會比 SQL SELECT 載入快很多。

記憶體內資料及資料庫資料之間的差異

DIRECT QUERY與記憶體內資料建立關聯時會區分大小寫。Direct Discovery會根據資料庫的大小寫區分性,從來源資料庫中選取資料。如果資料庫不區分大小寫,Direct Discovery查詢可能會傳回記憶體內查詢不會傳回的資料。例如,如果下列資料存在於不區分大小寫的資料庫內,"Red"值的 Direct Discovery 查詢就會傳回所有四個列。

ColumnA ColumnB
red one
Red two
rED three
RED four

另一方面,"Red,"的記憶體內選項只會傳回:

Red two

QlikView標準化資料到一個程度,便會從資料庫無法相符的所選資料中產生相符結果。因此,記憶體內查詢可能會產生比Direct Discovery查詢更多的符合項目。例如,下列表格中,數字 "1"的值會依據周圍空格的位置而有所不同:

ColumnA ColumnB
' 1' space_before
'1' no_space
'1 ' space_after
'2' two

如果您在 ColumnA列表框中選取 "1",其中資料位於標準 QlikView 記憶體中,就會與前三列產生關聯:

' 1' space_before
'1' no_space
'1 ' space_after

如果列表框包含 Direct Discovery) 資料,則 "1" 的選項可能只會與"no_space" 產生關聯。Direct Discovery資料傳回的符合項目視資料庫而定。有些只傳回 "no_space",而有些像是 SQL Server 則會傳回 "no_space""space_after"

快取和 Direct Discovery

QlikView快取會在記憶體內儲存查詢的選項狀態。進行相同類型的選取時,QlikView會利用快取中的查詢,而非來源資料中的查詢。進行不同類型的選取時,則會在資料來源上進行SQL查詢。快取結果可供多位使用者共用。

範例:  

  1. 使用者套用初始選項。

    SQL已通過基礎資料來源。

  2. 使用者清除選項並套用相同選項作為初始選項。

    快取結果已傳回,SQL未通過基礎資料來源。

  3. 使用者套用其他選項。

    SQL已通過基礎資料來源。

可使用 DirectCacheSeconds系統變數設定快取的時間限制。一旦到達此時間限制,QlikView 便會清除 Direct Discovery 查詢在先前選項所產生結果中的快取。然後,QlikView 會查詢選項的來源資料,並根據指定時間限制重新建立快取。

若非使用 DirectCacheSeconds系統變數,Direct Discovery 查詢結果的預設快取時間是 30 分鐘。