Documente Academic
Documente Profesional
Documente Cultură
Obiective / Continut
Tabele partitionate si tehnici de partitionare Operatii cu partitii Indexi: normali, bitmap, B-Tree
Data Warehouse
Data warehouse este o colectie de date orientata pe subiect, integrate, nevolatile, necesara pentru suportul deciziilor in conducere
A Data Warehouse is a subject oriented, integrated, nonvolatile, and time variant collection of data in support of managements decisions.
Sursa: Building the Data Warehouse, 2nd Edition, W.H.Immon, Wiley, 1996, p.33.
Data granularity
Extragerea cunostintelor din baze de date
Arhitectura D.W.
Scheme D.W.
O schema este o colectie de obiecte ale bazei de date: tabele, indexi, view-uri, sinonime etc. D.W. folosesc scheme dimensionale. Tipuri de scheme:
Scheme relationale in a 3 a forma normala (3NF)
Scheme stea (star schema) centrul consta in una sau mai multe tabele fact, iar colturile sunt tabelele dimensiune. Scheme snowflake schema stea cu normalizarea dimensiunilor intr-o structura arborescenta.
Obiecte D.W.
Tabele de fapte (fact tables):
Contin 2 tipuri de coloane: numerice si chei straine spre tabelele de dimensiuni Contin valori detaliate sau valori care au fost agregate
O tabela contine de obicei valori cu acelasi nivel de agregare Cheia primara este una compusa din toate cheile straine spre tabelele dimensiune Tabele de dimensiuni (dimension tables): Structura compusa din mai multe ierarhii care clasifica datele Atributele dimensionale sunt descriptive, de tip text
Datele dimensionale sunt colectate la cel mai detaliat nivel, iar apoi agregate in nivele mai generale, numite si ierarhii.
Obiecte D.W.
Ierarhie:
Variaza de la detali pana la general (radacina = nivelul cel mai general) Identificatori unici si relatii
Garanteaza integritatea datelor
Obiecte D.W.
Tabela partitionata:
Permite stocarea eficienta a volume mari de date prin descompunerea lor in cantitati mai mici, gestionabile Accesul la o tabela partitionata este optimizat
Metode de partitionare:
Pe intervale (range) pe baza unor valori cheie stabilite (ex: vanzari pe luna); Hash pe baza unui algoritm de hashing pentru o cheie
Rezultatele interogarilor stocate in avans, ce contin agregari si calcule, in vederea optimizarii accesului la date Seamana cu tabelele partitionate si se comporta ca indexii
Dimensiune: Obiect ce defineste o relatie ierarhica intre coloane Extragerea cunostintelor din baze de date
Partitionare
Procesul de impartire a datelor intr-o tabela astfel incat sa se imbunatateasca substantial procesul de acces la date (pentru volume mari = sute de mii, milioane de inregistrari).
Indexarea si partitionarea sunt cele doua tehnici care reduc substantial timpii de lucru cu volume foarte mari de date.
Partitionarea imbunatateste mecanismele de gestiune a bazei de date:
Adaugare de partitii Organizarea unei partitii Mutarea unei partitii Stergerea unei partitii
Tipuri de partitionare.
Partitionarea pe intervale (range partitioning)
Partitionarea hash (hash partitioning) Partitionarea dupa liste de valori (list partitioning)
Partitionarea pe intervale
Cea mai folosita metoda de partitionare. Datele se impart in partitii in functie de valorile intervalelor definite. Inregistrarile se stocheaza in partitii in functie de valorile unor coloane. Optiunile de partitionare sunt: PARTITION BY RANGE (col_list) si VALUES LESS THAN (val_list): Col_list: lista ordonata de coloane care determina partitia in care intra o linie sau un index (coloane de partitionare) Val_list: lista de valori care determina partitionare (chei de partitionare)
Partitionarea pe intervale
Cel mai folosit tip de partitionare este pe date calendaristice.
Partitionarea pe intervale
Recomandari de folosire a partitionarii pe intervale:
Pentru partitionarea datelor istorice Pentru tabele foarte mari scanate dupa o coloana de tip data calendaristica (ex: ORDER_DATE) Cand trebuie mentinuta o fereastra mobila de date Cand trebuie gestionate volume de date grupate pe date calendaristice (adaugare, stergere, mutare, actualizare)
Extragerea cunostintelor din baze de date
Partitionarea hash
Imparte datele in grupuri pe baza unui algoritm de hashing ce ia ca parametru o cheie. Algoritmul de hashing distribuie in mod echilibrat inregistrarile intre partitii, rezultand partitii de aceeasi marime.
Alternativa la partitionarea de tip range atunci cand nu exista date istorice sau o lista de coloane pentru clasificare.
Partitionarea hash
Recomandari de folosire a partitionarii hash: Cand datele nu corespund unei vederi logice unitare sau istorice. Pentru imbunatatirea disponibilitatii datelor si prin usurarea gestionarii tabelelor foarte mari Permite instructiuni DML paralele
Permite distribuirea datelor echilibrata a datelor pe dispozitve fizice multiple astfel incat se optimizeaza accesul I/O
Partitionarea lista
Imparte datele conform valorilor discrete a unor coloane specificate. Avantajul este ca se pot grupa in mod natural seturi de date neordonate si nerelationate.
Partitionarea compusa Combina partitioarea pe intervale si partitionarea hash / pe lista de valori Serverul distribuie intai datele in partitii conform valorilor intervalelor. Apoi, tipul pentru range-hash, se aplica algoritmul hash pentru a imparti datele echilibrat in subpartitiile fiecarei partitii. Pentru tipul range-list, datele se impart in subpartitii conform listei de valori alese. Indexarea poate mosteni tipul de partitionare al tabelei de baza.
Extragerea cunostintelor din baze de date
Cand partitiile trebuie sa aiba o logica istorica Cand continutul unei partitii poate fi distribuit pe mai multe tablespace-uri, dispozitive, noduri.
Partition Pruning
Reducerea partitiilor (partition pruning) este o tehnica de imbunatatirea performantelor interogarilor. Tehnica consta in eliminarea scanarii partitiilor nedorite la o interogare prin analizarea clauzelor FROM si WHERE. Astfel datele sunt extrase doar din partitiile necesare. Optiuni in clauza WHERE:
LIKE, =, IN-List - range partition IN-List list partition =, IN-List hash partition
Partition Pruning
Exemplu de eliminarea partitiior pentru o interogare pe o tabela partitionata compus range-hash:
Adaugarea partitiilor
Adaugarea partitiilor la o tabela :
Partitionata range
Partitionata hash Partitionata lista Exemplu:
Stergerea partitiilor
Stergerea partitiilor la o tabela :
Exemplu:
Schimbarea partitiilor
Conversii cu partitiile si subpartitiile:
Indexi Structuri asociate tabelelor cu scopul de a imbunatati interogarile pe aceste tabele. Pentru o tabela se pot construi mai multi indexi dupa coloane sau combinatii de coloane diferite. Tipuri de indexi: Indexi simpli, unici, compusi, bazati pe functii Indexi B-Tree Indexi inversi Indexi bitmap
Extragerea cunostintelor din baze de date
Indexi
Nu afecteaza modul se scriere al interogarilor, doar viteza de executie a lor.Avand date indexate, indexul pointeaza direct spre locatia rindurilor ce contin valorile dorite.
Sunt independenti logic si fizic de datele din tabela asociata, necesitand spatiu de stocare propriu. Se pot sterge sau crea indexi fara a afecta datele din tabela, doar timpul de acces la ele.
Serverul gestioneaza automat indexii cand datele sunt create sau modificare. Performantele interogarilor raman optime chiar daca se adauga date noi in tabela.
Prezenta a numerosi indexi pe o tabela deterioreaza performanta operatiilor DML pe tabela
Extragerea cunostintelor din baze de date
Indexi
Indexii unici garanteaza ca nu exista 2 linii intr-o tabela care sa aiba aceleasi valori pentru coloana/coloanele cheie. Indexii neunici nu impun o asemenea restrictie.
Alternativ se pot defini constrangeri de integritate de tip UNIQUE pe coloanele dorite, iar acestea definesc cate un index unic.
Pentru a avea performante optime la interogare, se recomanda construirea manuala a indexilor unici.
Un index compus (concatenat) se creaza pe mai multe coloane din tabela.
Indexi
Indexi si chei: Indexi sunt obiecte ale b.d. gestionate separat. Cheile sunt concepte logice pentru implementarea constrangerilor de integritate, pentru mentinerea business rule. Valorile NULL in indexi sunt considerate distincte, cu exceptia cazului cand valorile ne-nule din 2 sau mai multe linii ale unui index sunt identice. Astfel, indexii UNIQUE previn ca liniile continand valori NULL sa fie tratate ca identice. Serverul nu indexeaza liniile unui tabel atunci cand toate coloanele cheie sunt NULL, cu exceptia unui index bitmap.
Indexi - functie
Indexi bazati pe functii au la baza o expresie sau o functie care implica una sau mai multe coloane din tabela indexata.
Expresiile nu pot contine functii agregat si trebuie sa fie determinate.Nu se pot construi pe baza coloanelor LOB, REG, coloane nested. Indexi functie de tipul UPPER(col_name) / LOWER(col_name) faciliteaza cautarile case-insensitive: CREATE INDEX uppercase_idx ON employees (UPPER(first_name));
SELECT * FROM employees WHERE UPPER(first_name) = 'RICHARD'; Extragerea cunostintelor din baze de date
Stocarea indexilor
Cand se creaza un index, serverul aloca automat un segment de index in tablespace-ul de index pentru a stoca datele.
Tablespace-ul pentru index este fie cel predefinit pentru proprietar, fie cel numit in comanda CREATE INDEX. Acest tablespace poate fi unul diferit fata de cel al tabelei asociate.
Se recomanda ca tabela si indexul sa fie stocati in tablespace-uri diferite pentru obtinerea performantelor optime la interogarile de date.
Stocarea indexilor
Cand se creaza un index, serverul extrage si sorteaza coloanele de indexare si stocheaza valoarea coloanei si rowid. Apoi serverul incarca indexul de la sfarsit spre inceput.
Exemplu:
CREATE INDEX employees_last_name ON employees(last_name);
Index B-Tree
Blocuri de tip ramura (branch blocks):
Stocheaza prefixul minim al cheii necesar pentru a lua o decizie intre 2 chei Pointeaza spre blocul frunza care contine cheia.
Index B-Tree
Avantajele folosirii structurii B-Tree:
Toate blocurile frunza sunt la aceeasi adancime, deci extragerea oricarei inregistrari va consuma acelasi timp. Indexii B-Tree sunt echilibrati automat
Toate blocurile din B-Tree sunt in medie pe 3 sferturi ocupate. Ofera performante bune pentru o paleta larga de inteorgari: egalitate de valori, interval de valori, cautare partiala. Operatiile DML sunt eficiente, mentinand si ordinea de indexare in B-Tree. Performantele indexilor B-Tree sunt bune atat pentru tabele mici cat si pentru tabele mari.
Index Bitmap
Un index normal stocheaza, pe langa valoarea cheii si o lista de rowiduri pentru acea cheie, cu scopul de a localiza liniile corespunzatoare. La un index bitmap pentru fiecare cheie se stocheaza un harta de biti (bitmap) in loc de lista de rowid-uri. Fiecare bit din harta corespunde cu un posibil rowid. Daca bitul este setat atunci linia cu rowid-ul corespunzator contine valoarea cheie. O functie de mapare converteste pozitia bitului in rowid-ul liniei.
Daca numarul de valori de cheie diferite este mic, atunci spatiul de stocare este redus dramatic. Indexarea de tip bitmap combina indexii care corespund cu diverse conditii din clauza WHERE. Liniile care nu indeplinesc toate conditiile de filtrare sunt eliminate, castigandu-se timp de raspuns.
Extragerea cunostintelor din baze de date
Exemplu:
Daca un tabel cu un milion de linii are o coloana cu 10 mii de valori distincte posibile, atunci coloana este un candidat pentru index bitmap.
Indexii B-Tree sunt mai eficienti pentru coloanele cu o cardinalitate mare (nume_client, data vanzare etc)
Pot imbunatati performantele pentru interogari ad-hoc ce includ expresii avand coloane de cardinalitate redusa in clauza WHERE, conectate cu operatorii AND, OR. Daca numarul de linii intoarse este mic, atunci nu este necesara o scanare completa a tabelei. Extragerea cunostintelor din baze de date
Index Bitmap
Exemplu de Index Bitmap:
Cele 4 coloane au cardinalitate mica, deci se recomanda construirea unor indexi bitmap pentru aceste coloane.
Index Bitmap
Exemplu de Index Bitmap:
Index Bitmap
Cati clienti casatoriti locuiesc in regiunile centrale sau de vest:
SELECT COUNT(*) FROM CUSTOMER WHERE MARITAL_STATUS = 'married' AND REGION IN ('central','west');
Index Bitmap
Avantajele folosirii Indexilor Bitmap:
Reduce timpul de raspuns pentru o clasa larga de interogari ce folosesc coloane de cardinalitate redusa. Reduce spatiul de stocare comparativ cu alte tehnici de indexare.
Creste performantele chiar si pentru configuratii hardware slabe. Foarte eficient pentru operatii DML paralele sau pentru incarcari masive de date. Se pot crea indexi locali de tip bitmap pentru tabele partitionate. Se pot crea indexi bitmap pentru un join intre doua sau mai multe tabele (bitmap join index). Exemplu:
CREATE BITMAP INDEX sales_cust_gender_bjix ON sales(customers.cust_gender) FROM sales, customers WHERE sales.cust_id = customers.cust_id LOCAL;
Constrangeri
Obiectivele folosirii constrangerilor intr-un depozit de date:
Datele sunt curate si consistente, prevenind posibilitatea de a introduce date incoerente (dirty data). Optimizarea interogarilor: mai ales pentru rescrierea interogarilor la viewurile materializate. Starea unei constrangeri:
Activata (Enabled): toate modificarile pe o tabela satisfac conditiile din constrangeri. Validata (Validate): toate datele din tabela satisfac constrangerile definite De incredere(Rely):se stie ca datele sunt valide si conform constragerilor; afecteaza doar constrangerile care nu au fost validate.
Constrangeri
Tipuri de constrangeri intr-un depozit de date:
Chei de tip UNIQUE:
Pot introduce probleme de performanta la interogari si actualizari Se foloseste cu optiunile DISABLE VALIDATE pentru a preveni introducerea incoerentelor. Chei de tip FOREIGN KEY:
View-uri materializate
Obiecte ale bazei de date folosite cu diverse scopuri:
depozitele de date: precalcularea functiilor agregat si a joinurilor costisitoare, cum ar fi suma vanzarilor; astfel se elimina overheadul asociat cu join-urilor costisitoare si cu aplicarea functiilor agregat;
datele distribuite: ofera o replica locala pentru datele stocate intr-o baza de date la distanta; sunt utile deasemenea pentru data mart-urile de la distanta;
calculul mobil: pentru stocarea unui subset de date pe un client mobil, care nu are acces permanent la baza de date centrala, cu operatii periodice de sincronizare cu serverul.
Extragerea cunostintelor din baze de date
View-uri materializate
Principalul scop al view-urilor materializate este e de a imbunatati timpul de acces la interogarile ce implica volume mari de date.
Exista mai multe tipuri de view-uri materializate in functie de modul de sincronizare cu datele din tabelele sursa.
Un avantaj deosebit al view-urilor materializate il reprezinta mecanismul Oracle de rescrierea interogarilor (query rewrite). Acest mecanism permite utilizatorilor sa lanseze interogari cu volume mari de date, iar serverul decide in mod transparent daca se folosesc tabelele fizice sau se folosesc view-urile materializate special create in baza de date
Extragerea cunostintelor din baze de date
Query rewrite
Serverul genereaza planurile de executie folosind tabelele sursa sau folosind view-urile materializate.
In functie de costuri, serverul alege metoda optima si o executa pentru intoarcerea rezultatelor.
Extragerea cunostintelor din baze de date
View-uri materializate
Tehnica de folosire a view-urilor: mecanisme de definire a view-urilor materializate
un mecanism de sincronizare prin care se asigura ca view-urile materializate contin ultimele date din tabelele sursa; folosirea mecanismului de rescriere a interogarilor, pentru alegerea optima a interogarilor de executat
View materializat
View-uri materializate sunt create in special pentru a imbunatati timpul de raspuns al interogarilor ce lucreaza pe volume mari de date.
Atunci cand se creaza un view materializat, serverul creaza urmatoarele obiecte: o tabela interna cu cel putin un index si un view.
View materializat
View materializat
Tipuri de view-uri materializate:
Join are la baza join intre 2 tabele Agregat contine functii agregat
Imbricate (nested) are la baza un alt view Pre-inregistrate are la baza un tabel cu aceeasi structura Gestiune: Modificare prin ALTER Stergere prin DROP
View materializat
Activitati referitoare la view-uri materializate:
Analizarea spatiului ocupat de view-uri Determinarea a ce view-uri trebuie adaugate, sterse sau modificate Arhivarea view-urilor nefolositoare
Extragerea cunostintelor din baze de date
Dimensiuni
Obiect al bazei de date care clasifica datele cu scopul optimizarii interogarilor complexe: Care sunt vanzarile unui produs inainte si dupa o promotie ? Cum afecteaza o promotie diversele canale de distributie ? Exemple de dimensiuni: produse, clienti, promotii, canale, timp. Dimensiunile se bazeaza pe tabelele de tip dimensiune care sunt asociate unei tabele de fapte, prin intermediul constrangerilor straine, intr-o schema de tip stea. O tabela de tip dimensiune are o ierarhie de coloane, de la nivel general la detaliu. Operatiile specifice pentru generalizare si detaliere sunt rollup si drill down.
Dimensiuni
Ierarhiile pentru tabelele: Time: zi,saptamana, luna, trimestru, an, toti anii; Product: produs, subcategorie, categorie, toate produsele; Customer: client, oras, stat, tara, subregiune, regiune.
Dimensiuni
Crearea unei dimensiuni:
Dimensiuni
Tabela de tip dimensiune trebuie sa existe inainte de a o crea. Fiecare nivel (level) din dimensiune trebuie sa corespunda unei coloane sau mai multe din tabelul corespondent: Nivelul Product ->Prod_id, Subcategory>Prod_subcategory Se definesc relatiile din ierarhie: Product child of Subcategory child of Category Se definesc relatiile 1:1 intre diverse atribute: ATTRIBUTE Category DETERMINES prod_category, prod_cat_desc)
Extragerea cunostintelor din baze de date
Dimensiuni
Cerinte pentru crearea dimensiunilor: Relatie 1:N intre parinte si copil Relatie 1:1 intre dimensiune si atributele dependente Constrangerile la nivel de tabela sunt respectate Daca se construieste o dimensiune pe baza de join atunci nu se poate face self-join.
Ierarhii multiple
Gestiune dimensiuni
Validare dimensiuni: DBMS_OLAP.VALIDATE_DIMENSION Modificarea dimensiunilor:
ALTER DIMENSION ALTER DIMENSION ALTER DIMENSION ALTER DIMENSION times.fiscal_year; times_dim DROP ATTRIBUTE fis_year; times_dim DROP HIERARCHY fis_rollup; times_dim DROP LEVEL fis_year; times_dim ADD LEVEL f_year IS
Concluzii
Tabele partitionate si tehnici de partitionare Indexi: normali, bitmap, B-Tree Constrangeri de integritate