Mythologie
J'ai toujours pensé que les bases de données devraient être dénormalisées pour la lecture, comme cela est fait pour la conception de bases de données OLAP, et ne pas exagérer beaucoup plus loin 3NF pour la conception OLTP.
Il y a un mythe à cet effet. Dans le contexte des bases de données relationnelles, j'ai réimplémenté six très grandes "bases de données" dites "dé-normalisées" ; et j'ai exécuté plus de quatre-vingts missions de correction de problèmes sur d'autres, simplement en les normalisant, en appliquant les normes et les principes d'ingénierie. Je n'ai jamais vu la moindre preuve de ce mythe. Seulement des gens qui répètent le mantra comme s'il s'agissait d'une sorte de prière magique.
Normalisation vs non normalisée
("Dé-normalisation" est un terme frauduleux que je refuse d'utiliser).
Il s'agit d'une industrie scientifique (du moins celle qui fournit des logiciels qui ne se cassent pas, qui envoie des gens sur la Lune, qui fait fonctionner des systèmes bancaires, etc.) Elle est régie par les lois de la physique, pas par la magie. Les ordinateurs et les logiciels sont tous des objets finis, tangibles et physiques qui sont soumis aux lois de la physique. D'après l'enseignement secondaire et tertiaire que j'ai reçu :
-
il n'est pas possible qu'un objet plus grand, plus gros et moins organisé soit plus performant qu'un objet plus petit, plus fin et mieux organisé.
-
La normalisation donne plus de tableaux, certes, mais chaque tableau est beaucoup plus petit. Et même s'il y a plus de tables, il y a en fait (a) moins de jointures et (b) les jointures sont plus rapides car les ensembles sont plus petits. Moins d'index sont nécessaires dans l'ensemble, car chaque table plus petite nécessite moins d'index. Les tables normalisées produisent également des tailles de ligne beaucoup plus courtes.
-
pour tout ensemble donné de ressources, tableaux normalisés :
- faire tenir plus de rangées dans la même taille de page
- donc faire tenir plus de lignes dans le même espace de cache, d'où une augmentation du débit global)
- Par conséquent, un plus grand nombre de lignes peuvent être placées dans le même espace disque, ce qui réduit le nombre d'entrées/sorties et, lorsqu'une entrée/sortie est nécessaire, chaque entrée/sortie est plus efficace.
.
-
il n'est pas possible qu'un objet qui est fortement dupliqué soit plus performant qu'un objet qui est stocké comme une seule version de la vérité. Par exemple, lorsque j'ai supprimé la duplication 5 fois plus importante au niveau des tables et des colonnes, la taille de toutes les transactions a été réduite, le verrouillage a diminué et les anomalies de mise à jour ont disparu. Cela a considérablement réduit la contention et donc augmenté l'utilisation simultanée.
Le résultat global a donc été une performance beaucoup, beaucoup plus élevée.
Dans mon expérience, qui fournit à la fois OLTP et OLAP à partir de la même base de données, il n'a jamais été nécessaire de "dé-normaliser" mes structures normalisées, pour obtenir une vitesse plus élevée pour les requêtes en lecture seule (OLAP). C'est également un mythe.
- Non, la "dé-normalisation" demandée par d'autres réduisait la vitesse, et elle a été éliminée. Ce n'est pas une surprise pour moi, mais là encore, les demandeurs ont été surpris.
De nombreux livres ont été écrits par des gens qui vendent le mythe. Il faut reconnaître qu'il s'agit de personnes non techniques ; puisqu'elles vendent de la magie, celle-ci n'a aucune base scientifique et elles évitent commodément les lois de la physique dans leur discours de vente.
(Pour quiconque souhaite contester la science physique ci-dessus, la simple répétition du mantra n'aura aucun effet, veuillez fournir des preuves spécifiques soutenant le mantra).
Pourquoi ce mythe est-il si répandu ?
Tout d'abord, elle n'est pas répandue parmi les scientifiques, qui ne cherchent pas à surmonter les lois de la physique.
D'après mon expérience, j'ai identifié trois raisons principales à cette prévalence :
-
Pour les personnes qui ne peuvent pas normaliser leurs données, il s'agit d'une justification pratique pour ne pas le faire. Ils peuvent se référer au livre magique et, sans aucune preuve de cette magie, ils peuvent dire avec révérence "vous voyez, un écrivain célèbre valide ce que j'ai fait". Pas fait, très exactement.
-
De nombreux codeurs SQL ne peuvent écrire que du SQL simple, à un seul niveau. Les structures normalisées nécessitent un peu de connaissances en SQL. S'ils n'en ont pas, s'ils ne peuvent pas produire des SELECT sans utiliser de tables temporaires, s'ils ne peuvent pas écrire de sous-requêtes, ils seront psychologiquement collés à la hanche aux fichiers plats (ce que sont les structures "dé-normalisées"), qu'ils ne pourront pas utiliser. puede processus.
-
Personnes amour de lire des livres, et de discuter de théories. Sans expérience. Surtout en matière de magie. C'est un tonique, un substitut à l'expérience réelle. Quiconque a réellement normalisé une base de données correctement n'a jamais déclaré que "la dé-normalisation est plus rapide que la normalisation". À quiconque énonce ce mantra, je dis simplement "montrez-moi les preuves", et ils n'en ont jamais produit. La réalité est donc que les gens répètent la mythologie pour ces raisons, sans aucune expérience de la normalisation . Nous sommes des animaux de troupeau, et l'inconnu est l'une de nos plus grandes peurs.
C'est pourquoi j'inclus toujours le SQL "avancé" et le mentorat dans tout projet.
Ma réponse
Cette réponse va être ridiculement longue si je réponds à chaque partie de votre question ou si je réponds aux éléments incorrects dans certaines des autres réponses. Par exemple, la réponse ci-dessus n'a répondu qu'à un seul élément. Par conséquent, je vais répondre à votre question dans son ensemble, sans aborder les éléments spécifiques, et adopter une approche différente. Je ne m'occuperai que de la science liée à votre question, pour laquelle je suis qualifié et très expérimenté.
Permettez-moi de vous présenter la science en segments gérables.
Le modèle type des six missions de mise en œuvre complète à grande échelle.
- Il s'agissait des "bases de données" fermées que l'on trouve généralement dans les petites entreprises, et les organisations étaient de grandes banques.
- très bien pour un esprit de première génération, mais un échec total en termes de performances, d'intégrité et de qualité.
- ils ont été conçus pour chaque application, séparément
- Il n'était pas possible de faire des rapports, ils ne pouvaient le faire que via chaque application.
- puisque la "dé-normalisation" est un mythe, la définition technique exacte est qu'ils ont été non normalisé
- Pour "dé-normaliser", il faut d'abord normaliser, puis inverser un peu le processus. dans tous les cas où les gens m'ont montré leurs modèles de données "dé-normalisés", le fait est qu'ils n'avaient pas du tout normalisé ; la "dé-normalisation" n'était donc pas possible ; les données étaient simplement non normalisées.
- étant donné qu'ils ne disposaient pas de la technologie relationnelle, ni des structures et du contrôle des bases de données, mais qu'ils étaient présentés comme des "bases de données", j'ai placé ces mots entre guillemets.
- comme cela est scientifiquement garanti pour les structures non normalisées, elles ont souffert de multiples versions de la vérité (duplication des données) et donc d'une forte contention et d'une faible concurrence, au sein de chacune d'entre elles
- ils avaient un problème supplémentaire de duplication des données à travers les "bases de données"
- l'organisation essayait de synchroniser tous ces doublons, elle a donc mis en place la réplication, ce qui a bien sûr nécessité un serveur supplémentaire, des scripts ETL et de synchronisation à développer et à maintenir, etc.
- Inutile de dire que la synchronisation n'était jamais suffisante et qu'ils la modifiaient constamment.
- Avec toute cette contention et ce faible débit, ce n'était pas du tout un problème de justifier un serveur séparé pour chaque "base de données". Cela n'a pas aidé beaucoup.
Nous avons donc contemplé les lois de la physique, et nous avons appliqué un peu de science.
Nous avons mis en œuvre le concept standard selon lequel les données appartiennent à la société (et non aux départements) et la société voulait une seule version de la vérité. La base de données était purement relationnelle, normalisée en 5NF. Architecture ouverte pure, afin que n'importe quelle application ou outil de rapport puisse y accéder. Toutes les transactions étaient stockées dans des procs (par opposition à des chaînes de SQL incontrôlées sur tout le réseau). Les mêmes développeurs pour chaque application ont codé les nouvelles applications, après notre formation "avancée".
De toute évidence, la science a fonctionné. Ce n'était pas ma science privée ou de la magie, c'était de l'ingénierie ordinaire et les lois de la physique. Tout cela fonctionnait sur une plate-forme de serveur de base de données ; deux paires de serveurs (production et DR) ont été mises hors service et données à un autre département. Les 5 "bases de données" totalisant 720 Go ont été normalisées en une seule base de données de 450 Go. Environ 700 tables (beaucoup de doublons et de colonnes dupliquées) ont été normalisées en 500 tables non dupliquées. Les performances sont beaucoup plus rapides, 10 fois plus rapides dans l'ensemble, et plus de 100 fois plus rapides dans certaines fonctions. Cela ne m'a pas surpris, parce que c'était mon intention et que la science l'avait prédit, mais cela a surpris les personnes qui avaient le mantra.
Plus de normalisation
Et bien, ayant eu du succès avec la normalisation dans chaque projet, et la confiance dans la science impliquée, il a été une progression naturelle de normaliser más et non moins. Autrefois, 3NF était suffisant, et les NF ultérieures n'étaient pas encore identifiées. Au cours des 20 dernières années, je n'ai livré que des bases de données qui n'avaient aucune anomalie de mise à jour, donc il s'avère que selon les définitions actuelles des NFs, j'ai toujours livré 5NF.
De même, 5NF est une excellente solution, mais elle a ses limites. Par exemple, le pivotement de grands tableaux (et non de petits ensembles de résultats comme dans l'extension PIVOT de MS) était lent. J'ai donc (et d'autres) développé un moyen de fournir des tableaux normalisés de sorte que le pivotement soit (a) facile et (b) très rapide. Il s'avère, maintenant que la 6NF a été définie, que ces tableaux sont 6NF.
Comme je fournis des services OLAP et OLTP à partir de la même base de données, j'ai constaté que, conformément à la science, plus les structures sont normalisées :
Donc oui, j'ai une expérience constante et invariable, que non seulement la normalisation est beaucoup, beaucoup plus rapide que la non-normalisation ou la "dé-normalisation" ; más Normalised est encore plus rapide que moins normalisé.
Un signe de réussite est la croissance de la fonctionnalité (le signe d'échec est la croissance de la taille sans croissance de la fonctionnalité). Ce qui signifie qu'ils nous ont immédiatement demandé plus de fonctionnalités de reporting, ce qui signifie que nous avons Encore plus normalisé et a fourni davantage de ces tables spécialisées (qui se sont avérées, des années plus tard, être 6NF).
Je progresse sur ce thème. J'ai toujours été un spécialiste des bases de données, et non un spécialiste des entrepôts de données. Mes premiers projets avec des entrepôts n'étaient donc pas des mises en œuvre complètes, mais plutôt des missions substantielles d'optimisation des performances. Ils étaient dans mon champ d'action, sur des produits dont j'étais spécialiste.
Ne nous préoccupons pas du niveau exact de normalisation, etc., car nous examinons le cas typique. Nous pouvons considérer comme acquis que la base de données OLTP était raisonnablement normalisée, mais qu'elle n'était pas capable d'OLAP, et que l'organisation avait acheté une plateforme OLAP complètement séparée, du matériel, investi dans le développement et la maintenance de masses de code ETL, etc. Et après la mise en œuvre, ils ont passé la moitié de leur vie à gérer les doublons qu'ils avaient créés. Ici, les auteurs de livres et les vendeurs doivent être blâmés pour le gaspillage massif de matériel et de code ETL. séparé les licences de logiciels de plate-forme qu'ils font acheter aux organisations.
- Si vous ne l'avez pas encore observé, je vous demanderais de remarquer les similitudes entre la Base de données typique de la première génération y el Entrepôt de données typique
Pendant ce temps, à la ferme (la Bases de données 5NF ci-dessus), nous n'avons cessé d'ajouter de plus en plus de fonctionnalités OLAP. Bien sûr, la fonctionnalité de l'application a augmenté, mais c'était peu, l'activité n'avait pas changé. Ils demandaient plus de 6NF et c'était facile à fournir (de 5NF à 6NF, c'est un petit pas ; de 0NF à quoi que ce soit, sans parler de 5NF, c'est un grand pas ; une architecture organisée est facile à étendre).
L'une des principales différences entre OLTP et OLAP, la justification de base de l'OLTP. séparé OLAP, c'est que l'OLTP est orienté lignes, il a besoin de lignes transactionnellement sécurisées, et rapides ; et l'OLAP ne se soucie pas des questions transactionnelles, il a besoin de colonnes, et rapides. C'est la raison pour laquelle tous les logiciels haut de gamme de BI ou d'OLAP plates-formes sont orientés colonnes, et c'est pourquoi l'OLAP modèles (Star Schema, Dimension-Fact) sont orientés colonnes.
Mais avec les tables 6NF :
-
il n'y a pas de rangées, seulement des colonnes ; nous servons des rangées et des colonnes à la même vitesse aveuglante
-
les tables (c'est-à-dire la vue 5NF des structures 6NF) sont déjà organisé en Dimension-Facts. En fait, ils sont organisés en plus de Dimensions qu'aucun modèle OLAP ne pourra jamais identifier, car ils sont tous Dimensions.
-
Le pivotement de tableaux entiers avec agrégation à la volée (par opposition au PIVOT d'un petit nombre de colonnes dérivées) est (a) sans effort, un code simple et (b) très rapide.
Ce que nous fournissons depuis de nombreuses années, par définition, ce sont des bases de données relationnelles avec au moins 5NF pour une utilisation OLTP, et 6NF pour les besoins OLAP.
-
Remarquez qu'il s'agit de la même science que celle que nous avons utilisée depuis le début ; pour passer de la Des "bases de données" non normalisées typiques a Base de données de l'entreprise 5NF . Nous appliquons simplement más de la science éprouvée, et obtenir des ordres supérieurs de fonctionnalité et de performance.
-
Remarquez la similitude entre Base de données de l'entreprise 5NF y Base de données d'entreprise 6NF
-
Le coût total du matériel OLAP séparé, du logiciel de la plate-forme, de l'ETL, de l'administration, de la maintenance, sont tous éliminés.
-
Il n'y a qu'une seule version des données, pas d'anomalies de mise à jour ou de maintenance ; les mêmes données sont servies pour OLTP en tant que lignes et pour OLAP en tant que colonnes.
La seule chose que nous n'avons pas faite, c'est de commencer un nouveau projet et de déclarer la 6NF pure dès le départ. C'est ce que j'ai prévu pour la suite.
Qu'est-ce que la sixième forme normale ?
En supposant que vous ayez une idée de la normalisation (je ne vais pas ne pas la définir ici), les définitions non académiques pertinentes pour ce sujet sont les suivantes. Notez qu'elle s'applique au niveau de la table, donc vous pouvez avoir un mélange de tables 5NF et 6NF dans la même base de données :
-
Cinquième forme normale : toutes les dépendances fonctionnelles résolues dans la base de données
- en plus de 4NF/BCNF
- chaque colonne non-PK est 1::1 avec son PK
- et à aucun autre PK
- Aucune anomalie de mise à jour
.
-
Sixième forme normale : est la FN irréductible, le point auquel les données ne peuvent plus être réduites ou normalisées (il n'y aura pas de 7NF).
- en plus de 5NF
- la ligne est constituée d'une clé primaire et, au maximum, d'une colonne sans clé.
- élimine le problème de la nullité
À quoi ressemble le 6NF ?
Les modèles de données appartiennent aux clients, et notre propriété intellectuelle n'est pas disponible pour une publication gratuite. Mais je suis présent sur ce site web et je fournis des réponses spécifiques aux questions. Vous avez besoin d'un exemple concret, je vais donc publier le modèle de données d'un de nos services publics internes.
Celui-ci est destiné à la collecte de données de surveillance de serveurs (serveur de base de données et système d'exploitation de classe entreprise) pour n'importe quel nombre de clients, pour n'importe quelle période. Nous utilisons ces données pour analyser les problèmes de performance à distance et pour vérifier les réglages de performance que nous effectuons. La structure n'a pas changé depuis plus de dix ans (ajouts, sans modification des structures existantes), elle est typique de la 5NF spécialisée qui, plusieurs années plus tard, a été identifiée comme 6NF. Permet de pivoter complètement, de dessiner n'importe quel graphique ou diagramme, sur n'importe quelle dimension (22 pivots sont fournis, mais ce n'est pas une limite), de découper, de mélanger et d'assortir. Remarquez qu'ils sont tous Dimensions.
Les données de surveillance, les métriques ou les vecteurs peuvent changer (la version du serveur change ; nous voulons récupérer quelque chose de plus) sans affecter le modèle (vous vous souvenez peut-être que dans un autre article, j'ai déclaré que l'EAV est le fils bâtard de la 6NF ; eh bien, il s'agit de la 6NF complète, le père non dilué, et elle fournit donc toutes les caractéristiques de l'EAV, sans sacrifier les normes, l'intégrité ou la puissance relationnelle) ; vous ajoutez simplement des lignes.
Modèle de données des statistiques du moniteur . (trop grand pour être mis en ligne ; certains navigateurs ne peuvent pas le charger en ligne ; cliquez sur le lien)
Cela me permet de produire ces Des graphiques comme celui-ci six frappes après avoir reçu un fichier de statistiques de surveillance brut du client. Remarquez le mélange des genres ; le système d'exploitation et le serveur sur le même graphique ; une variété de points pivots. (Utilisé avec permission.)
Les lecteurs qui ne sont pas familiers avec la Norme de modélisation des bases de données relationnelles peuvent trouver que la Notation IDEF1X utile.
Entrepôt de données 6NF
Cela a été récemment validé par Modélisation de l'ancrage La société présente maintenant 6NF comme le modèle OLAP de "nouvelle génération" pour les entrepôts de données. (Ils ne fournissent pas l'OLTP et l'OLAP à partir de la seule version des données, qui est la nôtre).
Expérience en entrepôt de données (uniquement)
Mon expérience des entrepôts de données uniquement (et non des bases de données OLTP-OLAP 6NF susmentionnées) a consisté en plusieurs missions importantes, par opposition à des projets de mise en œuvre complète. Les résultats ont été, sans surprise :
-
Conformément à la science, les structures normalisées sont beaucoup plus rapides, plus faciles à maintenir et nécessitent moins de synchronisation des données. Inmon, pas Kimball.
-
En accord avec la magie, après que j'ai normalisé un tas de tableaux et amélioré substantiellement les performances en appliquant les lois de la physique, les seules personnes surprises sont les magiciens avec leurs mantras.
Les personnes à l'esprit scientifique ne font pas cela ; elles ne croient pas aux balles d'argent et à la magie, et ne s'y fient pas ; elles utilisent la science et travaillent dur pour résoudre leurs problèmes.
Justification valide de l'entrepôt de données
C'est pourquoi j'ai déclaré dans d'autres posts, que la seule valide La justification d'une plateforme d'entrepôt de données séparée, du matériel, de l'ETL, de la maintenance, etc., se trouve dans le cas où il existe de nombreuses bases de données ou "bases de données", toutes fusionnées dans un entrepôt central, pour le reporting et l'OLAP.
Kimball
Un mot sur Kimball est nécessaire, car il est le principal partisan de la "dé-normalisation pour la performance" dans les entrepôts de données. Selon mes définitions ci-dessus, il fait partie de ces personnes qui ont de toute évidence n'ont jamais été normalisés dans leur vie ; son point de départ était non normalisé (camouflé en "dé-normalisé") et il l'a simplement mis en œuvre dans un modèle Dimension-Fact.
-
Bien sûr, pour obtenir une quelconque performance, il a dû "dé-normaliser" encore plus, et créer d'autres doublons, et justifier tout cela.
-
Il est donc vrai, d'une manière schizophrénique, que la "dé-normalisation" des structures non normalisées, en faisant des copies plus spécialisées, "améliore les performances de lecture". Ce n'est pas vrai lorsque l'ensemble est pris en compte ; ce n'est vrai qu'à l'intérieur de ce petit asile, pas à l'extérieur.
-
De même, il est vrai, à leur manière, que lorsque toutes les "tables" sont des monstres, les "jointures sont coûteuses" et doivent être évitées. Ils n'ont jamais eu l'expérience de la jointure de tables et d'ensembles plus petits, et ne peuvent donc pas croire le fait scientifique que des tables plus nombreuses et plus petites sont plus rapides.
-
ils ont une expérience qui créer dupliquer les "tables" est plus rapide, donc ils ne peuvent pas croire que en éliminant duplicata est encore plus rapide que cela.
-
ses Dimensions sont ajouté aux données non normalisées. Les données ne sont pas normalisées, donc aucune dimension n'est exposée. Alors que dans un modèle normalisé, les dimensions sont déjà exposées, en tant que partie intégrante des données, aucune dimension n'est exposée. ajout est nécessaire.
-
ce chemin bien pavé de Kimball mène à la falaise, où plus de lemmings tombent vers leur mort, plus vite. Les lemmings sont des animaux de troupeau, tant qu'ils marchent ensemble sur le chemin, et meurent ensemble, ils meurent heureux. Les lemmings ne cherchent pas d'autres chemins.
Ce ne sont que des histoires, des parties d'une même mythologie qui se côtoient et se soutiennent mutuellement.
Votre mission
Si vous choisissez de l'accepter. Je vous demande de penser par vous-même, et de cesser d'entretenir toute pensée qui contredit la science et les lois de la physique. Peu importe qu'elles soient communes, mystiques ou mythologiques. Cherchez des preuves de tout ce que vous croyez avant de vous y fier. Soyez scientifique, vérifiez les nouvelles croyances par vous-même. Répéter le mantra "dé-normalisé pour la performance" ne rendra pas votre base de données plus rapide, cela vous fera juste vous sentir mieux. Comme le gros gamin assis sur la touche qui se dit qu'il peut courir plus vite que tous les autres enfants de la course.
- Sur cette base, même le concept "normaliser pour OLTP" mais faire le contraire, "dé-normaliser pour OLAP" est une contradiction. Comment les lois de la physique peuvent-elles fonctionner comme indiqué sur un ordinateur, mais fonctionner en sens inverse sur un autre ordinateur ? C'est à n'y rien comprendre. Il n'est tout simplement pas possible qu'elles fonctionnent de la même manière sur tous les ordinateurs.
Des questions ?
3 votes
OLTP : normaliser, normaliser, normaliser...
6 votes
Il serait bien que les participants ajoutent (divulguent) le nombre d'implémentations réelles (sans projets scientifiques) d'entrepôts de données en 6NF qu'ils ont vues ou auxquelles ils ont participé. Une sorte de pool rapide. Moi = 0.
0 votes
@vgv8, ouf - vous avez pris la question initiale, qui est polarisée, puis l'avez affinée et modifiée avec les mises à jour ; il n'y a rien de mal à séparer "Quelles sont les sources auxquelles je peux me référer pour soutenir (afin de convaincre mes parties prenantes) que les bases de données OLAP/DataWareHousing devraient être normalisées ?" et "Qu'est-ce qui ne va pas avec l'approche traditionnelle de dénormalisation/la conception du paradigme des bases de données OLAP (en dessous de 3NF) ?". Bien que les sujets soient liés, il est beaucoup plus facile d'obtenir de bonnes réponses à des questions plus spécifiques.
0 votes
Le SGBDR est une chose, l'OLAP en est une autre. Le SGBDR doit être normalisé, l'OLAP n'est pas soumis à ces règles. Cependant, je n'aime pas les vues extrêmes de celui qui se fait appeler PerformanceDBA. Je pense que c'est un extrémiste qui va au-delà du bon sens et qui rend les choses exagérément compliquées sans bénéfice supplémentaire. (Je parle de ses théories anti "nulls").
2 votes
@iDevlop. 1) quelles sont vos qualifications techniques, et quelle est votre expérience en matière de production de bases de données à haute performance ? 2) Rejetez-vous toujours une personne entière en raison d'un désaccord avec un élément ? 3) Veuillez identifier quelle partie est "exagérément compliquée" pour vous, afin que je puisse souligner la valeur de cet élément. 4) Il est évident que vous n'avez pas lu The Null Problem et que vous ne savez donc pas que ce n'est pas ma théorie, ni quels sont les problèmes.
1 votes
@DamirSudarevic. Livraison d'un projet complet (à l'exclusion des missions de P&T, etc.) OLTP+quelques OLAP= 20. OLTP+OLAP complet = 4. OLAP = 2.