2009-04-12 7 views
0

Je dois créer une interface de création de rapports pour une application sur laquelle je travaille et qui nécessite que les administrateurs visualisent d'énormes quantités de données collectées au fil du temps.Méthode la plus efficace pour générer des rapports dans MySQL sur des jeux de données volumineux

Pensez quelque chose de similaire à Google Analytics, etc.

La plupart des données qui doit être visualisé se trouve dans une table de base qui contient un datetime, « action » varchar et d'autres données filtrables - actuellement la table contient 1,5M rangées, et il se développe tous les jours.

En ce moment je fais un simple sélection avec les filtres appliqués groupés par jour et ça marche plutôt bien, mais je me demandais s'il y avait une façon plus intelligente d'extraire de telles données.

Vive

+0

seulement 1,5 million de lignes? Ne vous inquiétez pas encore pour "l'optimisation" ... vous devriez vous sentir bien pour une longue période. – kquinn

Répondre

2

1) Deux niveaux - données brutes et données résumées. Pour les données brutes, les index ne seront probablement pas utiles. Vous effectuez des agrégations, dans la plupart des cas, cela nécessite une analyse de table complète. Si ce n'est pas le cas, réorganisez-le, ce sera plus rapide.

2) Calculez vos agrégats, générez-les automatiquement et exécutez les rapports à partir des données agrégées. Ne indexez ces tableaux récapitulatifs!

3) Évitez les jointures. Agréger, matérialiser les résultats des groupes, puis joindre les résultats agrégés.

4) Partition. Conservez les données d'un jour (ou de toute autre précision) séparément des données d'un autre jour. Créez des scripts de création de table automatisés si nécessaire (adultes - ou lourds en fonction de votre point de vue - les bases de données vous donnent quelque chose appelé «partitionnement» pour le faire d'une manière plus saine).

5) Lire sur "entrepôts de données" http://en.wikipedia.org/wiki/Data_warehouse

1

Vous pouvez commencer à faire deux choses:

  1. Assurez-vous que vous ajoutez les index sur tous les filtres de sorte qu'ils ne le feront pas toutes les analyses de table.

  2. Vérifiez à l'aide de l'analyseur de plan de requête pour vous assurer qu'il n'y a aucun endroit nécessitant une optimisation.

  3. Étant donné que vous avez un horodatage dans votre table, le partitionnement vous aidera définitivement dans le futur.

Bonne chance.

0

Vous pouvez vous attendre à un certain nombre de requêtes courantes, probablement un petit nombre comparé au nombre de combinaisons uniques de filtres pouvant être générées. Vous pouvez l'utiliser pour "compresser" les données dans des tables compagnons et exécuter ce processus de collecte la nuit.

Questions connexes