TestCR
Andrea Gioia
2012/10/31 15:12
Main - TestCR
Table of Contents
Introduzione ...............................................................................................................................................................................
Struttura dati ..............................................................................................................................................................................
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 .........................................................................................................................................................................................
Page 2 - last modified by Andrea Gioia on 2012/10/31 15:12
3
3
3
5
6
6
6
6
6
7
7
7
7
7
7
8
8
8
Main - TestCR
• Introduzione
• Struttura dati
° 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
Pe una gestione dei dati in-memory due sono gli aspetti chiave da considerare: 1. La struttura dei dati
2. 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
Clothes
Color
Size
ArtNo
shirt
blue
39
1001
shirt
blue
40
1001
shirt
red
39
1003
jeans
blue
32
2100
jeans
blue
35
2100
Table2: Prezzi
ArtNo
Price
1001
180
1003
220
2100
180
ResultSet
Per mezzo di una query (SpagoBIDataset), mettendo in join le due tabelle sulla colonna ArtNo, si ottiene il seguente resultset...
Page 3 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
Clothes
Color
Size
ArtNo
Price
shirt
blue
39
1001
180
shirt
blue
40
1001
180
shirt
red
39
1003
220
jeans
blue
32
2100
180
jeans
blue
35
2100
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
Valore
Codifica
shirt
0
jeans
1
Codifica valori colonna Color
Valore
Codifica
blue
0
red
1
Codifica valori colonna Size
Valore
Codifica
39
0
40
1
32
2
35
3
Codifica valori colonna ArtNo
Valore
Codifica
1001
0
1003
1
2100
2
Codifica valori colonna Price
Valore
Codifica
180
0
220
1
Codifica ResultSet
Le tabelle di mapping generate al passo precedente vengono ultilizzate per codificare l'intero resultset.
Clothes
Color
Size
ArtNo
Price
0
0
0
0
0
0
0
1
0
0
0
1
0
1
1
1
0
2
2
0
1
0
3
2
0
ResultSet codificato e ordinato
La procedura di codifica infine puo' opzionalmente ordinare il resultset. L'ordinamento facilita la scansione lineare del resultset.
Clothes
Color
Size
ArtNo
Price
0
0
0
0
0
0
0
1
0
0
Page 4 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
0
1
0
1
1
1
0
2
2
0
1
0
3
2
0
L'operazione di codifica e ordinamento del dataset può essere eseguita in 2NlogN dove N è la numerosità del resultset. Aree di approfondimento:
1. Definire un InMemorySpagoBIDataSet che prenda in input un datset lo esegua e memorizzi il resultset tornato secondo
la logica colonnare sopra descritta.
2. 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.
3. definire un formato di serializza/deserializzzione del resultset codifificato
4. valutare il fattore di compressione medio
5. 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. Frequency vector viene resettato (tutto a 0)
2. 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
3. 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
4. per ogni hit vengono opportunamente aggiornati colonna per colonna i conteggi nei corrispettivi frequency vectors.
5. una volta passati tutti i record i valori di ogni status vector per cui il corrispettivo valore nel corrispettivo frequency
vector è pari a zero vengono settati a false, gli altri a true.
alla fine ho:
1. 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.
Page 5 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
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. 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.
2. 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. come possiamo monitorare la memoria allocata al processo in modo da non saturarla? 2. 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 6 - 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)
descrizione implementazione (procedurale senza separazione tra business logic e visualizzazione)
Implementazione (to be)
Server
1. 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"
2. 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
Page 7 - last modified by Andrea Gioia on 2012/10/31 15:12
Main - TestCR
serializzazione infatti mantiene la codifica colonnare e altamente compressa che si è generata a seguita del passo di
encoding (punto precedente)
3. L'InMemoryManager prende in consegna uno o più InMemoryDataStore e ne gestisce il ciclo di vita. In particolare si
occupa delle seguenti operazioni:
a. 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)
Tesi
wiki: proprietà
valore
url
https://trac.codref.com/inmemory
username
gioia - barnabei password
vlacN0te$ - vlacc0Apput1
Server di test (non funzionante al momento)
proprietà
valore
url
http://unito.codref.com/SpagoBI
username
biadmin
password
insecure485638
path
in memory analysis -> in memory test SVN
proprietà
valore
url
https://trac.codref.com/inmemory/browser#svn/
SpagoBIInMemoryEngine/trunk
username
gioia - barnabei password
vlacN0te$ - vlacc0Apput1
Risorse
Link
1.
2.
3.
4.
5.
6.
7.
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. 8. In-Memory BI Is Not the Future, It’s the Past : virtualizzazione (elastic cuve o just in time in-memory)
9. The Rise of In-Memory Databases
Page 8 - last modified by Andrea Gioia on 2012/10/31 15:12