2011-05-18 5 views
3

Je cherche la meilleure façon de stocker le stacktrace (obtenu par Thread.dumpStack()) et trace d'exception dans la base de données.Quelle est la meilleure façon de stocker stacktrace dans la base

Je développe une application qui fait la performance des applications. Il trace les appels de méthode (avec la durée), capture les erreurs (qui résultent en une trace d'exception) & génère une trace de pile pour des exécutions lentes.

L'environnement est Java + MySQL 5.0

Actuellement, l'info trace d'une trace de pile demande web & sont stockés dans un fichier (JSON) et les métadonnées sont stockées dans la table de base de données.

Pour des rapports & fin de réplication, je pense à les stocker dans la base de données. En moyenne, la taille de l'information de trace complète est de 40 kb. Est-il prudent de les stocker dans la base de données ou de le conserver dans le système de fichiers et de passer à nosql.

Déménagement à NoSQL, je peux résoudre la réplication, mais encore la déclaration sera une question difficile.

+0

Pour ajouter plus à la façon actuelle, il est en cours de traitement, lorsque les données JSON sont stockées sous forme de fichier, je pré compiler les données dans différents formats en fonction de mes besoins. Oui, cela entraîne des doublons de données mais m'aide lorsque les utilisateurs demandent ces données. Une chose de plus à considérer, je devrais être capable d'accéder à ces données en temps constant quand je meove à la base de données. – ramanr

+0

Des pensées sur cette question? – ramanr

Répondre

1

Pourquoi ne pas stocker les informations supplémentaires nécessaires pour les rapports dans le cadre des « métadonnées »? Il n'y a peut-être rien de mal à stocker la trace de pile complète dans un fichier et à stocker une référence à ce fichier dans la base de données en fonction des besoins de l'application. J'étudierais ce que vous devez rapporter et évaluer ces éléments pour inclusion dans la base de données. Par exemple, signalez-vous la cause première de l'exception? Pensez à pré-traiter les données à ce dont vous avez besoin pour les rapports. Si vous enregistrez déjà la totalité de la trace de la pile séparément, vous ne perdrez aucune information si vous avez besoin de signaler quelque chose dans le futur.

Cette question a été posée il y a longtemps donc je suppose que vous avez déjà pris une décision mais j'aurais hésité à passer à une architecture nosql sans avoir une raison claire de le faire. Les bases de données relationnelles ont toujours leur place dans certains scénarios et la plupart d'entre elles ont un mécanisme efficace pour stocker de grandes quantités de texte (par exemple une trace de pile).

Questions connexes