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