Meilleures pratiques-journalisation des événements (général) et des changements (base de données)

besoin d'aide avec journalisation de toutes les activités sur un site ainsi que les changements de base de données.

exigences:

  • doit être dans la base de données
  • devrait être facilement consultable par initiateur (nom d'utilisateur / id de session), événement (type d'activité) et paramètres d'événement

je pense à une conception de base de données, mais il implique beaucoup de tableaux (un par événement) donc je peux me connecter chacun des paramètres d'un événement dans une séparez le champ ou il implique une table avec des champs génériques (7 int numériques et 7 types de texte) et enregistrez tout dans une table avec le champ de type d'événement déterminant quel paramètre a été écrit où (et en espérant que je n'ai pas besoin de plus de 7 champs d'un certain type, ou 8 ou 9 ou quel que soit le nombre que je choisis)...

[username] login failed @datetime
[username] login successful @datetime
[username] changed password @datetime, estimated security of password [low/ok/high/perfect]  @datetime
[username] clicked result [result number] [result id] after searching for [search string] and got [number of results] @datetime
[username] clicked result [result number] [result id] after searching for [search string] and got [number of results]  @datetime
[username] changed profile name from [old name] to [new name]  @datetime
[username] verified name with  [credit card type] credit card  @datetime
datbase table [table name] purged of old entries @datetime via automated process

etc...

tout le monde a traité ce, avant? meilleur pratiques/liens que vous pouvez partager?

Je l'ai vu fait avec la solution générique mentionnée ci-dessus, mais d'une certaine manière cela va à l'encontre de ce que j'ai appris de la conception de la base de données, mais comme vous pouvez voir le nombre simple d'événements qui doivent être trackable (chaque utilisateur sera en mesure de voir cette information) me donne des maux de tête, mais j'aime la solution un événement par table plus que le générique.

des idées?

edit: , y a-t-il peut-être une liste officielle de tels événements (probables) quelque part?

thnx

stack overflow dit: la question posée semble subjective et est susceptible d'être fermée.

ma réponse: probablement est subjective, mais elle est directement liée à mon problème avec la conception d'une base de données / écriture de mon code, donc je serais heureux de toute aide. j'ai aussi essayé de réduire les idées à 2, donc j'espère que l'une d'entre elles prévaudra, à moins qu'il y ait déjà une solution établie pour ce genre de choses.

25
demandé sur Shawn Xie 2010-05-09 16:23:01
la source

2 ответов

  1. journalisation les changements dans la base de données en ce qui concerne les insertions/suppressions/mises à jour, en ce qui concerne les meilleures pratiques, sont généralement effectués par un déclencheur sur la table principale écrivant des entrées dans une table de vérification (une table de vérification par table réelle, avec des colonnes identiques n + Quand/quoi/qui).

  2. La liste des événements comme une liste générique n'existe pas. C'est vraiment une fonction de votre application/cadre/environnement/besoins d'affaires. En ce qui concerne les meilleures pratiques, il est bon de décider si votre liste de type d'événement est 100% plate, une hiérarchie à 2 niveaux (type/sous-type - c'est généralement la meilleure approche) ou une hiérarchie à N niveaux (beaucoup plus difficile/moins efficace à mettre en œuvre, mais incroyablement flexible et offre de très belles possibilités pour la bonne gestion d'événement d'entreprise-j'avais participé à la mise en œuvre de tous les 3 régimes, donc je parle de la pratique BTW).

  3. vous n'avez pas besoin de 7 champs int génériques dans 1 table pour stocker les détails de l'événement. À la place, optez pour tag-value-pair tableau:

    EVENT_TYPES: (event_type, event_subtype, description, subtype_attr1, ...)
    EVENTS: (event_id, event_type, event_subtype, timestamp, attrib1, ...)
    EVENT_DETAILS: (event_id, tag, int_value, varchar_value, float_value).
    

    EVENT_DETAILS peut être normalisé en EVENT_DETAILS_INT, EVENT_DETAILS_VARCHAR, EVENT_DETAILS_FLOAT, ... si vous le souhaitez mais pas vraiment nécessaire.

    attribu1-atttribN dans la table EVENTS sont des attributs génériques qui s'appliquent à tous / la plupart des événements, tels que userid, hostname, pid, etc...

    EVENT_TYPES est une table qui décrit différents types/sous-types d'événements.

    selon la façon dont vous avez décidé le point #2, ce tableau peut stocker la liste plate de types, une liste de mappages de type/sous-type comme dans mon exemple, ou une hiérarchie de type parent/Type enfant (vous aurez besoin de 2 tables pour cela, une pour la cartographie parent/enfant des types et une pour les attributs de type de chaque type).

    vous pouvez vouloir avoir une autre table auxiliaire EVENT_TYPE_ATTRIBUTES mappant les types d'événements aux tags valides pour EVENT_DETAILS.


exemple:

événement: [nom d'utilisateur] résultat cliqué [numéro du résultat] [nom du résultat] après avoir cherché [chaîne de recherche] et obtenu [nombre de résultats] @datetime

il en résulterait des données similaires à celle-ci (Pas de syntaxe SQL actuelle, sue me :):

EVENT_TYPES: (USER_ACTION, USER_CLICK, "User clicked something")
EVENTS: (12345, "USER_ACTION","USER_CLICK", @datetime, "[username]", 
         "app_name", "pid"...) 
EVENT_DETAILS: several rows:
 (12345, "result_number", 33, NULL, NULL) // Or go into EVENT_DETAILS_INT without NULLs? 
 (12345, "result_id", 919292, NULL, NULL)  
 (12345, "search_string", NULL, "how do I log events in DB", NULL)
22
répondu DVK 2010-05-09 17:17:56
la source

avez-vous eu un coup d'oeil à MongoDB encore? Il est très rapide sur les inserts car il n'a pas quelques fonctionnalités que les bases de données de relation comme MySQL ont, et bien sûr, vous pouvez rechercher sur tous les champs que vous avez dans vos données. En fait, la plupart des entreprises commencent à l'utiliser pour la journalisation et l'analyse d'abord avant de traiter des applications plus complexes avec elle.

-1
répondu Thomas R. Koll 2010-05-09 17:00:18
la source

Autres questions sur