Je voudrais savoir si ma table de verrouillage est nécessaire dans cette situation (j'utilise Coldfusion et MySQL):Devrais-je utiliser cflock ou non?
J'ai une table appelée wishlists(memberId, gameId, rank, updateAt)
où les membres de stocker des jeux dans une liste personnelle.
wishlists
a un homme-à-plusieurs avec une table members
, et beaucoup-à-plusieurs avec une table games
. Beaucoup de membres ont beaucoup de jeux stockés dans cette liste. Ces jeux sont classés en utilisant un champ int. Rangs sont notamment à un membre, donc:
Member 1 can have itemId=1, rank=1; itemId=2, rank=2
Member 2 can have itemId=1, rank=1, itemId=2, rank=2
etc...
Chaque membre peut modifier sa liste en supprimant un élément, ou changer le rang d'un élément (sendGameToTopOfList(), deleteItemFromList(), par exemple) . Cela signifie qu'à chaque fois qu'une modification est apportée à une liste, la liste doit être classée à nouveau. J'ai écrit une fonction séparée appelée rankList() pour gérer le re-classement. Il est tiré après « deleteGameFromList() » ou "sendGameToTopOfList(), il effectue les opérations suivantes:
1. Gets a memberWishlist query of all records @memberId ordered first by **rank ASC**, then **updateAt ASC** fields
2. Loops through memberWishlist query and sets each row's **rank=memberWishlist.RecordCount**
champ updateAt est nécessaire parce que si un jeu a été déplacé vers le haut de la liste, nous aurions deux articles classé numéro 1, et de les différencier j'utilise updatedAt
Scénario Un:. Un membre a 100 jeux dans leur liste:
- Le membre déplace un élément vers le haut. rankList() est appelée une fois l'opération terminée.
- Alors que rankList() est à nouveau classement encore les éléments, membre supprime un jeu
Dans une demande de page normale cela est bien beau que la page ne sera pas recharger jusqu'à rankList() est fait. Mais si c'était ajax, ou si vous utilisiez cfthread, le membre peut supprimer 10 jeux en 5 secondes en cliquant très rapidement. Ensuite, la liste sera ré-classée après la suppression de toute façon, donc cela ne peut pas importer; mais il semble que c'est quelque chose que je dois protéger ...
Scénario 2: Certains de ces articles de cadeaux peuvent se transformer en commandes en utilisant un champ supplémentaire appelé « queuedForShipping. » Si queuedForShipping vaut 1, la fonction rankList() les ignore. Que se passe-t-il si un administrateur crée un envoi lorsqu'un membre supprime simplement un article ou en déplace un vers le haut?
Vos pensées sont appréciées.
Informations complémentaires: De nouveaux articles sont classés automatiquement au dernier insert