2010-08-27 25 views
0

J'ai un site à fort trafic qui enregistre les hits web dans une table, Hits. Il y a une logique en place pour que les doublons soient supprimés (où la définition de ce qui définit un hit en tant que doublon est arbitraire pour les besoins de cet exemple). Problème: avec plusieurs serveurs Web fonctionnant (contre la même base de données), deux ou plusieurs accès peuvent arriver en même temps sur différents serveurs Web et, du point de vue de chaque serveur, aucun d'eux n'est dupliqué (alors qu'ils étaient sérialisés un seul serveur tout sauf le premier doit être rejeté). Par conséquent, ils sont tous écrits sur la table Hits. Sans modifier le schéma DB pour forcer l'unicité d'un champ dans la table Hits, comment forcer Rails à synchroniser la transaction avec la base de données pour garantir qu'aucun doublon n'est écrit? Selon la documentation, les transactions ActiveRecord ne sont appliquées que par connexion, ce qui n'est pas suffisant (pour autant que je sache).Comment puis-je forcer Rails à synchroniser les transactions sur une table MySQL via des connexions?

Répondre

0

Transactions dans MySQL sont toujours par connexion, il n'y a pas d'autre moyen de dire ce qui est une opération atomique.

Je pense que la seule façon de le faire est soit en plaçant un verrou sur l'ensemble de la table ou pour renforcer l'intégrité au niveau du schéma.

+0

J'ai fini par suivre la route du schéma, en remaniant les choses pour permettre un champ/index unique. Merci. –