2010-04-09 4 views
8

Je travaille sur un projet impliquant une grande quantité de données provenant du délicieux site Web. Les données disponibles sont "Date, UserId, Url, Tags" (pour chaque signet).Conception de base de données pour une très grande quantité de données

J'ai normalisé ma base de données à un 3NF, et en raison de la nature des requêtes que nous voulions utiliser en combinaison, je suis descendu à 6 tables ... La conception semble bien, cependant, maintenant qu'une grande quantité de les données sont dans la base de données, la plupart des requêtes doivent joindre au moins 2 tables pour obtenir la réponse, parfois 3 ou 4. Au début, nous n'avions aucun problème de performance, car pour les tests, nous n'avions pas ajouté trop données à la base de données. Maintenant que nous avons beaucoup de données, le simple fait de rejoindre des tables extrêmement volumineuses prend beaucoup de temps et pour notre projet, qui doit être en temps réel, c'est un désastre.

Je me demandais comment les grandes entreprises résolvent ces problèmes. On dirait que la normalisation des tables ne fait qu'ajouter de la complexité, mais comment la grande entreprise gère-t-elle de grandes quantités de données dans ses bases de données, n'utilise-t-elle pas la normalisation?

Merci.

Répondre

13

Depuis que vous avez demandé comment les grandes entreprises (en général) approches ceci:

Ils ont généralement un dba (administrateur de base de données) qui vit et respire la base de données de l'entreprise utilise. Cela signifie qu'ils ont des personnes qui savent tout sur la façon de concevoir les tables de manière optimale, profiler et régler les requêtes/index/OS/serveur pour savoir quelle révision du firmware du contrôleur RAID peut causer des problèmes pour la base de données. Vous ne parlez pas beaucoup du genre d'accord que vous avez fait, par exemple.

  • Utilisez-vous des tables MyISAM ou InnoDB? Leurs performances (et non leurs caractéristiques) sont radicalement différentes pour différentes charges de travail.
  • Les tables sont-elles correctement indexées en fonction des requêtes que vous exécutez? Exécuter EXPLAIN sur toutes vos requêtes - ce qui vous aidera à identifier les clés qui pourraient être ajoutées/supprimées, que les clés appropriées soient sélectionnées, comparer les requêtes (SQL vous laisse beaucoup de chemin pour accomplir les mêmes choses)
  • vous avez réglé le cache de requête? Pour certaines charges de travail, le cache de requêtes (activé par défaut) peut provoquer un ralentissement considérable.
  • Quelle est la quantité de mémoire de votre boîte, et MySQL est-il réglé pour en tirer parti?
  • Utilisez-vous une configuration de système de fichiers et de raid orientée vers la base de données?
  • Parfois, une petite dénormalisation est nécessaire.
  • Différents produits de base de données auront des charastéristiques différentes, MySQL pourrait être incroyablement rapide pour certains worlkoads, et lent pour d'autres.
+3

Merci pour votre réponse. Honnêtement, je ne pensais pas aux choses que vous avez mentionnées ici. Maintenant, j'ai réalisé que j'ai beaucoup ignoré la conception de la base de données. La base de données utilise MyISAM. Je vais lire sur les choses que vous avez mentionnées. Merci beaucoup – Hossein

Questions connexes