Skip to main content
Announcements
Global Transformation Awards! Applications are now open. Submit Entry
cancel
Showing results for 
Search instead for 
Did you mean: 
pljsoftware
Creator III
Creator III

Optimizar los dato con potencias de dos

En un recente proyecto tuve la necesidad de optimizar el tamaño del archivo Qvw en memoria, esto porque mi aplicatión tiene más de 1.000.000.000 de filas y eso sólo en una tabla.

El motivo de toda esa memoria ocupada además de las filas es que hay muchos valores distintos en el campo Valor.

Aquí Symbol Tables and Bit-Stuffed Pointers y The Importance Of Being Distinct más detalles sobre el uso de la memoria en QlikView.

Por solucionar este problema pensé que siempre posible escribir un numero como potencia de 2 más un numero. Por ejemplo

52 = (2 ^ 5) + 20

81 = (2 ^ 6) + 17

La misma regla vale por los números negativos y con coma.

SET ThousandSep='.';

SET DecimalSep=',';

SET MoneyThousandSep='.';

SET MoneyDecimalSep=',';

SET MoneyFormat='€ #.##0,00;-€ #.##0,00';

SET TimeFormat='hh:mm:ss';

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';

SET MonthNames='gen;feb;mar;apr;mag;giu;lug;ago;set;ott;nov;dic';

SET DayNames='lun;mar;mer;gio;ven;sab;dom';

SET App.View.Expression.OptimizedValue = (($1Div << $1PowExp) + $1Mod);

Fact:

LOAD * INLINE [

    Value

    '-45,2458'

    -15

    52

    81

];

Right Join (Fact)

LOAD

  *

  ,Div(Value, pow(2, RangeMax(1, Floor(log(Value))))) as ValueDiv

  ,fmod(Value, pow(2, RangeMax(1, Floor(log(Value))))) as ValueMod

  ,RangeMax(1, Floor(log(Value))) as ValuePowExp

Resident Fact;

El número será calcolado con este sencilla expresión

SET App.View.Expression.OptimizedValue = (($1Div << $1PowExp) + $1Mod);

que se utilizerá así

$(App.View.Expression.OptimizedValue(Value))

El símbolo << desplaza los bit de un valor ValuePowExp optimizando el cálculo de la potencia.

Ventajas:

Optimización del espació ocupado en memoria.

Desventajas:

Más campos en la nube.

Consejo utilizar esta tecnica cuando el número de los campos son pocos y cuando los hay muchos valores distintos en el campo.

2 Replies
alex_millan
Creator III
Creator III

Muchas gracias por compartirlo! Un saludo

pljsoftware
Creator III
Creator III
Author

Hola Alex,

de nada.