Diferencias entre datos Direct Discovery y datos en memoria

El modelo en memoria

En el modelo en memoria de QlikView, todos los valores únicos de los campos seleccionados de una tabla en el script de carga se cargan en estructuras de campos, y los datos asociados se cargan en la tabla de forma simultánea. Los datos de campos y los datos asociados se hallan todos en la memoria.

One table with three fields.

Una segunda tabla relacionada cargada en la memoria compartiría un campo común y esa tabla podría añadir nuevos valores únicos al campo común, o podría compartir valores previos.

Two tables with a common field.

Direct Discovery

Cuando los campos de tabla se cargan mediante una sentencia Direct DiscoveryLOAD (Direct Query), se crea una tabla similar solo con los campos DIMENSION. Al igual que ocurre con los campos en memoria, los valores únicos de los campos DIMENSION se cargan en la memoria. Pero las asociaciones entre los campos se quedan en la base de datos.

One table with two dimension fields.

Los valores del campo MEASURE también se quedan en la base de datos.

One table with measure field values left in the database.

Una vez que se ha establecido la estructura Direct Discovery, los campos Direct Discovery se pueden usar con determinados objetos gráficos y pueden utilizarse para asociaciones con los campos en memoria. Cuando se utiliza un campoDirect Discovery, QlikView crea automáticamente la consulta SQL adecuada para ejecutar en los datos externos. Cuando se efectúan selecciones, los valores de datos asociados de los campos Direct Discovery se utilizan en las condiciones WHERE de las consultas a la base de datos.

Con cada selección, los gráficos con los campos Direct Discovery se recalculan, y los cálculos se realizan en la tabla de la base de datos fuente ejecutando la consulta SQL creada por QlikView. Se puede utilizar la funcionalidad de la condición de cálculo para especificar cuándo queremos que se recalculen los gráficos. Hasta que se cumpla dicha condición, QlikView no envía consultas para recalcular los gráficos.

Diferencias de rendimiento entre campos en memoria y campos Direct Discovery

El procesamiento en memoria siempre es más rápido que el procesamiento en las bases de datos fuente. El rendimiento de Direct Discovery refleja el rendimiento del sistema que ejecuta la base de datos que procesa las consultas de Direct Discovery.

Es posible utilizar las mejores prácticas estándar de bases de datos y rendimiento de consultas en Direct Discovery. Todos los ajustes de rendimiento deberían hacerse en la base de datos fuente. Direct Discovery no es compatible con el ajuste de rendimiento de consultas desde el documento QlikView. Pero sí podemos hacer llamadas paralelas, asíncronas, a la base de datos, empleando la función de conexión directa. La sintaxis de script de carga para configurar la capacidad de conexión directa es la siguiente:

SET DirectConnectionMax=10;

El almacenamiento en la caché de QlikView también mejora la experiencia global del usuario. Véase Almacenamiento en caché y Direct Discovery a continuación.

El rendimiento de Direct Discovery con DIMENSION también puede mejorarse separando algunos de los campos de las asociaciones. Esto se hace mediante la palabra clave DETACH en DIRECT QUERY. Si bien los campos separados no se consultan en busca de asociaciones, aún forman parte de los filtros, con lo que aceleran los tiempos de selección.

Mientras que los campos en memoria de QlikView y los campos Direct DiscoveryDIMENSION poseen todos sus datos en memoria, la manera en que se cargan afecta a la velocidad de carga de datos de la memoria. Los campos en memoria de QlikView guardan solo una copia de un valor de campo cuando hay múltiples instancias de un mismo valor. Sin embargo, se cargan todos los datos de campo y luego los datos duplicados se clasifican.

Los campos DIMENSION también almacenan solo una copia de un valor de campo, pero los valores duplicados se clasifican y organizan en la base de datos antes de cargarse en la memoria. Cuando manejamos cantidades extensas de datos, como suele ocurrir cuando usamos Direct Discovery, los datos se cargan mucho más rápido como una carga DIRECT QUERY que con la carga SQL SELECT empleada para campos en memoria.

Diferencias entre datos en memoria y datos de bases de datos

DIRECT QUERY es sensible a mayúsculas cuando se efectúan asociaciones con datos en memoria. Direct Discovery selecciona datos de bases de datos fuente conforme a la distinción de mayúsculas de los campos de la base de datos consultada. Si los campos de la base de datos no son sensibles a mayúsculas, una consulta Direct Discovery podría devolver datos que no devolvería una consulta en memoria. Por ejemplo, si los datos siguientes existen en una base de datos que no es sensible a mayúsculas, una consulta Direct Discovery del valor "Red" devolvería todas las cuatro filas.

ColumnA ColumnB
red one
Red two
rED three
RED four

Una selección en memoria de "Red," por otra parte, devolvería solo:

Red two

QlikView normaliza los datos hasta tal punto que produce correspondencias en datos seleccionados que las bases de datos no encontrarían. Como resultado, una consulta en memoria puede producir más valores de correspondencias que una consulta de Direct Discovery. Por ejemplo, en la tabla a continuación, los valores del número "1" varían según la localización de espacios en torno a ellos:

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

Si seleccionamos "1" en un Cuadro de lista para la ColumnA, donde los datos se hallan en la memoria estándar de QlikView, las tres primeras filas se asocian:

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

Si el Cuadro de lista contiene datos de Direct Discovery, la selección de "1" podría asociar únicamente "no_space". Las correspondencias que devuelven datos Direct Discovery dependen de la base de datos. Algunos devuelven solo "no_space" y otros, como SQL Server, devuelven "no_space" y "space_after".

Almacenamiento en caché y Direct Discovery

El almacenamiento en la caché de QlikView almacena los estados de selección de las consultas y los resultados de las consultas asociadas en la memoria. A medida que se van haciendo los mismos tipos de selecciones, QlikView aprovecha la consulta de la caché en lugar de consultar los datos fuente. Cuando se realiza un tipo de selección diferente, se efectúa una consulta SQL en la fuente de datos. Los resultados de la caché se comparten entre usuarios.

Example:  

  1. El usuario aplica la selección inicial.

    SQL atraviesa hasta la fuente de datos subyacente.

  2. El usuario borra la selección y aplica la misma selección que la selección inicial.

    El resultado de la caché es devuelto, SQL no atraviesa hasta la fuente de datos subyacente.

  3. El usuario aplica otra selección distinta.

    SQL atraviesa hasta la fuente de datos subyacente.

Es posible establecer un tiempo límite de almacenamiento en caché con la variable de sistema DirectCacheSeconds. Una vez que el límite de tiempo se ha alcanzado, QlikView borra la caché para hacer sitio a los resultados de la consulta Direct Discovery que se generaron para las selecciones previas.A continuación QlikView consulta a la fuente de datos las selecciones efectuadas y crea la caché de nuevo según el límite de tiempo designado.

El tiempo predeterminado de la caché para resultados de consulta de Direct Discovery es de 30 minutos a menos que se utilice la variable de sistema DirectCacheSeconds.