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