Connectez-vous au fichier ou à la table de base de données?

12

Je développe une application Web qui utilise MS SQL pour diverses données: y compris les utilisateurs, les comptes d'utilisateurs, les licences d'utilisateurs, les prix des licences, les factures.

Je dois enregistrer l'utilisation en temps réel du système par les utilisateurs et l'utiliser pour la facturation mensuelle: par exemple, enregistrer chaque fois qu'un utilisateur obtient une page / URL spécifique et facturer les utilisateurs à la fin du mois en fonction du nombre de pages récupérées.

  • Dois-je écrire ces événements de journal dans une table de ma base de données MS SQL?

  • Dois-je écrire ces événements de journal dans un fichier journal non-SQL uniquement ajouté?

  • Dois-je écrire ces événements de journal dans un fichier journal différent pour chaque utilisateur?

Il ne s'agit pas d'un site Web particulièrement volumineux: par exemple, un maximum de 10 000 utilisateurs effectuant chacun en moyenne 5 événements enregistrables / jour => 50 000 événements / jour = 30 événements / minute = 18 000 000 événements / an.

Je demande parce que l'une ou l'autre option semble viable et je ne vois pas si l'une a un avantage clair.

Les données associées à un événement facturable sont simples, par exemple:

  • ID utilisateur (relation de clé étrangère avec la table Users dans SQL)
  • Date et l'heure
  • URL de la page facturable

Ma propre réponse à cette question est la suivante:

  • Quelques avantages d'écrire le journal dans une table de base de données:

    • Intégrité relationnelle: par exemple, les événements consignés sont associés à des ID utilisateur valides (en définissant l'ID utilisateur comme clé étrangère entre les tables)
    • Facile à lire pour la facturation: par exemple SELECT COUNT GROUP BYpour obtenir un compte du nombre d'événements de journal par utilisateur
  • Quelques avantages de l'écriture dans un fichier journal:

    • Performances plus faciles: SQL est utilisé moins souvent, par exemple uniquement pour les événements de connexion des utilisateurs, et surtout uniquement pour la lecture
    • Gestion plus facile: archivage plus facile des anciennes données, par exemple à la fin de l'année, en déplaçant les anciens fichiers journaux au lieu de les supprimer / archiver de la base de données

Veuillez me faire savoir si ma réponse est fausse; ou exagère l'importance de quelque chose; ou a oublié une considération importante.

Et / ou s'il vous plaît laissez-moi savoir quelle est votre réponse, si elle est différente de la mienne.

ChrisW
la source
3
Vous devez séparer les informations utilisées pour prendre des décisions commerciales des informations de journalisation générales. Stockez tout ce qui sera utilisé ultérieurement par votre application dans la base de données, les autres éléments dans les fichiers journaux.
tom
1
Si vous utilisez un package bien connu comme log4net - et ce serait probablement une bonne idée plutôt que de rouler le vôtre - il devrait juste être question de retourner la configuration pour faire l'un ou l'autre. @tom - la séparation est agréable, mais pourquoi ne pas simplement avoir deux bases de données, une pour les données en direct et une pour l'archivage des journaux, etc.?
Julia Hayward
2
L'OP dit que c'est pour la facturation mensuelle - alors je m'attendais à ce que l'application de la logique de facturation à une base de données soit beaucoup plus facile que des fichiers plats?
Julia Hayward
1
Vous avez utilisé le terme "SQL" lorsque vous vouliez dire "base de données". J'ai fait quelques corrections. SQL est un langage que vous utilisez pour lire et écrire dans des bases de données. MS SQL Server est le nom d'un SGBDR. "SQL" ne signifie pas à lui seul "base de données MS SQL Server".
Tulains Córdova
1
@gnat Je ne pense pas qu'il s'agisse d'un doublon: l'autre concernait les erreurs de journalisation alors qu'il s'agissait de l'utilisation de la journalisation pour la facturation (et dans ce cas, la réponse votée et acceptée était d'utiliser un SGBDR).
ChrisW

Réponses:

13

Étant donné que vous utilisez ces informations à des fins de facturation, je ne vois pas pourquoi vous ne les voudriez pas dans la base de données où elles peuvent être facilement interrogées, agrégées, signalées et jointes à d'autres données.

Je pense également qu'il est beaucoup plus facile de maintenir une table de base de données unique contenant les informations de journal qu'un tas de fichiers journaux distincts. Il en va de même pour votre préoccupation concernant la charge sur le serveur - il existe de bien meilleures façons de gérer cela que de recourir à la conservation des données dans des fichiers plats.

Soit dit en passant, votre troisième option consiste à faire les deux. Utilisez la base de données pour la plupart des besoins, mais conservez le fichier journal à des fins d'audit.

GrandmasterB
la source
3
Un autre avantage de l'utilisation d'une base de données est l'utilisation de déclencheurs pour une certaine journalisation. Aucun code supplémentaire ne serait nécessaire. Si des données sont insérées dans le tableau A, insérez le message de journal X.
Greg Burghardt