2010-09-03 7 views
0

J'ai une base de données MySQL avec les prix des produits et maintenant je veux synchroniser une autre base de données avec ces valeurs, mais cette autre base de données ne se trouve pas sur mon serveur ...Appel d'un service Web de manière atomique?

Est-il possible de faire ces deux opérations (mettre à jour ma base de données et appeler le service web pour l'autre base de données à mettre à jour aussi) atomique? Je ne veux pas savoir un jour que la deuxième base de données était en panne quand le serveur a essayé d'appeler le service Web pour le mettre à jour, et donc, il n'a pas les mêmes valeurs que ma base de données actuelle. En passant, j'utilise PHP.

Merci beaucoup.

Répondre

1

Vos réponses à ces questions peuvent aider à réfléchir à la meilleure solution -

  • Est-ce le prix updation un processus en vrac? Je veux dire une fois par semaine ou quelque chose tous les prix de votre site sont édités et les changements en masse doivent être effectués sur l'autre serveur (où la deuxième base de données est hébergée)?
  • Ou est-ce que les prix individuels peuvent être modifiés et que le même changement doit soit prendre effet sur les deux ou pas du tout (au cas où le 2ème serveur était en panne)? Que voulez-vous faire au cas où le 2ème serveur était en panne, les changements de restauration sur le premier serveur?

Si le service Web répond en retour - que ce soit avec succès mis à jour les prix de ses produits les choses sont assez faciles. Voici une façon de faire apparaître atomique -

  • ont deux champs - price_backup et lock_item dans le tableau où tous les prix des articles sont stockés.
  • Avant de démarrer le processus de mise à jour, définissez lock_item = true, afin que l'élément ne puisse pas être acheté pendant cette période (pour éviter les incohérences).
  • Mettez à jour le champ de prix sur la première base de données en gardant le prix dans le champ price_backup, puis appelez le service Web pour mettre à jour et vérifier la réponse.
  • Si la réponse est false, rétablissez le prix de l'article avec la valeur price_backup et réinitialisez lock_item, ou bien réinitialisez simplement le verrou.

Cette méthode garantit les mêmes valeurs sur les serveurs. Cependant, il peut y avoir de meilleures méthodes

Questions connexes