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 läses in med en Direkt upptäcktLOAD-sats (Direct Query), skapas en liknande tabell enbart med 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 urval görs, 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 visualiseringarna 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 ger inte stöd för optimering av frågeprestanda från Qlik Sense applikationen. Det går däremot 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 Sense 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 Sense minnesfält behåller bara en kopia av ett fältvärde när det finns flera instanser 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
DIREKTFRÅGA är skiftlägeskänsligt vid associationer med minnesdata. Direkt upptäckt väljer data från källdatabaser enligt skiftlägeskänsligheten hos de efterfrågade 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.
| Kolumn A | Kolumn B |
|---|---|
| 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:
| Kolumn A | Kolumn B |
|---|---|
| ' 1' | utrymme_före |
| '1' | inget utrymme |
| '1 ' | Utrymme efter |
| '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 endast "no_space" och vissa, 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.
-
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 DirectCacheSeconds systemvariabeln. När tidsgränsen har uppnåtts, Qlik Sense rensar cacheminnet för de Direkt upptäckt 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.