07-05-2011, 11:29 AM
Oui mais comment tu prends en charge la file d'attente ? Tu mets ton élément en file en spécifiant sa durée. Comment tu sais que le bâtiment peut commencer à être produit sur le champ ? Peut-être qu'il y a déjà un élément en production dans cette queue et qu'il y a déjà des éléments dans la file : il faut te mettre derrière celle-là.
Voilà ce que j'ai avec Redis (je rappelle que c'est un système de stockage qui associe une valeur à une clé) :
Du coup, mettre des éléments dans la file est trivial : je crée un item, j'ajoute son identifiant à ma liste. Quand un élément s'achève, je supprime le premier élément de la liste (qui correspond à l'UUID de l'élément qui vient de s'achever), je prends le nouveau premier élément (qui correspond à l'UUID du prochain élément à lancer), je le lance et hop, le système est autonome.
J'ai donc pas mal de levier pour simplifier encore le système, maintenant que j'ai en tête les prochaines exigences.
Voilà ce que j'ai avec Redis (je rappelle que c'est un système de stockage qui associe une valeur à une clé) :
- une entrée de type hash pour la queue en elle même. Sa clé est de la forme queues:queue_id (à terme, la clé sera scopée avec l'identifiant du site qui utilise le service) et le hash dispose d'une clé pour le status (et une autre clé que je n'utilise pas, finalement. Je pourrais donc remplacer ce hash par une simple string contenant le statut) ;
- Ensuite, chaque élément de la file est également représenté par une entrée de type hash par élément : cette entrée à pour clé items:element_uuid et sa valeur est un hash avec des des clés pour la durée de construction et le status de la construction (là aussi, je pense simplifier).
- En plus de ça, je dispose d'une entrée de type list nommée queues:queue_id:items qui est simplement un tableau (donc ordonné) contenant les UUID des éléments apparetenant à la file.
Du coup, mettre des éléments dans la file est trivial : je crée un item, j'ajoute son identifiant à ma liste. Quand un élément s'achève, je supprime le premier élément de la liste (qui correspond à l'UUID de l'élément qui vient de s'achever), je prends le nouveau premier élément (qui correspond à l'UUID du prochain élément à lancer), je le lance et hop, le système est autonome.
J'ai donc pas mal de levier pour simplifier encore le système, maintenant que j'ai en tête les prochaines exigences.