07-01-2016, 12:05 PM
Salut,
une question me vient sur l'utilisation du SGBD dans vos projet (jeux ou pas, puisque la question se pose ici au taff): supposons que vous souhaitiez avoir la liste des armes des unités qui se trouve dans la zone visible de votre carte.
Est-ce que vous allez demander au SGBD "donne-moi la liste des cases dans cette zone", le SGBD vous la donne, vous la récupérez coté client (disons coté PHP), puis ensuite, vous construisez une nouvelle requête demandant au SGBD "voici une liste de cases (ids), donne-moi la liste des unités sur ces cases-là", le SGBD vous la donne, vous la re-parsez coté client puis enfin, vous construisez une dernière requête demandant "voici une liste d'unités (ids), donne-moi la liste des armes de ces unités" et vous le re-reparsez coté client ?
Ou bien est-ce que vous avez une autre approche plus légère?
Car dans la 1ere approche, si la liste de cases est grande, la liste d'unités sera grande. Du coup, la 2nde requête (et de fait, la 3e aussi) sera longue, et dépassera le max_allowed_packet sur MySQL ("WHERE IN" avec des milliers de cases puis d'unités dedans) ou l'équivalent PostGre.
Quelle solution utilisez-vous alors? Augmenter le max_allowed_packet? Ou revoir l'architecture du code?
une question me vient sur l'utilisation du SGBD dans vos projet (jeux ou pas, puisque la question se pose ici au taff): supposons que vous souhaitiez avoir la liste des armes des unités qui se trouve dans la zone visible de votre carte.
Est-ce que vous allez demander au SGBD "donne-moi la liste des cases dans cette zone", le SGBD vous la donne, vous la récupérez coté client (disons coté PHP), puis ensuite, vous construisez une nouvelle requête demandant au SGBD "voici une liste de cases (ids), donne-moi la liste des unités sur ces cases-là", le SGBD vous la donne, vous la re-parsez coté client puis enfin, vous construisez une dernière requête demandant "voici une liste d'unités (ids), donne-moi la liste des armes de ces unités" et vous le re-reparsez coté client ?
Ou bien est-ce que vous avez une autre approche plus légère?
Car dans la 1ere approche, si la liste de cases est grande, la liste d'unités sera grande. Du coup, la 2nde requête (et de fait, la 3e aussi) sera longue, et dépassera le max_allowed_packet sur MySQL ("WHERE IN" avec des milliers de cases puis d'unités dedans) ou l'équivalent PostGre.
Quelle solution utilisez-vous alors? Augmenter le max_allowed_packet? Ou revoir l'architecture du code?