|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() ![]() |
Bonjour,
J'ai une question de conception à vous poser. Je vais vous le poser sous forme de problème, pour ne pas être influencer par la technologie utiliser. Soit un bâtiment qui produit X unité de ressource toutes les heures. Pour mettre à jour le nombre d'unité disponible, on prend le delta entre la dernière mise à jours et la mise à jours actuelle. Pour avoir quelque chose dans ce style : Code :
Ressource_Dispo = Ressource_Dispo + (Production_Bâtiment * Delta / 3600) Le problème vient maintenant : Si posons qu'on programme un Event entre la dernière mise à jour et notre mise à jours qui change la production du bâtiment. On connait sa date et les changements que cette Event va produire. Mais nous ne pouvons pas réaliser la modification au moment théorie où va se produire cette Event. Mais seulement lors de notre mise à jours. La question que je me pose est :
J'ai pensé à la solution suivante : Code :
Mais je ne suis pas sûr... Si vous avez des pistes sur cela ! Je prends aussi tout les commentaires ! Cordialement, Patrick Kolodziejczyk.
__________________
N'oubliez pas de marquer vos discussions ![]() Si une réponse vous a été utile pensez à voter Pour ![]() Pensez à la javadoc
|
||
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : mars 2005 Messages : 599 ![]() |
Bonjour,
Ta méthode est tout à fait valable et est assez répandue: tu programme tes évènements de telle façon qu'ils s'exécutent, et lorsqu'ils ont fini de s'exécuter ils ajoutent un message à une file d'attente (JMS, table de jobs en BDD, ...). Lors d'une mise à jour, tu commence par la mise à jour puis tu dépile cette file d'attente pour jouer les messages et modifier les données comme il faut. L'avantage est que tes évènements sont indépendants (couplage faible et indépendance technologique) de la partie qui effectue la mise à jour.
__________________
Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros! Code C :
|
||
|
|
10
|
|
|
#3 |
|
Membre Expert
![]() ![]() |
Merci beaucoup pour cette réponse !
Du coup, Je me pose une question sur la gestion des échelles. Si on prend un système très large, si on reprend mon exemple du bâtiment qui produit. Si on multiplie le nombre de bâtiment qui produit. (un million par exemple) Et qu'on conditionne l'effet/déclenchement d'un évènement par la production d'un bâtiment. Dans la solution que j'ai, je mets l'ensemble de la production des bâtiments à jours, avant de réaliser mon event. Ce qui peut prendre un temps assez long... Dois-je altérer la solution en ajoutant aux Event les bâtiments qui doivent être mise à jours avant leur exécution ? Cela complexifie légèrement la solution, mais permet d'avoir quelque chose d'un peu moins coûteux en ressource. Cordialement, Patrick Kolodziejczyk.
__________________
N'oubliez pas de marquer vos discussions ![]() Si une réponse vous a été utile pensez à voter Pour ![]() Pensez à la javadoc
|
|
00
|
|
|
#4 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 819 ![]() |
S'il y a beaucoup d'entité à mettre à jour, je changerais la manière d'organiser les mises à jour.
Par exemple en créant des objets "Mise à jour" (un pour chaque bâtiment), et en ajoutant les évènements dans les objets "Mise à jour". On peut alors traiter séparément chaque mise à jour (parallélisation, priorité, ...)
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
10
|
|
|
#5 | ||||||
|
Membre Expert
![]() ![]() |
Très bonne idées !
Cela évite la recherche des évènements à exécuter pour un bâtiment donner. Surtout que cela représente la plus grande partie du temps de calcule dans le processus que j'ai testé : Sur une implémentation Java, on obtient des résultats très différents entre la première solution et la seconde : Premier cas de test : Citation:
Citation:
Citation:
Citation:
Citation:
Citation:
Cordialement, Patrick Kolodziejczyk.
__________________
N'oubliez pas de marquer vos discussions ![]() Si une réponse vous a été utile pensez à voter Pour ![]() Pensez à la javadoc
|
||||||
|
00
|
Copyright © 2000-2013 - www.developpez.com