2012-05-25 3 views
0

Mes webservices sont aussi structurées comme suit:l'enregistrement séquentiel rapide pour webservices

  1. Recevoir la demande
  2. Parse et valider l'entrée
  3. Do webservice réelle
  4. Valider la sortie

Je suis principalement en utilisant la journalisation à des fins de débogage, si quelque chose ne va pas, je veux savoir quelle était la demande afin que je puisse espérer la reproduire (c'est à dire. envoyer exactement la même demande).

Actuellement, je me connecte à une table de base de données MySQL. Après 1. un enregistrement est créé, qui est mis à jour avec plus d'informations après 2. et 3. et nettoyé après 4. (Les journaux des demandes réussies sont élagués). Je veux que la diagraphie soit aussi rapide et indolore que possible. Toute accélération ici améliorera considérablement la performance globale (aller-retour de chaque demande). Je pensais utiliser INSERT DELAYED mais je ne peux pas faire cela parce que j'ai besoin du LAST_INSERT_ID pour mettre à jour et ensuite supprimer l'enregistrement de journal, ou au moins enregistrer le statut de la demande (ie succès ou erreur) donc je sais quand tailler.

Je pourrais générer un identifiant unique moi-même (ou au moins un identifiant qui est "assez unique") mais même alors je ne connaîtrai pas l'ordre des instructions DELAYED et je pourrais finir par essayer de mettre à jour ou supprimer un enregistrement n'existe pas encore. Et puisque DELAYED supprime également la possibilité d'utiliser NUM_AFFECTED_ROWS Je ne peux pas vérifier si les requêtes sont effectuées.

Des suggestions?

+2

Normalement, les personnes se connectent à un fichier txt. Consignez tout ce qui suit avec un guide commun pour chaque demande afin que vous puissiez post-traiter le fichier plus tard. La connexion directe à une base de données est excessive et lente. – epascarello

+1

La journalisation dans une base de données n'est pas beaucoup plus lente que la journalisation dans un fichier, j'imagine, car les deux feront des opérations d'E/S. Je ne vois pas comment la journalisation dans une base de données est excessive. Cependant, je * ne * vois pas non plus pourquoi il est nécessaire de muter le disque trois fois. –

Répondre

0

J'ai pensé que je peux probablement faire un REPLACE DELAYED et faire l'élagage une autre fois. (avec un DELETE DELAYED).

0

Lorsque vous dites élagué im supposer si c'était un succès votre suppression de l'enregistrement? Si c'est le cas, je pense qu'il serait mieux pour vous si un objet Java stockait les informations au lieu de la base de données au fur et à mesure que le processus se déroulait. Si une exception se produisait, vous consignez les informations dans la base de données. Si vous vouliez aller plus loin, j'ai fait quelque chose de similaire, j'ai un service qui met en file d'attente la journalisation des données d'audit et insère l'information à un rythme régulier, donc si les services sont martelés ne colmatent pas la base de données avec des instructions de journalisation, mais si vos seules erreurs de journalisation qui seraient probablement exagérées.

+0

J'utilise PHP, je ne vois pas comment je peux facilement mettre en place la mise en file d'attente. – Halcyon