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