8
votes

Normaliser ou dénormaliser dans des sites Web élevés de trafic

Quelles sont les meilleures pratiques pour la conception et la normalisation de la base de données pour les sites Web de trafic élevés tels que Stackoverflow?

devrait-on utiliser une base de données normalisée pour la tenue d'enregistrement ou une technique normalisée ou une combinaison des deux?

est-il raisonnable de concevoir une base de données normalisée comme base de données principale pour la conservation des enregistrements pour réduire la redondance et maintenir en même temps une autre forme dénormalisée de la base de données pour une recherche rapide?

ou

Si la base de données principale doit être dénormalisée mais avec des vues normalisées au niveau de l'application pour des opérations de base de données rapides?

ou une autre approche?


0 commentaires

6 Réponses :


5
votes

Dénormalisation de la DB afin de réduire le nombre de jointures nécessaires aux requêtes intenses est l'une des différentes manières de la mise à l'échelle. Avoir à faire moins de jointures signifie une levée moins élevée par le DB, et le disque est bon marché.

Cela dit, pour des quantités ridicules de trafic de bonne performance relationnelle de la DB relationnelle peut être difficile à réaliser. C'est pourquoi de nombreux sites plus gros utilisent des magasins de valeurs de clé (par exemple Memcached) et d'autres mécanismes de mise en cache.

L'art de la planification de la capacité est plutôt bon .


2 commentaires

L'espace disque est bon marché, mais les performances du disque ne sont certainement pas certainement. Avec une conception dénormalisée, vous finissez souvent par insertion ou mettant à jour un plus grand volume de données sur des tables plus larges, ce qui entraîne souvent des problèmes de performance.


Certes, il y a des échanges avec chaque décision. Ce qui est performant dépend vraiment de la structure de vos données.



1
votes

Premier: définissez par vous-même quels sont les moyens de trafic de hauteur:

  • 50.000 pages-Vues par jour?
  • 500.000 pages-Vues par jour?
  • 5.000.000 Page-Vues par jour?
  • plus?

    Calculez-le à la page de pic-pic probable par minute et par secondes. Après cela, réfléchissez aux données que vous souhaitez interroger par page-vue. Les données sont-elles cachables? Quelle est la dynamique des données, quelle est la taille des données?

    Analyse de vos besoins individuels, programmez certains codes, effectuez des tests de charge, optimiser. Dans la plupart des cas, avant de pouvoir augmenter les serveurs de base de données, vous devez accumuler les serveurs Web.

    La base de données relationnelle peut être, si entièrement optimisée, incroyablement rapide, lors de la jonction Tableaux!

    Une base de données relationnelle pourrait être frappée rarement lorsque de back-end, pour remplir un cache ou remplir certaines tables de données dénormalisées. Je ne ferais pas la dénormalisation de l'approche par défaut.

    (Vous avez mentionné la recherche, examinez par ex. Lucene ou quelque chose de similaire, si vous avez besoin de recherches en texte intégral.)

    La meilleure réponse la meilleure pratique est définitivement: cela dépend ;-)


0 commentaires

0
votes

Pour un projet sur lequel je travaille, nous sommes allés pour la voie de la table dénormalisée, car nous nous attendons à ce que nos principales tables d'avoir un ratio d'écrivies élevé (au lieu de tous les utilisateurs frappant les mêmes tables, nous avons dénormalisé et définir chaque "jeu utilisateur" pour utiliser un fragment particulier). Vous trouverez peut-être lire http: // HighScalability.com/ Pour des exemples de la manière dont les "grands sites" font face au volume - Overflow de pile a récemment été présenté.


0 commentaires

11
votes

Le succès de la jonction de la performance est fréquemment surestimé. Les produits de base de données comme Oracle sont construits pour rejoindre très efficacement. Les jointures sont souvent considérées comme les plus performantes lorsque le vrai coupable est un modèle de données médiocre ou une stratégie d'indexation médiocre. Les gens oublient également que les bases de données dénormalisées fonctionnent très mal lorsqu'il s'agit d'insérer ou de mettre à jour des données.

La principale chose à garder à l'esprit est le type d'application que vous construisez. La plupart des sites Web célèbres ne sont pas comme des applications d'entreprise régulières. C'est pourquoi Google, Facebook, etc. n'utilise pas de bases de données relationnelles. Il y a eu beaucoup de discussions sur ce sujet récemment, qui J'ai blogué à propos de .

Donc, si vous construisez un site Web qui concerne principalement la délivrance des charges de plis de contenu semi-structuré, vous ne souhaitez probablement pas utiliser une base de données relationnelle, dénormalisée ou autrement. Mais si vous construisez un site Web hautement transactionnel (tel qu'une banque en ligne), vous avez besoin d'une conception qui garantit la sécurité et l'intégrité des données, et se présente si bien. Cela signifie une base de données relationnelle sur au moins une troisième forme normale.


0 commentaires

0
votes

Neu-les compte si vous ne mettez pas la mise en cache correctement.


0 commentaires

1
votes

Vous pouvez écouter une discussion sur ce thème très sujet par les créateurs du débordement de pile sur Thier podcast à:
http://itc.conversationsnetwork.org/shows/detetail3993.html


0 commentaires