0 votes

Optimisation du serveur SQL - comment stocker des données répétées ?

Mon projet comporte un "moniteur d'activité" qui surveille l'activité d'un utilisateur.

Actuellement, la façon dont cela fonctionne est la suivante : j'ai une méthode appelée LogActivity et il soumet les données à la base de données. J'appelle cette méthode lorsqu'un utilisateur démarre une nouvelle session, lorsqu'il s'enregistre, lorsqu'il met à jour son profil, etc. En fait, il y a 3 ou 4 actions différentes qui sont enregistrées, donc je les stocke comme suit

ID | UserID | Activité | Date

Le champ d'activité contient toujours les mêmes données.

  1. nouveau compte créé
  2. nouvelle session commencée
  3. compte mis à jour
  4. événement posté
  5. événement voté
  6. commentaire à gauche
  7. commentaire voté

Puisque cela pourrait prendre beaucoup de données, serait-il préférable d'avoir une table séparée avec cette information et de la joindre à la table ? Si oui, dois-je simplement entrer manuellement l'ID de la nouvelle table dans l'"ActivityID" de la table existante ?

Quelle est la meilleure façon d'atteindre le résultat souhaité sans remplir la base de données avec du contenu redondant ?

1voto

Mitch Wheat Points 169614

Le moyen habituel d'éviter la répétition des données est la normalisation.

MAIS, il est souvent nécessaire que la journalisation soit rapide, et l'ajout de clés étrangères à votre table de journalisation ralentira les insertions.

L'espace disque est bon marché. Je vous suggère d'effectuer un calcul à l'envers pour déterminer l'espace que vous utiliseriez par mois/année. Ce n'est peut-être pas aussi important que vous le pensez.

Vous pourriez peut-être utiliser un acronyme de 3 ( ?) caractères pour l'activité, afin de réduire l'espace utilisé.

1voto

SHC Points 247

Il semble qu'il soit plus logique d'utiliser le type ENUM pour cela et d'utiliser l'ENUM comme activité, ce qui permet d'économiser de l'espace puisque cela stocke essentiellement un index dans la table (voir : http://dev.mysql.com/doc/refman/5.0/en/enum.html ).

Stockez-vous actuellement ces activités sous forme de chaînes de caractères dans la base de données ? Avec les ENUM, vous avez également l'avantage de pouvoir ajouter assez facilement différentes activités de journalisation à l'ensemble ENUM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X