2010-06-03 5 views
1

Actuellement, j'utilise mysql pour consigner tout le trafic provenant de tous les utilisateurs entrant dans un site Web que je gère. La base de données a atteint près de 11 millions de lignes par mois et les requêtes deviennent assez lentes. Existe-t-il un moyen plus efficace de consigner les informations sur les utilisateurs? Tout ce que nous stockons est leur demande, useragent, et leur ip, et en l'associant à un certain site web.Quel est le moyen le plus efficace de suivre tout le trafic utilisateur dans une base de données?

+0

Comment interrogez-vous cette table? (par exemple, résumez-vous toute la table?) En extrayant tous les enregistrements individuels pour un utilisateur? Restriction vos requêtes par exemple sur une période de temps? – nos

Répondre

4

Pourquoi ne pas essayer Google Analytics? Même si vous ne pensez pas que ce serait suffisant pour vous, je vous parie qu'il peut suivre 99% de ce que vous voulez être suivi.

2

La réponse dépend entièrement de ce que vous prévoyez d'extraire du côté de la requête. Cherchez-vous des informations agrégées, cherchez-vous toute l'histoire ou seulement une partie? Souvent, si vous devez regarder chaque ligne pour trouver ce dont vous avez besoin, le stockage dans les fichiers texte de base est le plus rapide.

+0

Je dois généralement tirer des hits uniques, ou parfois le trafic aura un numéro associé, et J'ai besoin de trouver la somme de tout le trafic au-dessus d'un certain nombre. (Désolé je suis intentionnellement vague sur la nature du site lol) – Brendan

+0

Si vous déterminez l'unicité via IP, assurez-vous que vous utilisez inet_aton et le stockage comme non signé int Puis indexez ce champ. – Gary

0

Quels sont les types de requêtes que vous souhaitez exécuter sur les données? Je suppose que la plupart de vos requêtes sont sur des données dans la fenêtre de temps actuelle ou récente. Je suggère d'utiliser le partitionnement basé sur le temps de la table. Cela rendra ces requêtes plus rapides car les requêtes ne toucheront que la partition contenant les données, ce qui réduit la recherche de disque. Egalement régulièrement purger les anciennes données et les mettre dans des tableaux récapitulatifs. Quelques liens utiles sont:

0

la façon la plus efficace est sans doute d'avoir apache (en supposant que c'est ce que le site est en cours d'exécution sur) il suffit d'utiliser le construit dans l'exploitation forestière au texte des journaux et configurez quelque chose comme AWStats. Cela supprime le besoin de consigner vous-même ces informations et devrait vous fournir les informations que vous recherchez - probablement toutes configurées dans les rapports existants. L'avantage de ceci sur quelque chose comme Google Analytics serait son suivi côté serveur - etc.

0

Peut-être en indiquant l'évidence mais avez-vous un bon index par rapport aux querys que vous faites?

0

1) Utilisez Piwik pour effectuer le suivi de type Google Analytique, tout en conservant le contrôle des données MySQL.

2) Si vous devez continuer à utiliser votre propre système, utilisez InnoDB Plugin pour prendre en charge les types de tables compressées. De plus, convertissez IP en entier non signé, convertissez à la fois l'agent utilisateur et la requête en tables de recherche int référencées par int qui sont compressées à l'aide de la compression Innodb ou du moteur d'archivage.

3) Ignorer le partitionnement et partitionner le DB par mois.

0

C'est ce que «Data Warehousing» est pour. Pensez à acheter un bon livre sur l'entreposage.

Collectez les données brutes dans un schéma "activité actuelle".

Régulièrement, déplacez-le dans un schéma en étoile "warehouse" (ou "datamart") qui est (a) séparé du schéma d'activité actuel et (b) optimisé pour les requêtes count/sum/group-by. Déplacer, BTW, signifie insérer dans le schéma d'entrepôt et supprimer du schéma d'activité actuel. Séparez votre traitement transactionnel en cours de votre requête/traitement analytique.

Questions connexes