J'essaie de mettre en œuvre une application qui coordonne plusieurs utilisateurs qui planifient des ressources exclusives. Les données de planification doivent conserver une cohérence forte sur un réseau avec un seul nœud maître. Les ressources planifiées peuvent être quelque chose d'une salle de conférence à un travailleur sur un site de travail.Application de planification de ressources
Nous supposons que la salle de conférence ne peut pas être planifiée pour deux réunions à la fois et qu'un travailleur ne peut pas être sur deux sites de travail en même temps. La logique métier de l'application ne doit pas autoriser un utilisateur à "surbooker" une ressource. Ce que je n'arrive pas à comprendre, c'est comment représenter les données de sorte que si deux ou plusieurs utilisateurs fonctionnent simultanément sur le planning, et qu'il y ait des conflits, l'une des mises à jour s'annulera.
La seule solution que j'ai vu jusqu'ici est de suivre les intervalles de temps pour chaque ressource d'exclusion. Ainsi, si la salle de conférence est utilisée à intervalles de 5 minutes et qu'elle est programmée entre 9 h et 9 h 30, les créneaux horaires de 5 minutes correspondants pour 9 h à 9 h 30 renvoient VRAI, tandis que les créneaux non programmés retournent FAUX ou NUL. . La transaction DB extrait alors l'objet de la salle de conférence du magasin, vérifie tous les intervalles de temps et abandonne si la mise à jour est en conflit avec les intervalles de temps existants.
Cependant, cela semble être très grand, très rapide. Peut-être que cela pourrait être ramassé? En outre, l'un des objectifs de la conception est de prendre en charge la granularité variable, de sorte que certains objets seront programmés sur une base minute par minute alors que d'autres peuvent être sur une base quotidienne, et cette conception de données ne supporte pas très bien.
Actuellement, j'essaie d'implémenter ceci sur Google App Engine en utilisant Python, mais je serais vraiment intéressé de voir des solutions plus générales à ce problème. Tout ce que j'ai trouvé avec Googling est la planification des tâches récurrentes, ou des algorithmes qui effectuent des opérations ponctuelles pour construire automatiquement des horaires optimisés.
Une autre solution possible consiste à stocker un "verrou" de ressource dans le magasin de données. puis demander aux clients d'acquérir un verrou de manière asynchrone avant de présenter la planification à l'utilisateur sous une forme accessible en écriture. Jusqu'à ce qu'un verrou soit acquis par le client, la planification est en lecture seule.Ceci sérialise efficacement les opérations et permet à la logique métier d'être déplacée vers le client, mais le problème sera alors de déterminer les limites supérieures de contention de ressources qui seraient acceptables. –