Main - TestCR
Te
st
C
R
Andr
ea
Gioia
2012
/10/3
1
15:1
2
Table of Contents
Introduzione ......................................................................................................................................................................................................................................
Struttura dati .....................................................................................................................................................................................................................................
Page 1 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
Organizzazione/Compressione ...............................................................................................................................................................................................
Filtri ...................................................................................................................................................................................................................................................
Aggregazioni ..................................................................................................................................................................................................................................
Gestore dei dataset in memory ...............................................................................................................................................................................................
Lavorare offline .............................................................................................................................................................................................................................
Data federation .............................................................................................................................................................................................................................
Virtualizzazione ...............................................................................................................................................................................................................................
Sul client .........................................................................................................................................................................................................................................
Sul server .......................................................................................................................................................................................................................................
Algoritmi di gestione ....................................................................................................................................................................................................................
Implementazione .............................................................................................................................................................................................................................
Implementazione (as is) .............................................................................................................................................................................................................
Implementazione (to be) ............................................................................................................................................................................................................
Tesi ......................................................................................................................................................................................................................................................
Risorse ...............................................................................................................................................................................................................................................
Link ...................................................................................................................................................................................................................................................
•
•
Introduzione
° Struttura datiOrganizzazione/Compressione
° Filtri
° Aggregazioni
° Gestore dei dataset in memory
° Lavorare offline
° Data federation
° VirtualizzazioneSul client
° Sul server
° Algoritmi di gestione
° ImplementazioneImplementazione (as is)
° Implementazione (to be)
Tesi
° RisorseLink
Introduzione
Pe una gestione dei dati in-memory due sono gli aspetti chiave da considerare:
1.
1.
La struttura dei dati
Le tecniche di virtualizzazione
Il modo con cui i dati vengono strutturati è importante al fine di garantire un alto livello di compressione e tempi di
accesso veloci.
La virtualizzazione è importante invece al fine di granatire l’accesso a dati i cui volumi vanno al di là delle
dimensioni della RAM dipsonibile.
Struttura dati
I dati verranno gestiti secondo una logica colonnare al fine di ridurne le dimensioni per mezzo di tecniche di
razionalizzazione e compressione. La struttura di codifica dei dati è inoltre specificatamente progettata per
permettere ricerche di tipo associativo.
Organizzazione/Compressione
Database
Supponiamo di avere un database con due tabelle: Prodotti (tabella1) e Prezzi (tabella2). Le due tabelle sono
legate da una ralazioe uno a uno definita per mezzo della colonna ArtNo.
Table1: Prodtti
Cloth Colo Size ArtN
es
r
o
shirt blue 39
1001
Page 2 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
shirt
shirt
jeans
jeans
blue
red
blue
blue
40
39
32
35
1001
1003
2100
2100
Table2: Prezzi
ArtN
o
1001
1003
2100
Price
180
220
180
ResultSet
Per mezzo di una query (SpagoBIDataset), mettendo in join le due tabelle sulla colonna ArtNo, si ottiene il
seguente resultset...
Cloth Colo
es
r
shirt blue
shirt blue
shirt red
jeans blue
jeans blue
Size ArtN
o
39
1001
40
1001
39
1003
32
2100
35
2100
Price
180
180
220
180
180
Tabelle di codifica binaria valori distinti per colonna...
La procedura di codifica prende in inpit il resultset e per ogni colonna costruisce una tabella di mapping. Tale
tabella contiene un elemento per ogni possibile valore distinto della colonna di riferimento e la relativa codifica
binaria.
Codifica valori colonna Clothes
Valor Codif
e
ica
shirt 0
jeans 1
Codifica valori colonna Color
Valor Codif
e
ica
blue 0
red 1
Codifica valori colonna Size
Valor Codif
e
ica
39
0
40
1
32
2
35
3
Codifica valori colonna ArtNo
Valor Codif
e
ica
1001 0
1003 1
2100 2
Codifica valori colonna Price
Valor Codif
e
ica
180 0
220 1
Codifica ResultSet
Le tabelle di mapping generate al passo precedente vengono ultilizzate per codificare l’intero resultset.
Cloth Colo Size ArtN Price
es
r
o
0
0
0
0
0
0
0
1
0
0
Page 3 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
0
1
1
1
0
0
0
2
3
1
2
2
1
0
0
ResultSet codificato e ordinato
La procedura di codifica infine puo’ opzionalmente ordinare il resultset. L’ordinamento facilita la scansione lineare
del resultset.
Cloth Colo
es
r
0
0
0
0
0
1
1
0
1
0
Size ArtN
o
0
0
1
0
0
1
2
2
3
2
Price
0
0
1
0
0
L’operazione di codifica e ordinamento del dataset può essere eseguita in 2NlogN dove N è la numerosità del
resultset.
Aree di approfondimento:
1.
1.
1.
1.
1.
Definire un InMemorySpagoBIDataSet che prenda in input un datset lo esegua e memorizzi il resultset
tornato secondo la logica colonnare sopra descritta.
La codifica binaria dei valori può essere ulteriormente ottimizzata utilizzando tecniche di codifica basate su
parole a lunghezza variabile ( Huffman coding ). L’idea è quella di ottenere una maggior compressione
associando codifiche binarie più corte ai vlori più frequenti.
definire un formato di serializza/deserializzzione del resultset codifificato
valutare il fattore di compressione medio
Ricodificare un datset ogni volta che questo deve essere caricato in memoria è costoso per due motivi: 1)il
dataset di base deve essere rieseguito, devo cioè rieseguire la query sul db 2)l’operazione di codifica è
lineare nelle dimensioni del datset. Puo’ essere convegnente per tale motivo memorizzare i datset codificati
su file e poi usare quelli quando il dataset deve essere ricaricato in memoria. Ovviamente dovrebbe essere
possibile specificare con che frequenza rinfrescare il contenuto di tali file. La gestione di tali operazioni
richiede una componente ad-hoc (quella che in qlikview si chiama QV Publisher).
Filtri
per ogni colonna vengono creati tre vettori ognuno con una componente per ogni valore distinto assunto dalla
colonna stessa. Ad esempio per la colonna Clothes vengono creati i seguenti tre vettori ...
frequency vector
shirt 0
jeans 0
user selection vector
shirt false
jeans false
status vector
shirt true
jeans true
La selezione dell’utente è memorizzata nel vettore user selection vector (true l’elemento selezionato, false tutti gli
altri)
Algoritmo di ricerca...
1.
1.
1.
1.
1.
Frequency vector viene resettato (tutto a 0)
Status vector viene inizializzato. Per la colonna in cui è avvenuta la selezione il valore selezionato viene
impostato a true, tutti gli altri a false. Per le colonne in cui non è avvenuta alcuna selezione tutti i valori
vengono settati a true
scansione lineare di tutti i record codificati. per ognuno viene controllato se i valori sulle varie colonne
corrispondono ad elementi settati a true nei rispettivi status vector. Se ciò è vero per ogni colonna del
record il record è considerato una hit
per ogni hit vengono opportunamente aggiornati colonna per colonna i conteggi nei corrispettivi frequency
vectors.
una volta passati tutti i record i valori di ogni status vector per cui il corrispettivo valore nel corrispettivo
Page 4 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
frequency vector è pari a zero vengono settati a false, gli altri a true.
alla fine ho:
1.
2.
3.
4.
Record trovati (hit)sulla base della selezione
2. valori selezionabili per ogni colonna o valori correlati alla selezione (status vector)
3. valori attualmente selezionati (user selection vector)
4. frequenza di correlazione (frequency vector). per ogni colonna quante volte un determinato valore
compare sul totale delle hit determinato dalla selezione utente.
Nota: l’algoritmo sopra descritto pone in OR i valori di un attributo selezionato sulla stessa colonna ed in AND i
valori degli attributi selezionati su colonne diverse. E’ possibile anche estendere tale algritmo per gestire in AND
anche i valori selezionati su una stessa colonna.
Aggregazioni
I resultset così codificati contengono i dati al massimo livello di granularità desiderato. Tutte le operazioni di
riaggregazione che potranno essere necessarie ai fini dell’analisi dovranno essere eseguite al runtime. Dovrà
pertanto essere sviluppata una componente che si occuperà della riaggregazione e che sia in grado
eventualemente di gestire una cache delle riagreggazioni generate al fine di migliorare i tempi di risposta.
Areee di approfondimento:
1.
1.
programmazione multithread per sfuttare al meglio i core della cpu in modo tale da garantire una
crescita/descersita lineare delle performance in relazione al numero di core della macchina.
valutare quale sistema di caching usare per memorizzare le aggregazioni calcolate
Gestore dei dataset in memory
I datset in memory devono essere gestiti in modo centralizzato. Il gestore dei datset deve caricarli in memoria
preoccupandosi di non saturarla. Gestirne lo swap su disco quando la memoria è piena. Permettere la
condivisione di uno stesso dataset tra utenti diversi (cache dei datset).
1.
1.
come possiamo monitorare la memoria allocata al processo in modo da non saturarla?
come possiamo verificare se la memoria allocata dal SO risiede in RAM o è memoria virtuale in realtà
parzialmente allocata su disco?
Lavorare offline
I dataset codificati potranno essere serializzati e salvati su file. Tali file poi potranno essere ricaricati in memoria
senza più dover accedere al database e ripetere la codifica, sia lato server che lato client.
Data federation
I dati del resultset possono essere anche presi da sorgenti differenti e messi in join in fase di codifica colonnare.
Una volta eseguita la codifica questi dataset federati sono esattamente identici ai datset tradizionali in termini di
tempi di risposta.
Virtualizzazione
Tre livelli: client, server, db
Page 5 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
Sul client
qunati dati possiamo spingere sul client? Esistono oggetti di storage client side che ci permettono di superare i
limiti della memoria associata al processo che esegue il browser? (vedere html 5)
Sul server
Utilizziamo una libreria di gestione della cache...quale? Una vale l’altra? Come gestiamo le policy di sizing e
refresh della cache? Ha senso aprire la porta alla possibilità di avere anche una cache distribuita su più nodi?
Che vantaggi ne possiamo trarre.
Algoritmi di gestione
che algoritmi usiamo per gestire la memoria virtuale su due livelli? Quali dati portiamo sul client? quali teniamo
sul server? come e quando i due livelli vengono aggiornati?
Implementazione
Implementazione (as is)
Client
(per ora c’è solo questa parte)
Page 6 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
descrizione implementazione (procedurale senza separazione tra business logic e visualizzazione)
Implementazione (to be)
Server
L’encoder riceve in input un datast di spagobi, lo esegue e trasforma il datastore ottenuto come risultato in
un datastore (InMemoryDataStore) codificato secondo la modalità descitta nella sezione
“Codifica/Compressione”
1. L’InMemoryDataStore può essere serializzato e salvato su file in modo da recuperarlo in seguito senzo
dover rieseguire il dataset originale e codificarne i risulati. Il serializzatore non è quello standard utilizzato in
genere in spagobi. La serializzazione infatti mantiene la codifica colonnare e altamente compressa che si è
generata a seguita del passo di encoding (punto precedente)
a. L’InMemoryManager prende in consegna uno o più InMemoryDataStore e ne gestisce il ciclo di vita.
In particolare si occupa delle seguenti operazioni:Filtro (vedi sezione “Filtri”)
b. Aggregazione (vedi sezione “Aggregazione”)
c. Cache dei dataset e delle relative aggregazioni
d. Gestione e controllo della RAM allocata
e. Virtualizzazione (vedi sezione “Virtualizzazione”)
Client
descrizione implementazione (basata su un abstract data type che estende l’oggetto store. chiara separazione
tra business logic e visualizzazione. possibilità di riuso + ipotesi di server proxing)
1.
Tesi
Page 7 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
wiki:
prop valor
rietà e
url
https:
//trac.
codre
f.com
/inme
mory
usern gioia
ame barna
bei
pass vlac
word N0te
$vlacc
0App
ut1
Server di test (non funzionante al momento)
prop valor
rietà e
url
http://
unito.
codre
f.com
/Spa
goBI
usern biad
ame min
pass inse
word cure4
8563
8
path in
mem
ory
analy
sis ->
in
mem
ory
test
SVN
prop valor
rietà e
url
https:
//trac.
codre
f.com
/inme
mory/
brow
ser#s
vn/Sp
agoB
IInMe
mory
Engin
e/trun
k
usern gioia
ame barna
bei
Page 8 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
pass vlac
word N0te
$vlacc
0App
ut1
Risorse
Link
1.
1.
1.
1.
1.
1.
1.
1.
1.
Qlikview: The-Associative-Experience
Faceted search
Qlikview architectural overview
Qlikview architecture and system resource usage
Method and device for extracting information from a database : implementazione logica associativa in
Qlikview
QlikView: The Hidden Limitations
Query execution in column-oriented database : tutto su codifica, compressione e tecniche di
interrogazione di basi dati collonnari.
In-Memory BI Is Not the Future, It’s the Past : virtualizzazione (elastic cuve o just in time in-memory)
The Rise of In-Memory Databases
Page 9 - last modified by Andrea Gioia on 2012/10/31 15:12