Skillnader mellan Direkt upptäckt och minnesdata
Minnesmodell
Med Qlik Senses minnesmodell läses alla unika värden i de fält som har valts från en tabell i laddningsskriptet in i fältstrukturer. Associativa data laddas samtidigt in i tabellen. Fältdata och associativa data hanteras i RAM-minnet.
En andra, kopplad tabell som läses in i minnet skulle ha ett gemensamt fält. Den tabellen skulle kunna lägga till nya unika värden i det gemensamma fältet eller dela befintliga värden med det.
Direkt upptäckt
När tabellfält laddas med en Direkt upptäckt LOAD-sats (Direct Query) skapas en liknande tabell med enbart DIMENSION-fälten. Precis som med minnesfälten laddas de unika värdena för DIMENSION-fälten till minnet. Men associationerna mellan fälten lämnas kvar i databasen.
MEASURE-fältvärden lämnas också kvar i databasen.
När Direkt upptäckt-strukturen har etablerats kan Direkt upptäckt-fälten användas med vissa visualiseringsobjekt, och de kan användas för associationer med minnesfält. När ett Direkt upptäckt-fält används skapar Qlik Sense automatiskt rätt SQL-fråga att köra mot externa data. När man gör val används de associerade datavärdena från Direkt upptäckt-fälten i WHERE-villkoren i databasfrågorna.
För varje val beräknas diagrammen med Direkt upptäckt-fält på nytt. Beräkningarna görs i källans databastabell genom att exekvera den SQL-fråga som har skapats i Qlik Sense. Funktionen för beräkningsvillkor kan användas för att ange när visualiseringar ska beräknas på nytt. Qlik Sense skickar inga frågor för att beräkna visualiseringarna på nytt förrän villkoret har uppfyllts.
Skillnader i prestanda mellan minnesfält och Direkt upptäckt-fält
Minnesbearbetning går alltid snabbare än bearbetning i källdatabaser. Prestandan för Direkt upptäckt motsvarar prestandan för det system där databasen som hanterar Direkt upptäckt-frågorna körs.
Det går att använda de vanliga regelverken när man gör inställningar för databasen och frågorna för Direkt upptäckt. Alla prestandainställningar bör göras i källdatabasen. Direkt upptäckt har inte stöd för frågeprestandainställningar från Qlik Sense-appen. Det går dock att göra asynkrona, parallella anrop mot databasen med hjälp av anslutningspoolning. Skriptsyntaxen för anslutningspoolning är:
SET DirectConnectionMax=10;
Qlik Senses cachelagring förbättrar också användarens upplevelse av programmet. Se Cachning och Direkt upptäckt nedan.
Prestanda för Direkt upptäckt med DIMENSION-fält kan även förbättras genom att koppla bort några av fälten från associationerna. Detta görs med nyckelordet DETACH vid DIRECT QUERY. Medan frånkopplade fält inte genomsöks efter associationer, ingår de ändå i filtren, vilket gör att tiderna för val kortas ner.
Qlik Senses minnesfält och Direkt upptäckt DIMENSION-fält lagrar båda alla sina data i minnet. Det är sättet på vilket de laddas som påverkar hur snabbt laddningen till minnet går. Qlik Senses minnesfält behåller bara en kopia av ett fältvärde när det finns flera förekomster av samma värde. Men alla fältdata laddas, och sedan sorteras dubblettdata ut.
DIMENSION-fält behåller också bara en kopia av fältvärdet, men dubblettvärdena sorteras ut i databasen innan de läses in i minnet. När du hanterar stora datamängder, vilket är normalt när man använder Direkt upptäckt, läses data in mycket fortare i form av en DIRECT QUERY-inläsning än genom den SQL SELECT-inläsning som används för minnesfält.
Skillnader mellan minnesdata och databasdata
DIRECT QUERY är skiftlägeskänsligt vad gäller associationer med minnesdata. Direkt upptäckt väljer data från källdatabaser enligt skiftlägeskänsligheten hos de genomsökta databasfälten. Om databasfälten inte är skiftlägeskänsliga, kan en Direkt upptäckt-fråga returnera vissa data som en minnesfråga inte returnerar. Om följande data exempelvis ligger i en databas som inte är skiftlägeskänslig, skulle en Direkt upptäckt-fråga efter värdet "Red" returnera alla fyra raderna.
ColumnA | ColumnB |
---|---|
röd | en |
Röd | två |
rÖD | tre |
RÖD | fyra |
Om man å andra sidan väljer "Red," in-memory, returnerar frågan endast:
Red two
Qlik Sense normaliserar data i en utsträckning som leder till att valda data ger matchningar som databaser inte skulle matcha. Därför kan en minnesfråga ge fler matchande värden än en Direkt upptäckt-fråga. Se till exempel tabellen nedan, där värdena för talet "1" varierar beroende på hur blankstegen omkring dem är placerade:
ColumnA | ColumnB |
---|---|
' 1' | space_before |
'1' | no_space |
'1 ' | space_after |
'2' | två |
Om du väljer "1" i en filterruta för ColumnA där data är standard för Qlik Sense-minnet associeras de första tre raderna:
ColumnA | ColumnB |
---|---|
' 1' | space_before |
'1' | no_space |
'1 ' | space_after |
Om filterrutan innehåller Direkt upptäckt-data kan urvalet av "1" enbart associera "no_space". Vilka matchningar som returneras för Direkt upptäckt-data beror på databasen. Vissa returnerar bara "no_space", och vissa, såsom SQL Server, returnerar "no_space" och "space_after".
Cachning och Direkt upptäckt
Qlik Sense-cachningen lagrar urvalsstatus för frågor och associerade frågeresultat i minnet. När samma typ av val görs använder Qlik Sense sig av frågan i cacheminnet i stället för att söka i källdata. När ett annat val görs, körs en SQL-fråga mot datakällan. De cachade resultaten delas mellan användare.
Exempel:
-
Användaren applicerar ett första urval.
SQL släpps vidare till den bakomliggande datakällan.
-
Användaren rensar sina val och applicerar samma val som första urval.
Cacheresultatet returneras, SQL släpps inte vidare till den bakomliggande datakällan.
-
Användaren applicerar annat urval.
SQL släpps vidare till den bakomliggande datakällan.
En tidsgräns för cachning kan ställas in med systemvariabeln DirectCacheSeconds. När tidsgränsen nås raderar Qlik Sense cacheminnet för Direkt upptäckts frågeresultat som genererades för de tidigare urvalen. Qlik Sense ställer då frågor om urval till datakällan och återskapar cacheminnet för den tilldelade tidsgränsen.
Cachelagringsgränsen för Direkt upptäckt-sökresultat är 30 minuter, såvida inte systemvariabeln DirectCacheSeconds används.