Recherche d'une recommandation sur le verrouillage d'enregistrement dans un système distribué

StackOverflow https://stackoverflow.com/questions/207724

  •  03-07-2019
  •  | 
  •  

Question

Nous essayons d'élaborer un modèle de conception recommandé pour notre équipe en matière de verrouillage d'enregistrement. L'école de pensée typique va quelque chose comme ceci: 1. L'utilisateur choisit un enregistrement dans une liste 2. Verrouiller l'enregistrement avec l'ID utilisateur 3. Chargez le dossier d’enregistrement verrouillé (pas de verrou, alors on vous bat dessus).

Est-ce que je manque quelque chose ou cela semble-t-il être le seul moyen de le faire? ((Dans notre cas, un verrouillage optimiste serait fastidieux et déroutant pour les utilisateurs finaux. Les modifications sont souvent très importantes.))

Était-ce utile?

La solution

Les détails qui pourraient rendre l’utilisation intensive de votre solution sont la suppression des verrous après un crash ou une défaillance de la connectivité. C'est là que réside le compromis entre le verrouillage optimiste et le verrouillage pessimiste. La fusion ou la restauration manuelle des éditions en cas d'échec du verrouillage optimiste est une tâche difficile, mais le nettoyage après un crash sur des modèles de verrouillage pessimistes et persistants crée ses propres maux de tête l'opportunité)

Une solution consiste à utiliser les mécanismes de votre SGBDR pour la gestion des transactions et des accès simultanés: saisissez l’enregistrement avec SELECT FOR UPDATE ou la syntaxe qui convient à votre environnement et à votre niveau d’isolation. Si l'un de vos clients se bloque ou est déconnecté, la transaction est annulée et le verrou est libéré. ??

Dans un environnement sans connexion tel que le Web ou un environnement dans lequel les connexions sont perdues et récupérées fréquemment, un modèle basé sur une session avec un délai d'expiration de session pourrait également fonctionner:

  • Tentative d'effacer le verrou existant sur l'enregistrement s'il s'agit d'une session expirée
  • Tentative de verrouillage de l'enregistrement sur l'identificateur de session (échec en cas d'échec de l'étape précédente)
  • Sélectionnez l'enregistrement verrouillé (aucun enregistrement renvoyé si l'étape précédente a échoué)

Ainsi, le verrou est libéré à l'expiration de la session. Pas besoin de supprimer manuellement les verrous après des pannes et une certaine tolérance des problèmes client / connectivité. Il faut cependant un peu plus de travail pour coder.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top