Organisation des données en mémoire

Transcription

Organisation des données en mémoire
LOG660 - Bases de données de haute performance
Organisation des données en mémoire
Département de génie logiciel et des TI
Critères d'évaluation des méthodes
d'organisation
■
■
■
■
Temps d'accès aux données par rapport à différentes méthodes
d'accès (balayage, sélection, ...)
Délai d'insertion et de suppression
Occupation mémoire
Les critères sont en compétition:
–
–
–
Ajouter un index peut accélérer la sélection mais il est souvent plus
rapide de faire un balayage
Un index doit être mis à jour lors d'une insertion ou d'une
suppression
Les indexes d'un schéma peuvent prendre autant d'espace que les
données du schéma
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
2
Conception physique
■
Facteurs à considérer:
–
–
–
–
■
Taille des données et leur croissance
Taille disponible de stockage
Requêtes fréquentes
etc.
Choix de conception:
–
–
–
–
–
Paramètres de stockage
Indexes de données
Partitionnement
Compression
etc.
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
3
Organisation physique des enregistrements
■
Organisation séquentielle
–
Les enregistrements sont ordonnés physiquement selon
l'ordre d'insertion ou par rapport à une clé de tri
–
Facilite l'accès séquentiel des enregistrements selon la clé
–
Gestion complexe de la mémoire en cas de mises-à-jours
(ex: suppressions)
–
Exemple: index primaire (INDEX ORGANIZED TABLE
en Oracle)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
4
Organisation physique des enregistrements
■
Organisation sérielle (heap):
–
Les enregistrements sont placés sans ordre particulier, où il
y a de l’espace
–
Adressage à l'aide d'un identifiant d'enregistrement (IDE)
Ex: ROWID Oracle: (#fichier, #bloc, #enregistrement)
–
Gestion simplifiée de la mémoire
–
Organisation par défaut dans la plupart des BD (ex: Oracle)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
5
Structure de stockage (Oracle)
DATABASE
TABLESPACE 1
SEGMENT 1
BLOC 1
ROW1
BLOC M
ROW2
ROW3
...
...
EXTEND
...
...
TABLESPACE N
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
6
Structure de stockage (Oracle)
■
DATABASE:
–
–
Données, journalisation (REDO LOG), contrôle (control file), etc.
Ensemble de TABLESPACE
CREATE DATABASE nomDatabase
■
...
TABLESPACE:
–
–
–
Ensemble de DATAFILE
Définition des paramètres de stockage
Exemples:
■
■
USERS : Contient les tables des utilisateurs (créé par défaut)
SYSTEM : Contient le dictionnaire de données
CREATE TABLESPACE des2 DATAFILE ‘c:\orawin\dbs\WDBdes2.ora’
SIZE 14M DEFAULT STORAGE (PCTINCREASE 0) ONLINE;
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
7
Structure de stockage (Oracle)
■
SEGMENT
–
–
■
EXTENT
–
–
■
Unité d'allocation d'espace composée de blocs contigus
Un EXTENT est ajouté si un SEGMENT manque d'espace
BLOC
–
–
■
Associé à une table, index, ROLLBACK, etc.
Peut être réparti sur plusieurs fichiers
Unité minimale de transfert entre la mémoire secondaire (disque dur) à
la mémoire centrale
Contient un ensemble d'enregistrements
Enregistrement
–
Ligne d'une table, clé d'un index, etc.
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
8
Structure d’un bloc
■
Entête de bloc:
–
■
Répertoire de tables:
–
■
Répertoire de tables
Répertoire de lignes
Informations sur les tables ayant des
rangées dans le bloc (ex: CLUSTERS)
Espace libre
Répertoire de lignes:
–
■
Informations générales sur le bloc (ex:
adresse, type de segment, etc.)
Entête de bloc
(partie fixe + partie variable)
Informations sur les lignes stockées dans
le bloc (ex: adresse, chaînage, etc.)
Espace libre:
–
Utilisé pour l’insertion ou la mise-à-jour
de lignes dans le bloc (voir paramètres
PCTFREE et PCTUSED).
Département de génie logiciel et des TI
Espace occupé
© R. Godin, C. Desrosiers - Hiver 2011
9
Structure d’enregistrements (taille fixe)
■
Nombre fixe d’octets pour chaque champs (remplissage par
caractère neutre)
noCatalogue
ENTIER
binaire 32 bits
(4 octets)
description
CHAINE[30]
un octet (ASCII 8 bits) par caractère (remplissage avec espaces)
(30 octets)
prixUnitaire
REEL
point-flottant 64 bits
(8 octets)
Total : 42 octets
■
■
■
■
(+) Allocation de mémoire facile à gérer
(+) Facile de trouver la position d'un enregistrement dans un bloc
(−) Gaspillage d'espace si des champs sont vides
Peu utilisé en pratique
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
10
Structure d’enregistrements (taille variable)
■
Frontières de champs et d’enregistrements
–
Indicateur de taille en entête de chaque champ (descripteur de champ)
tailleNoCatalogue
tailleDescription
noCatalogue
–
taillePrixUnitaire
prixUnitaire
Délimiteur (code réservé)
noCatalogue
–
description
description
prixUnitaire
Index en entête de l'enregistrement (descripteur d'enregistrement)
noCatalogue
Département de génie logiciel et des TI
description
prixUnitaire
© R. Godin, C. Desrosiers - Hiver 2011
11
Paramètres de stockage (TABLESPACE)
CREATE TABLESPACE MonTablespace DATAFILE ‘c:\TS_ORCALE\fichier_ts.ora’
SIZE <Taille en Mb>
BLOCKSIZE <Taille en Kb>
[Paramètres de journalisation (logging)]
[Paramètres de compression]
[Paramètres de gestion d’EXTEND]
[Paramètres de gestion de SEGMENT]
...
■
Petits blocs:
–
–
■
Pour les petites lignes souvent accédées de manière non-séquentielle
Réduit l’accès concurrent des blocs
Grands blocs:
–
–
–
Pour des grandes lignes souvent accédées de manière séquentielle
Overhead moins important relié à l’entête
Permet de transférer plus de lignes dans un même transfert
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
12
Paramètres de stockage (tables)
CREATE TABLE TableExemple
(
...
)
INITRANS
1
MAXTRANS
5
PCTFREE
10
PCTUSED
40
TABLESPACE user_data
STORAGE(
INITIAL
20480
NEXT
20480
MINEXTENTS 1
MAXEXTENTS 10
PCTINCREASE 10)
Paramètre
Description
INITRANS,
MAXTRANS
Espace initial et maximal pour l'information
sur les transactions impliquant le bloc (ex:
verrous)
PCTFREE
Pourcentage d'espace dans le bloc réservé
pour les UPDATE
PCTUSED
Pourcentage du bloc devant être libre pour le
retourner dans la FREE LIST
TABLESPACE
TABLESPACE dans lequel la table est créée
INITIAL / NEXT
Taille en octets des premier et deuxième
extensions mémoire (EXTENT) de la table
MINEXTENTS,
MAXEXTENTS
Nombre minimal et maximal d'extensions de
mémoire permises pour la table
PCTINCREASE
Facteur de croissance de la taille des
extensions de mémoire (après la deuxième)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
13
Conseils pour le stockage
■
Mettre le paramètre PCTFREE à 0 pour les tables dont la taille
est statique:
–
–
Évite le gaspillage d’espace
Moins de blocs à transférer
■
Choisir un petit INITRANS s’il y a peu de chances que deux
transactions accèdent simultanément un même bloc
■
Définir chaque TABLESPACE sur un disque différent, et
éviter de répartir un DATAFILE sur plusieurs disques:
–
–
Répartit la charge et permet des lectures parallèles
Évite de devoir accéder plusieurs disques pour une même requête
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
14
Gestion d'espace libre pour les
enregistrements de taille variable
■
Stratégie 1: ne pas récupérer
–
■
–
1
Apparition progressive de petits espaces trop petits
pour être utilisés
Oracle (stratégie 2):
–
0
Insérer dans l'espace le mieux ajusté (best-fit)
Insérer dans le premier espace possible (first-fit)
Fragmentation interne:
–
■
Entraîne un gaspillage d'espace
Stratégie 2: liste d'espace libres (FREELIST)
–
■
Numéro
de bloc
2
Libère l'espace lors d'un DELETE ou un UPDATE
réduisant la taille de l'enregistrement
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
15
Récupération d'espace
Index des positions des
enregistrements
■
On fusionne les espaces libres à l'intérieur d'un même bloc
Ex: suppression de l’enregistrement #2
Taille de l'index des
positions
■
3
Espace libre
1
2
Enr. #3
Enr. #2
Enr. #1
3
Suppression de #2
3
Espace libre
1
2
Enr. #3
Enr. #1
3
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
16
Gestion des débordements
■
■
Cause: un UPDATE qui grossit un
champs de plus que l'espace libre du
bloc
Stratégie de chaînage:
–
–
■
On enchaîne un bloc de débordement au
bloc qui déborde (bloc d'ancrage)
Bloc
d'ancrage
Les enregistrements gardent le
même IDE
Numéro
de bloc
Bloc virtuel
de taille
variable
0
1
Deux possibilités:
–
–
L'enregistrement "rentre" dans le bloc de
débordement: on le déplace
L'enregistrement ne "rentre" pas: on le
découpe
Département de génie logiciel et des TI
2
Bloc de
débordement
© R. Godin, C. Desrosiers - Hiver 2011
17
Découpage de l’enregistrement
Numéro
de bloc
0
2e morceau
Bloc
d'ancrage
1
1er morceau
2
Bloc de
débordement
Cas particulier :
adresse de suivi (forwarding address)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
18
Compression des tables
■
Syntaxe:
CREATE TABLE TableCompressee
(...)
COMPRESS [BASIC|FOR OLTP] AS
SELECT * FROM TableNonCompresee
■
■
■
■
■
■
Compression des enregistrements doublons dans les blocs
Permet de sauver de l’espace disque
Balayage de tables (FULL TABLE SCAN) accéléré
Mises à jour (UPDATE) plus coûteux
BASIC : Applique la compression lors de l’insertion en lot
FOR OLTP: Applique la compression à toutes les opérations LMD
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
19
Compression des tables
■
Exemple:
Source: www.oracle.com
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
20
Index de données
■
Structure physique utilisée pour faciliter la recherche
d’enregistrements d’une table (ex: éviter le balayage de la table)
■
Est ordonné selon une ou plusieurs colonnes composant la clé
de l’index
■
Accélère les opérations de sélection, jointure, tri, etc.
■
Nécessite de l’espace sur le disque et une mise à jour
■
Peut être primaire ou secondaire
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
21
Index primaire vs secondaire
■
Index primaire:
–
–
–
–
–
Organisation indexée qui inclut les enregistrements
Les enregistrements sont ordonnés physiquement selon la
clé de l'index
Limite d’un seul index primaire par table
Surtout avantageux lors de sélections par intervalle sur la clé
de l’index
Exemple: INDEX ORGANIZED TABLE en Oracle
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
22
Index primaire vs secondaire
■
Index secondaire:
–
–
–
–
–
Organisation indexée contenant des références (ex:
ROWID) aux enregistrements physiques
Les enregistrements ne sont pas ordonnés physiquement
Plusieurs indexes secondaires possibles pour une même
table
Très avantageux pour les sélections par valeur et les
jointures
Exemple: Simple INDEX en Oracle
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
23
Indexage par arbre-B
■
Arbre-B (B-tree)
–
Index hiérarchique sous la forme d'un arbre balancé
–
Réorganisation dynamique à la suite d'une insertion,
suppression ou mise à jour de la clé
–
Sélection en O(log(N)) dans le pire des cas
–
Utilisé dans la plupart des BD commerciales
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
24
Arbre-B+: exemple d’index primaire
Bloc 7
50
Bloc 2
25 40
Bloc 0
10
20
Bloc 3
25
30
Bloc 6
60
45
Bloc 1
40
43
44
Bloc 8
45
48
Bloc 5
50
53
Bloc 4
60
70
Lignes de la table ayant 10 comme clé
• Les feuilles contiennent les enregistrements de la BD
(l’index est l’organisation primaire des données)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
25
Arbre-B+: exemple d’index secondaire
Bloc 7
50
Bloc 2
25 40
Bloc 0
10
20
Bloc 3
25
30
Bloc 6
60
45
Bloc 1
40
43
44
Bloc 8
45
48
Bloc 5
50
53
Bloc 4
60
70
Blocs des enregistrements de la BD (organisation primaire)
• Les feuilles contiennent l’adresse (ROWID) des enregistrements
• Les enregistrements ayant des clés similaires (ou même identiques) ne sont
pas forcément près l’un de l’autre dans l’organisation primaire
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
26
Arbre-B+: propriétés des feuilles
■
■
■
■
Règle 1: chaque bloc doit être rempli à moitié au minimum
Règle 2: les clés sont triées dans un bloc
Règle 3: les feuilles sont ordonnées selon la clé
Règle 4: toutes les feuilles sont au même niveau (arbre équilibré)
C1
–
–
–
R1
...
Cn
Rn
Espace
libre
S
Ci : Clé
Ri : reste de l'enregistrement ou référence
S : Pointeur sur le bloc suivant dans la liste des feuilles
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
27
Arbre-B+: propriétés d’un bloc interne
■
■
■
Règle 1: chaque bloc doit être rempli à moitié au minimum
Règle 2: les clés sont triées dans un bloc
Règle 3: toutes les clés contenues dans le sous-arbre d'une clé sont
strictement inférieures à cette clé:
–
Ci-1 ≤ Clés sous Pi-1 < Ci
P1
C < C1
C1
P2
...
Ci-1
Pi-1
Ci
Ci-1 <= C < Ci
Département de génie logiciel et des TI
...
Pn-1
Cn-1
Pn
Espace
libre
Cn-1 <= C
© R. Godin, C. Desrosiers - Hiver 2011
28
Arbre-B+: recherche par clé
■
Recherche de l'élément ayant la clé C :
–
On traverse l'arbre en partant de la racine, jusqu'à la feuille
contenant l'enregistrement
–
Bloc interne:
On cherche le plus petit i tel que C < Ci
■ On va au bloc pointé par Pi
■
–
Feuille:
■
On parcourt le bloc jusqu'à ce qu'on trouve la clé ou qu'on
dépasse sa valeur
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
29
Arbre-B+: exemple de recherche
■
Recherche de 43
Bloc 7
50
Bloc 2
25 40
Bloc 0
10
20
Bloc 3
25
30
Bloc 6
60
45
Bloc 1
40
43
Département de génie logiciel et des TI
44
Bloc 8
45
48
Bloc 5
50
53
© R. Godin, C. Desrosiers - Hiver 2011
Bloc 4
60
70
30
Arbre-B+: insertion d'un enregistrement
■
Principe général:
–
–
On localise la feuille où doit se faire l'insertion de la
nouvelle clé
S'il y a de l'espace, on insère l'enregistrement en respectant
l'ordre des clés
–
Sinon, le bloc déborde et il faut le diviser en deux
–
Si nécessaire, mettre à jour les références dans les blocs
parents
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
31
Arbre-B+: exemple d'insertion
Cas sans débordement
■
Insertion de 25
Bloc 2
40
Bloc 0
20
...
30
Bloc 1
40
...
...
60
...
Bloc 2
40
Bloc 0
20
25
30
Département de génie logiciel et des TI
Bloc 1
40
60
© R. Godin, C. Desrosiers - Hiver 2011
32
Arbre-B+: exemple d'insertion
Cas avec débordement
■
■
Insertion de 10
Débordement et la division du bloc 0
Bloc 2
40
Bloc 0
20
25
Bloc 1
40
60
30
Bloc 2
25
Bloc 0
10
20
40
Bloc 3
25
30
Département de génie logiciel et des TI
Bloc 1
40
60
© R. Godin, C. Desrosiers - Hiver 2011
33
Arbre-B+: suppression d'un enregistrement
■
Principe général:
–
On localise la feuille où se trouve la clé à supprimer
–
On supprime la clé de la feuille
–
Si la clé se trouve dans le bloc parent, il faut la remplacer par
la clé suivante dans la feuille
–
Si la feuille ne respecte pas la contrainte d'être remplie à
moitié on doit soit:
Redistribuer les clés des voisins OU
■ Fusionner les blocs voisins
■
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
34
Arbre-B+: exemple de suppression
Cas suppression simple
■
Suppression de 70
Bloc 2
25
Bloc 0
10
20
Bloc 3
25
30
Bloc 2
25
Bloc 0
10
20
40
70
40
Bloc 3
25
30
Département de génie logiciel et des TI
Bloc 1
40
60
Bloc 1
40
60
© R. Godin, C. Desrosiers - Hiver 2011
35
Arbre-B+: exemple de suppression
Cas première clé du bloc et pas la première feuille
■
■
Suppression de 40
Remplacer dans le parent (si pas « aîné »)
Bloc 2
25
Bloc 0
10
20
Bloc 3
25
30
Bloc 2
25
Bloc 0
10
20
40
70
60
Bloc 3
25
30
Département de génie logiciel et des TI
Bloc 1
40
60
Bloc 1
60
70
© R. Godin, C. Desrosiers - Hiver 2011
36
Arbre-B+: exemple de suppression
Cas redistribution des voisins
■
■
Redistribuer les clés
Ajuster le parent
Bloc 0
20
25
Bloc 2
40
Bloc 1
40
60
30
Bloc 2
30
Bloc 0
20
25
Département de génie logiciel et des TI
Bloc 1
30
60
© R. Godin, C. Desrosiers - Hiver 2011
37
Arbre-B+: exemple de suppression
Cas fusion des voisins
Violation de la
règle du minimum
Bloc 0
10
20
Bloc 2
25
60
Bloc 3
25
30
Fusion des deux frères
Bloc 1
60
70
Bloc 2
60
Bloc 0
10
25
30
Département de génie logiciel et des TI
Bloc 1
60
70
© R. Godin, C. Desrosiers - Hiver 2011
38
Index sur une clé non unique
■
Arbre-B+ primaire:
–
–
■
Gestion des IDE difficile
Pas supporté par Oracle, mais possible avec les CLUSTER
Arbre-B+ secondaire:
–
–
Stratégie 1: clés répétées
■
On crée une clé unique en fusionnant la clé avec le IDE de la référence
Ex: NouvelleClé = (Clé, IDE)
■
Stratégie utilisée dans Oracle
Stratégie 2: collection de références:
■
Les feuilles contiennent des listes de références vers les enregistrements
de même clé
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
39
Index sur une clé composée
■
Peut être traduit en une clé simple formée de la
concaténation des champs
–
■
Ex:
NouvelleClé = (col1, col1, ..., colN)
Tout préfixe de la clé peut être utilisé comme index
–
Ex: index sur la clé (col1, col2, col3)
–
Cet index peut être utilisé pour des recherches avec les clés
(col1, col2) ou (col1), mais pas (col2, col3)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
40
Index primaire dans Oracle
■
■
■
■
Correspond à une INDEX ORGANIZED TABLE
Utilise toujours la clé primaire comme clé
Un seul index primaire par table
Mise en œuvre:
CREATE TABLE Exemplaire
(idExemplaire
VARCHAR(10) NOT NULL,
dateAchat
DATE
NOT NULL,
statut
DomaineStatut
NOT NULL,
ISBN
CHAR(13)
NOT NULL,
PRIMARY KEY (idExemplaire),
FOREIGN KEY (ISBN) REFERENCES Livre
)
ORGANIZATION INDEX
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
41
Index primaire dans Oracle
■
Avantages:
–
–
–
■
Pas nécessaire de stocker la clé primaire dans les données (car
contenue dans l’index) ni le ROWID (remplacé par la clé
primaire)
Accélère surtout la sélection par intervalle sur la clé primaire
Peut également accélérer la jointure (algorithme de tri-fusion)
Inconvénients:
–
–
L’adresse logique d’une ligne change lorsque l’index est mis à jour
Pas recommandé de combiner avec des index secondaires sur
d’autres colonnes
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
42
Index secondaire dans Oracle
■
■
On peut avoir plusieurs indexes par table, mais un seul par
ensemble de colonnes
Insertion en lot: il est préférable de créer l'index après
l'insertion (ex: ALTER INDEX ... REBUILD)
CREATE INDEX indexCodeAnnéeLivres
ON Livre(code, annéeParution)
INITRANS 1
MAXTRANS 5
PCTFREE
25
TABLESPACE user_data
STORAGE(
INITIAL
20480
NEXT
20480
MINEXTENTS
1
MAXEXTENTS
10
PCTINCREASE
10)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
43
Index secondaire dans Oracle
■
Créer des indexes coûte de la mémoire
■
Consignes:
–
Ne pas créer d'index si plus de 15% de la table peut être
retournée (sinon balayage est plus efficace)
–
Ne pas créer d'index sur les petites tables
–
Ne pas créer d'index sur les colonnes qui sont souvent nulles
–
Créer des indexes sur les clés étrangères les et colonnes utilisées
pour filtrer
–
Clés composées: mettre d'abord les colonnes les plus utilisées car
l'index sert également pour les préfixes
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
44
Function-based index
■
■
Sert lorsque la sélection se fait sur une fonction, pas une
colonne
Exemple:
SELECT * FROM Film
WHERE UPPER(titre) LIKE 'STAR WARS'
■
L'index est créé sur la fonction:
CREATE INDEX nomIndex ON FILM(UPPER(titre))
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
45
Bitmap index
■
■
■
Crée une colonne (bit) pour chaque valeur possible des
colonnes indexées
Ex: colonne sexe {homme, femme} se traduit par deux bits
Sert à accélérer les sélections ayant des contraintes
d'égalités de valeur sur plusieurs colonnes
CREATE BITMAP INDEX indexBitmapStatutExemplaire
ON Exemplaire(statut)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
46
Bitmap index: exemple
Table:
Index bitmap:
indice noPermis
sexe
couleurYeux
bitmap
sexe = M
bitmap
sexe = F
1
2
3
4
5
6
7
8
M
M
F
M
F
M
F
F
brun
bleu
brun
brun
brun
rouge
bleu
brun
1
1
0
1
0
1
0
0
0
0
1
0
1
0
1
1
■
G111
G555
G222
G888
G777
G666
G333
G444
bitmap
couleurYeux
= bleu
0
1
0
0
0
0
1
0
bitmap
couleurYeux
= brun
1
0
1
1
1
0
0
1
bitmap
couleurYeux
= rouge
0
0
0
0
0
1
0
0
Exemple: sélectionner les hommes aux yeux bruns
– Bitmap sexe = M : 11010100
– Bitmap couleurYeux = brun : 10111001
– Bitmap de la sélection: 10111001 ET 11010100 = 10010000
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
47
Bitmap index: consignes
■
Quand utiliser les bitmap index:
–
Lorsque le domaine de la colonne est réduit (ex: année d'un
film n'est pas un bon choix)
–
Pour des colonnes accédées dans les SELECT avec
plusieurs contraintes d'égalité
–
Pour les colonnes dont le domaine varie peu
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
48
Organisation par grappe de hachage
(hash cluster)
■
Organise les enregistrements d’une ou de plusieurs tables dans un
tableau de TH paquets (buckets), où TH est la taille de l’espace
d’adressage
■
L’adresse d’un enregistrement (le paquet contenant celui-ci) est donné
par une fonction de hashage appliqué sur la clé de hashage
–
Adresse = h(clé de hachage)
■
Pas d’index à traverser : O(1) en meilleur cas
■
Permet uniquement la sélection par égalité (pas de sélection par
intervalle)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
49
Grappe homogène vs hétérogène
■
Grappe homogène:
–
–
■
Organise les enregistrement d’une seule table en fonction de leur valeur
pour la clé de grappe
Accélère les sélections d’enregistrement selon la clé de grappe
Grappe hétérogène:
–
–
–
–
Organise les enregistrements de plusieurs tables différentes en fonction
d’une clé de grappe
Un paquet peut contenir des enregistrements de formats différents
(provenant de différentes tables)
Accélère la jointure de tables dans une grappe construite selon la clé de
jointure
Ralentit le balayage d’une table car ses lignes sont réparties dans un plus
grand espace
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
50
Exemple de grappe homogène
(clé unique)
■
Sélection de l’item dont le ID est 10:
ID
0
Description
Prix
60
Erable argenté
15.99
90
Pommier
25.99
81
Catalpa
25.99
70
Herbe à puce
10.99
40
Epinette bleue
25.99
10
Cèdre en boule
10.99
20
Sapin
12.99
50
Chêne
22.99
95
Génévrier
15.99
80
Poirier
26.99
clé = 10
h(10) = 10 MOD 3 = 1
1
2
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
51
Exemple de grappe homogène
(clé non unique)
■
Regroupement des mêmes valeurs de clé
–
v1 = v2 ⇒ h(v1) = h(v2)
0
h(taille) = taille MOD 3
1
2
taille
20
Sapin
12.99
15
52
Pin
18.99
15
90
Pommier
25.99
6
80
Poirier
26.99
6
81
Catalpa
25.99
15
40
Epinette bleue
25.99
15
70
Herbe à puce
10.99
1
95
Génévrier
15.99
1
10
Cèdre en boule
10.99
1
50
Chêne
22.99
20
60
Erable argenté
15.99
20
43
Magnolia
28.99
5
Département de génie logiciel et des TI
Effet de grappe:
Les enregistrements ayant la même
clé se trouvent dans les mêmes blocs
(moins de blocs à lire)
© R. Godin, C. Desrosiers - Hiver 2011
52
Exemple de grappe hétérogène
■
Regroupement des Client et leurs comptes
Numéro
de bloc
Table Client
10
20
30
Luc Sansom
Table Compte
Lin Bô
100
100
1000.00
300
1000.00
20
200
2000.00
200
400
5.00
600
10.00
(999)999-9999
Dollard Tremblay (888)888-8888
10
Luc Sansom
1000.00
(999)999-9999
300
0, 10
1000.00
0
(777)777-7777
Département de génie logiciel et des TI
IDG
Dollard Tremblay (888)888-8888
0, 20
2000.00
30
Lin Bô
400
5.00
(777)777-7777
600
1, 30
10.00
1
© R. Godin, C. Desrosiers - Hiver 2011
53
Problème de débordement dû aux
collisions
■
Méthodes de résolution des collisions par chaînage:
0
1
2
■
60
Erable argenté
15.99
90
Pommier
25.99
81
Catalpa
25.99
70
Herbe à puce
10.99
40
Epinette bleue
25.99
10
Cèdre en boule
10.99
43
Magnolia
28.99
20
Sapin
12.99
50
Chêne
22.99
95
Génévrier
15.99
80
Poirier
26.99
52
Pin
18.99
Note: les débordements peuvent réduire considérablement
l'efficacité de la grappe.
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
54
HASH CLUSTER Oracle
■
Syntaxe:
CREATE CLUSTER nomCluster(col1 type1, col2 type2, ...)
SIZE taillePaquet
HASHKEYS nbPaquets
[HASH IS fctHashage]
[SINGLE TABLE]
[paramètres d’allocation de mémoire]
–
SIZE: l’espace réservé pour chaque paquet (en octet)
–
HASHKEYS: le nombre de paquets (taille d’adressage)
HASH IS: permet de spécifier une fonction de hashage à utiliser
–
■
–
Ex: HASH IS col1 va utiliser la valeur de col1 directement comme fonction
de hashage
SINGLE TABLE: permet de spécifier que la grappe contient une seule
table (homogène)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
55
HASH CLUSTER Oracle
■
Choix des paramètres HASHKEYS et SIZE:
–
–
–
–
–
HASHKEYS correspond au nombre maximal de valeur distinctes
de la clé (ex: le nombre de lignes si la clé est unique)
SIZE correspond à l’espace nécessaire pour contenir toutes les
lignes ayant une même valeur (ex: la taille d’une ligne si la clé est
unique)
Une valeur trop petite pout HASHKEYS ou SIZE risque de causer
des débordements entraînant une dégradation de la performance
Une valeur trop grande de ces paramètres requiert beaucoup de
mémoire et augmente la distance entre les enregistrements en
mémoire
En pratique, on utilise les clusters sur les tables dont le nombre de
valeurs distinctes de la clé est connu d’avance et change peu
(statique)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
56
HASH CLUSTER Oracle
■
Exemple: regroupement de comptes et clients
–
–
–
–
Maximum de 100,000 clients
Un client possède en moyenne 2-3 comptes
Une ligne de la table Client prend en moyenne 250 octets, et une
ligne de la table Compte 150 octets
SIZE = 250 + (3 × 150) = 700 octets
CREATE CLUSTER GrappeCompteClients(idClient INTEGER)
SIZE 700 HASHKEYS 100000
CREATE TABLE Client(
id
INTEGER PRIMARY KEY,
...
) CLUSTER GrappeCompteClients(id)
CREATE TABLE Compte(
id
INTEGER PRIMARY KEY,
idClient INTEGER
...
) CLUSTER GrappeCompteClients(idClient)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
57
INDEX CLUSTER Oracle
■
■
■
■
■
L’adresse d’une ligne dans la grappe est donnée par un index
Différences avec HASH CLUSTER:
– Il faut omettre le paramètre HASHKEYS et mettre INDEX
– Il faut créer un index sur le cluster
(−) Moins performant que le HASH CLUSTER (il faut parcourir l’index)
(+) Les enregistrements sont ordonnés physiquement selon la clé de
grappe (similaire à un index primaire)
Exemple: grappe homogène sur la table Client
CREATE CLUSTER GrappeClients(idClient INTEGER)
SIZE 250 INDEX SINGLE TABLE
CREATE INDEX indexGrappe GrappeClients(idClient)
CREATE TABLE Client(
id
INTEGER PRIMARY KEY,
...
) CLUSTER GrappeClients(id)
Département de génie logiciel et des TI
© R. Godin, C. Desrosiers - Hiver 2011
58

Documents pareils