Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
cnam:nfp107:seance8 [2023/04/22 15:54] – jcheron | cnam:nfp107:seance8 [2023/04/22 16:20] (Version actuelle) – jcheron | ||
---|---|---|---|
Ligne 98: | Ligne 98: | ||
l' | l' | ||
- | < | + | < |
Avantages et inconvénients | Avantages et inconvénients | ||
Ligne 111: | Ligne 111: | ||
Ce sont les plus couramment utilisés dans la pratique. | Ce sont les plus couramment utilisés dans la pratique. | ||
- | Le temps nécessaire pour accéder à n' | + | * Le temps nécessaire pour accéder à n' |
- | L' | + | |
+ | <WRAP info> | ||
Avantages et inconvénients | Avantages et inconvénients | ||
- | structure de données polyvalente - accès séquentiel ou aléatoire | + | * structure de données polyvalente - accès séquentiel ou aléatoire |
- | l' | + | |
- | supporte efficacement les correspondances exactes, par plage, par clé partielle et par motif. | + | |
- | les fichiers volatiles sont traités efficacement car l' | + | |
- | moins bien adapté aux fichiers relativement stables - dans ce cas, ISAM est plus efficace. | + | |
+ | </ | ||
- | Fonctionnement des B-Tree | + | //TODO image// |
- | Visualisation | + | |
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | <WRAP todo> | ||
Implémenter B-TREE en java pour les opérations suivantes : | Implémenter B-TREE en java pour les opérations suivantes : | ||
- | Recherche | + | * Recherche |
- | Insertion | + | |
- | Suppression | + | |
Vous avez 15 minutes… | Vous avez 15 minutes… | ||
voir https:// | voir https:// | ||
- | Variante B+Tree : | + | </ |
+ | |||
+ | __**Variante B+Tree :**__ | ||
Parcours séquentiel + recherche indexée | Parcours séquentiel + recherche indexée | ||
- | Fonctionnement des B+Tree | + | * [[https:// |
- | Visualisation | + | * [[https:// |
- | ISAM | + | === ISAM === |
ISAM (acronyme de l' | ISAM (acronyme de l' | ||
Ligne 148: | Ligne 157: | ||
MyISAM utilise B-Tree | MyISAM utilise B-Tree | ||
- | Mysql ⇒ MyISAM | + | * Mysql ⇒ MyISAM |
- | PostGreSQL ⇒ Unlogged tables | + | |
- | Oracle ⇒ Tablespaces | + | |
MyISAM ne gère ni les clés étrangères, | MyISAM ne gère ni les clés étrangères, | ||
- | Lors de suppressions sur des champs de type VARCHAR, CHAR, BLOB ou TEXT, le moteur supprime le contenu mais la place précédemment supprimée est conservée et peut être réutilisée ultérieurement. L' | + | Lors de suppressions sur des champs de type VARCHAR, CHAR, BLOB ou TEXT, le moteur supprime le contenu mais la place précédemment supprimée est conservée et peut être réutilisée ultérieurement. L' |
MyISAM ⇒ très utilisé pour le Web vitrine. | MyISAM ⇒ très utilisé pour le Web vitrine. | ||
Ligne 159: | Ligne 168: | ||
Une table MyISAM utilise trois fichiers : | Une table MyISAM utilise trois fichiers : | ||
- | maTable.FRM : Fichier de définition de la table | + | * maTable.FRM : Fichier de définition de la table |
- | maTable.MYD : Fichier contenant les données de la table | + | |
- | maTable.MYI : Fichier d' | + | |
Permet les recherches en FULL-TEXT ⇒ Recherche avec retour de pertinance | Permet les recherches en FULL-TEXT ⇒ Recherche avec retour de pertinance | ||
- | Exemple : | + | __**Exemple :**__ |
+ | <sxh sql; | ||
SELECT *, MATCH (Titre, Article) AGAINST ('base de données' | SELECT *, MATCH (Titre, Article) AGAINST ('base de données' | ||
- | Retour : | + | </ |
- | + | __**Retour :**__ | |
- | IdArticle | + | < |
+ | IdArticle | ||
7 | Federated | Le moteur Federated permet de déporter… | 7 | Federated | Le moteur Federated permet de déporter… | ||
6 | Exemple | 6 | Exemple | ||
Ligne 175: | Ligne 185: | ||
1 | MyIsam | 1 | MyIsam | ||
2 | Memory | 2 | Memory | ||
- | Avantages | + | </ |
- | Moteur rapide. | + | |
- | Possibilité d' | + | <WRAP info> |
- | Verrouillage de table manuel. | + | * Avantages |
- | La mise en cache des clés. | + | |
- | Gain de place sur le disque. | + | |
- | Gain de mémoire lors des mises à jour. | + | |
- | Gestion de la recherche FULL-TEXT. | + | |
- | Inconvénients | + | |
- | Pas de gestion des contraintes de clés étrangères | + | |
- | Pas de gestion des transactions (pas de COMMIT / ROLLBACK possible). | + | |
- | InnoDB | + | |
+ | | ||
+ | | ||
+ | </ | ||
+ | === InnoDB | ||
InnoDB est le moteur par défaut à partir de MySQL 5.5.52. Son principal avantage par rapport aux autres moteurs de stockage de MySQL est qu'il permet des transactions ACID (Atomiques, Cohérentes, | InnoDB est le moteur par défaut à partir de MySQL 5.5.52. Son principal avantage par rapport aux autres moteurs de stockage de MySQL est qu'il permet des transactions ACID (Atomiques, Cohérentes, | ||
Autrement dit, InnoDB est un moteur de bases de données relationnelles et transactionnelles, | Autrement dit, InnoDB est un moteur de bases de données relationnelles et transactionnelles, | ||
Ligne 199: | Ligne 214: | ||
Depuis la version 5.6, une extension memcached peut être associée à InnoDB, permettant d' | Depuis la version 5.6, une extension memcached peut être associée à InnoDB, permettant d' | ||
- | Avantages | + | <WRAP info> |
- | Verrouillage de ligne. | + | * Avantages |
- | Gestion du COMMIT/ | + | |
- | Gestion de gros volumes de données. | + | |
- | Gestion des clés étrangères. | + | |
- | Grande panoplie d' | + | |
- | Gestion du backup sans bloquer une base en production. | + | |
- | Couramment disponible chez les hébergeurs en mutualisé. | + | |
- | Inconvénients | + | |
- | Lenteur de certaines opérations telles que le SELECT COUNT(*) FROM maTable. | + | |
- | Statistiques envoyées ne sont pas forcément précises : ce ne sont que des estimations. | + | |
- | Choix d' | + | |
- | séquentiel (HEAP) | + | </ |
+ | ==== Choix d' | ||
+ | |||
+ | === séquentiel (HEAP) | ||
Conditions favorables : | Conditions favorables : | ||
- | chargement de données dans la base | + | * chargement de données dans la base |
- | petites tables (occupation de peu de pages) | + | |
- | requêtes manipulant des tables entières | + | |
- | pour recupérer de l' | + | |
Eviter : | Eviter : | ||
+ | * accès à 1 ou plusieurs tuples | ||
+ | * grosses tables | ||
+ | |||
+ | === HASH === | ||
- | accès à 1 ou plusieurs tuples | ||
- | grosses tables | ||
- | HASH | ||
Conditions favorables : | Conditions favorables : | ||
- | recherche sur valeur exacte de clé (le plus rapide) | + | * recherche sur valeur exacte de clé (le plus rapide) |
Eviter : | Eviter : | ||
- | recherche sur pattern matching (partie de clé) | + | * recherche sur pattern matching (partie de clé) |
- | traitement de table entière | + | |
- | joints naturels (systématique sans restriction) | + | |
- | ISAM | + | |
+ | === ISAM === | ||
Conditions favorables : | Conditions favorables : | ||
+ | * requêtes nécessitant pattern matching ++ | ||
+ | * la table grossit lentement (peu de réorg.) | ||
+ | * clé large | ||
- | requêtes nécessitant pattern matching ++ | ||
- | la table grossit lentement (peu de réorg.) | ||
- | clé large | ||
Eviter : | Eviter : | ||
- | si recherche sur clé complète (→HASH) | + | * si recherche sur clé complète (→HASH) |
- | grosse table à croissance rapide | + | |
- | BTREE | + | |
+ | === BTREE === | ||
Conditions favorables : | Conditions favorables : | ||
- | besoin de pattern matching + | + | * besoin de pattern matching + |
- | la table grossit vite | + | |
- | table trop grosse pour être souvent réorganisée (Modify) | + | |
- | joints de tables entières | + | |
Eviter : | Eviter : | ||
- | table statique ou à croissance faible | + | * table statique ou à croissance faible |
- | large clé | + | |
- | si ajout de nouveaux tuples seulement en fin de table (plus grand risque de DEAD LOCK) | + | |
- | Résumé | + | |
- | Fonctionnalité B-Tree ISAM Hash Heap | + | |
- | chargement de table ++ – – + | + | === Résumé |
- | recherche sur clé complète ++ ++ + – | + | |
- | intervalles/ | + | ^Fonctionnalité ^B-Tree ^ISAM ^Hash ^Heap ^ |
- | recherches séquentielles ++ ++ - + | + | |chargement de table | ++ | – | – | + | |
- | recherche sur clé partielle + + – – | + | |recherche sur clé complète |
- | accés à données triées + – – – | + | |intervalles/ |
- | joints sur larges tables + + – – | + | |recherches séquentielles |
- | index croît comme table + – – – | + | |recherche sur clé partielle |
- | très petite table + – – – | + | |accés à données triées |
- | très grande table + – – – | + | |joints sur larges tables |
+ | |index croît comme table | + | – | – | – | | ||
+ | |très petite table | + | – | – | – | | ||
+ | |très grande table | + | – | – | – | | ||
Source : Bernard Espinasse | Source : Bernard Espinasse | ||
- | Application | + | ==== Application |
Objectif : | Objectif : | ||
- | Benchmark des moteurs de stockage MySQL (InnoDB, MyISAM) et PostgreSQL. | + | * Benchmark des moteurs de stockage MySQL (InnoDB, MyISAM) et PostgreSQL. |
- | Tests sur petits (100) et + gros volumes de données (10 000) | + | |
- | sur les 6 primitives de base | + | |
- | Etablir un protocole de test (nb de requêtes, concurrency level, méthode/ | + | |
- | Créer les bases de données : | + | <WRAP todo> |
- | Pour chaque moteur (X3) | + | * Etablir un protocole de test (nb de requêtes, concurrency level, méthode/ |
- | Pour chaque volume (X2) | + | |
- | Incorporer les données avec GenerateData | + | |
- | Mettre en place le protocole établi | + | |
- | Réaliser les tests | + | |
- | Présenter les résultats | + | |
+ | | ||
+ | | ||
+ | </ |