JeuWeb - Crée ton jeu par navigateur
[MySQL] Verrous et résolution d'action - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [MySQL] Verrous et résolution d'action (/showthread.php?tid=5776)

Pages : 1 2 3 4 5


RE: [MySQL] Verrous et résolution d'action - php_addict - 27-10-2011

Bonjour, merci pour vos réponses

Il peut y avoir de lourdes requêtes SQL qui vont certainement faire s'empiler les transaction, genre un mysqldump, ou un restart du serveur dédié, je suis sur qu'il y a mille autres raisons pour que des requêtes concurrentielles se produisent sans parler de milliers de joueur...

Les LOCK TABLE couplés aux transactions ne sont t ils pas un bon moyen de faire un job queue en php? Mes actions sont stockée en base de donnée et traitées les une après les autres, le seule problème étant les requêtes simultanées ou concurrentielle

je ne suis pas certain de comprendre pourquoi LOCK TABLES seraient une si mauvaise solution que ça...

petits hors sujet:

- je me demande si un job queue est php n'est pas possible avec un système de long polling, un script qui tourne en rond comme pour un chat+socket

- je me demande comment font "les grands" genre travians games, tribal war, ikariam et compagnie...


RE: [MySQL] Verrous et résolution d'action - niahoo - 27-10-2011

Les grands ont un serveur dédié et des daemons dédiés pour la gestion des queues. En amateur ça commence par un cron.

Tu peux te faire un cron maison avec du long-polling mais ça va t'obliger a avoir constamment un navigateur ouvert sur ton jeu.

Le jour ou tu as une coupure internet, ton jeu se stoppe ?

Sur du mutualisé, webcron peut suffire. il faut voir..


RE: [MySQL] Verrous et résolution d'action - Sephi-Chan - 27-10-2011

Je t'invite à lire ces slides très intéressants : Concurrency Control: How It Really Works.

Une job queue ne se fait pas avec du long polling ou quoi que ce soit lié au client. Redis (et je crois que c'est pareil avec RabbitMQ et compagnie) implémente un mécanisme de publish/subscribe qui va permettre de maintenir une queue (ou plusieurs) en envoyant des éléments dedans, avec un peu de données.

Dans Conquest on Rails, j'insère dans la queue un élément avec 2 informations : le nom d'une classe et l'id de la partie à lancer. Redis se fout de ces données, il les stocke juste.


Ensuite, d'autres programmes vont pouvoir écouter cette file et en dépiler les éléments pour en faire quelque chose. On appelle généralement ces processus des workers.

Pour reprendre l'exemple, ce travail est effectué par Resque (écrit en Ruby, mais un portage en PHP a été fait), qui va savoir quoi faire des informations qu'il dépile. Il va regarder le nom de la classe qu'on a renseigné et appeler sa méthode de classe (= statique) perform en lui passant en argument les autres informations qu'on a donné (en l'occurrence, l'id de la partie).


RE: [MySQL] Verrous et résolution d'action - php_addict - 27-10-2011

merci encore une fois de plus à vous tous

malheureusement pour le moment je suis dans l'incapacité neuronal/intellectuel et technique d'utiliser Resque (ou autre) donc:

est il tout de même envisageable de LOCK les tables? (j'ai l'impression d'être pénible là...)

- J'entre dans la transaction
- je LOCK les tables susceptibles d'être concurrentielle
- je résous mes actions
- je UNLOCK tout
- et je ferme la transaction

ca devrait fonctionner non?

je comprends bien l’intérêt de Resque mais je ne vois pas pourquoi LOCKer les tables est si inacceptable pour vous pour gérer les "race conditions", ca sert pas à ça les LOCK ? Techniquement c'est possible non? même si une système de queue est meilleur j'en suis conscient...

[mode blues]
après 1300 post sur ce forum j'ai toujours l'impression d'avoir encore 1000 choses à apprendre...c'est pénible...
[/mode blues]


RE: [MySQL] Verrous et résolution d'action - niahoo - 27-10-2011

Ce qui est pénible c'est qu'on te dis tous que c'est une solution pas terrible, mais que tu la fais quand même. Alors j'ai envie de te dire : testes, et tu verras bien si ça fonctionne comme tu veux.

Mais l'incapacité technique/neuronale j'y crois pas vraiment, c'est à mon avis plus facile que de monter tout un système de locks.


RE: [MySQL] Verrous et résolution d'action - php_addict - 27-10-2011

ok ok désolé...

j'aimerais juste comprendre pourquoi c'est une solution si merdique...


RE: [MySQL] Verrous et résolution d'action - Sephi-Chan - 27-10-2011

C'est ultra violent un lock global de table : aucune autre écriture possible jusqu'au relâchement.
Après, Niahoo a raison : le mieux c'est de tester si ça convient. Mais à mon avis tu anticipes beaucoup trop les problèmes.

C'est un peu comme la Premature Optimization. ^^



RE: [MySQL] Verrous et résolution d'action - srm - 28-10-2011

Tu peux faire si tu es en InnoDB ça devrait bien passer, ça lockera que les lignes ou tu travailles Smile


RE: [MySQL] Verrous et résolution d'action - Sephi-Chan - 28-10-2011

C'est ce dont parle les slides que j'ai évoqué mais je n'ai eu aucun retour sur le sujet…

(27-10-2011, 12:09 PM)Sephi-Chan a écrit : Je t'invite à lire ces slides très intéressants : Concurrency Control: How It Really Works.



RE: [MySQL] Verrous et résolution d'action - php_addict - 28-10-2011

Salut

j'ai fais des PNJ qui jouent automatiquement certaines actions, pour tester les requetes concurentielles, je vous tiens au courant