2008-08-30 8 views
5

Je souhaite conserver les journaux de certaines choses que les utilisateurs font dans mon application, dans certains cas, afin de pouvoir les annuler si nécessaire.Connexion à une application Web PHP

Est-il préférable de stocker ces journaux dans un fichier ou une base de données? Je suis complètement à une perte quant à ce que sont les avantages et les inconvénients, sauf que c'est une autre table à configurer.

Existe-t-il une troisième option (ou une quatrième option, etc.) dont je ne suis pas au courant et que je devrais étudier?

Répondre

5

Vous voudrez certainement utiliser une base de données pour un accès flexible à l'enregistrement et tirer parti de la capacité de la base de données à gérer l'accès simultané aux données. Si vous avez besoin de suivre les informations qui peuvent avoir besoin d'être annulées, l'avoir dans un format structuré est un avantage, tout comme avoir la possibilité de mettre à jour une ligne indiquant quand et par qui une transaction donnée a été annulée.

Vous ne souhaiterez probablement écrire dans un fichier que si vous rencontrez des problèmes de performances ou si vous avez des quantités de données très déstructurées ou trop volumineuses par enregistrement qui peuvent être stockées dans une base de données. Notez que, à moins que votre application ne comporte un très grand nombre de transactions, la vitesse de la base de données ne risque pas d'être un problème. Notez également que si vous travaillez avec un fichier, vous devrez gérer très soigneusement les accès simultanés (lecture/écriture/verrouillage), ce qui n'est probablement pas quelque chose que vous voulez traiter.

2

J'utiliserais une base de données simplement pour la maintenabilité - plusieurs éditions sur un fichier peuvent également entraîner des erreurs.

1

Je vais appuyer les deux suggestions ci-dessus et ajouter que le verrouillage de fichier sur un fichier plat peut entraîner des problèmes lorsqu'il y a beaucoup d'utilisateurs.

9

Il y a au moins une raison précise de stocker dans la base de données. Vous pouvez utiliser INSERT DELAYED dans MySQL (ou des constructions similaires dans d'autres bases de données), qui retourne immédiatement. Vous ne recevrez aucune donnée de retour de la base de données avec ces types de requêtes, et leur application ne sera pas garantie. En utilisant INSERT DELAYED, vous ne ralentirez pas trop votre application à cause de la journalisation. La base de données est libre d'écrire les INSERT sur le disque à tout moment, de sorte qu'il peut regrouper un ensemble d'inserts ensemble.

Vous devez faire attention à l'utilisation de la fonction d'horodatage intégrée de MySQL (comme CURRENT_TIMESTAMP ou CUR_DATE()), car ils seront appelés à chaque fois que la requête est réellement exécutée. Vous devez donc vous assurer que les données de temps sont générées dans votre langage de programmation, et non par la base de données. (Ce paragraphe pourrait être spécifique à MySQL)

+2

C'est nouveau pour moi. Très lisse –

+1

pas garanti? cela semble pas une si bonne idée. pourriez-vous expliquer cela? –

3

Je suis un grand fan de log4php. Il vous donne une interface standard pour les actions de journalisation. C'est basé sur log4j. La bibliothèque charge un fichier de configuration central, vous n'avez donc jamais besoin de changer votre code pour modifier la journalisation. Il offre également plusieurs cibles de journaux, comme les fichiers, syslog, bases de données, etc.

Questions connexes