JeuWeb - Crée ton jeu par navigateur
[PHP/MySQL] Quel est le meilleur nombre d'INSERT simultanés ? - 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 : [PHP/MySQL] Quel est le meilleur nombre d'INSERT simultanés ? (/showthread.php?tid=5939)

Pages : 1 2


[PHP/MySQL] Quel est le meilleur nombre d'INSERT simultanés ? - Myrina - 25-01-2012

Je suis entrain de plancher sur une traitement en php qui pourra effectuer jusqu'à 100 000 INSERT ... VALUES (...) en base.
Bien entendu, il est hors de question d'effectuer les 100 000 INSERT.

D'un autre coté, je me vois mal préparé les 100 000 INSERT en php pour les envoyés en une fois via INSERT ... VALUES (...),(...),(...),... 100 000 parenthèses.

Il parait évident qu'il faut regrouper les occurrences par un certain nombre avant des les insérer d'un coup, et ce, autant que necéssaire.

Donc, j'aimerai savoir si vous avez déjà été confronté à une question de ce type et sur quel critère/principe le choix du facteur de regroupement a été établi?

NB: l'ensemble des INSERT fait partie d'une même transaction.


RE: [PHP/MySQL]Quel est le meilleur nombre d'INSERT simultanés? - niahoo - 25-01-2012

Ben tu fais un benchmark sur ta machine de production en commençant 1 par un pour aller jusqu'à 1000 par 1000 voire plus et tu prends la solution la plus rapide Smile


RE: [PHP/MySQL]Quel est le meilleur nombre d'INSERT simultanés? - Sephi-Chan - 25-01-2012

Es-tu sûr que tu as besoin de ces 100 000 lignes ?
À quelle fréquence aurais-tu à le faire ?
Est-ce que ça peut être fait en tâche de fond ?

(25-01-2012, 04:22 PM)Myrina a écrit : Je suis entrain de plancher sur une traitement en php qui pourra effectuer jusqu'à 100 000 INSERT ... VALUES (...) en base.
Bien entendu, il est hors de question d'effectuer les 100 000 INSERT.

Pourquoi ? Si tu as besoin de créer 100 000 entrées, pourquoi ne pas le faire ?

(25-01-2012, 04:22 PM)Myrina a écrit : D'un autre coté, je me vois mal préparé les 100 000 INSERT en php pour les envoyés en une fois via INSERT ... VALUES (...),(...),(...),... 100 000 parenthèses.

Pourquoi ? Qu'est-ce qui te pose problème dans cette solution ?


(25-01-2012, 04:22 PM)Myrina a écrit : Il parait évident qu'il faut regrouper les occurrences par un certain nombre avant des les insérer d'un coup, et ce, autant que necéssaire.

Donc, j'aimerai savoir si vous avez déjà été confronté à une question de ce type et sur quel critère/principe le choix du facteur de regroupement a été établi?

NB: l'ensemble des INSERT fait partie d'une même transaction.

Tu peux faire du traitement par lot : j'insère 10 000 lignes, je fais une pause de 1 seconde et je recommence.

En somme on a besoin de plus d'informations concernant ton besoin pour répondre à ta question. Smile


RE: [PHP/MySQL]Quel est le meilleur nombre d'INSERT simultanés? - Myrina - 25-01-2012

(25-01-2012, 05:14 PM)Sephi-Chan a écrit : Es-tu sûr que tu as besoin de ces 100 000 lignes ?
À quelle fréquence aurais-tu à le faire ?
Est-ce que ça peut être fait en tâche de fond ?
La fréquence est très rare (1 fois minimum et certainement moins de 10 fois) et les 100 000 enregistrements y seront certainement à chaque fois.

Pourquoi ? Si tu as besoin de créer 100 000 entrées, pourquoi ne pas le faire ?

(25-01-2012, 05:14 PM)Sephi-Chan a écrit :
(25-01-2012, 04:22 PM)Myrina a écrit : D'un autre coté, je me vois mal préparé les 100 000 INSERT en php pour les envoyés en une fois via INSERT ... VALUES (...),(...),(...),... 100 000 parenthèses.

Pourquoi ? Qu'est-ce qui te pose problème dans cette solution ?
La taille (en octets) de la commande envoyée d'un coup à MySQL.

(25-01-2012, 05:14 PM)Sephi-Chan a écrit :
(25-01-2012, 04:22 PM)Myrina a écrit : Il parait évident qu'il faut regrouper les occurrences par un certain nombre avant des les insérer d'un coup, et ce, autant que necéssaire.

Donc, j'aimerai savoir si vous avez déjà été confronté à une question de ce type et sur quel critère/principe le choix du facteur de regroupement a été établi?

NB: l'ensemble des INSERT fait partie d'une même transaction.

Tu peux faire du traitement par lot : j'insère 10 000 lignes, je fais une pause de 1 seconde et je recommence.

En somme on a besoin de plus d'informations concernant ton besoin pour répondre à ta question. Smile
C'est une possibilité que j'envisage et j'aurai voulu savoir si quelqu'un a déjà été confronté à cela afin d'avoir un retour d'expérience.




RE: [PHP/MySQL]Quel est le meilleur nombre d'INSERT simultanés? - Sephi-Chan - 25-01-2012

(25-01-2012, 05:57 PM)Myrina a écrit :
(25-01-2012, 05:14 PM)Sephi-Chan a écrit :
(25-01-2012, 04:22 PM)Myrina a écrit : D'un autre coté, je me vois mal préparé les 100 000 INSERT en php pour les envoyés en une fois via INSERT ... VALUES (...),(...),(...),... 100 000 parenthèses.

Pourquoi ? Qu'est-ce qui te pose problème dans cette solution ?
La taille (en octets) de la commande envoyée d'un coup à MySQL.

Qu'est-ce qui te fait peur à ce sujet ?
Tu as de la documentation qui peut te laisser penser que ça ne va pas marcher ?


RE: [PHP/MySQL]Quel est le meilleur nombre d'INSERT simultanés? - Myrina - 25-01-2012

(25-01-2012, 06:05 PM)Sephi-Chan a écrit : Qu'est-ce qui te fait peur à ce sujet ?
Mon petit doigt
(25-01-2012, 06:05 PM)Sephi-Chan a écrit : Tu as de la documentation qui peut te laisser penser que ça ne va pas marcher ?
Aucune mais je pense qu'il doit bien exister une limite de taille sur une commande SQL.



RE: [PHP/MySQL] Quel est le meilleur nombre d'INSERT simultanés ? - Sephi-Chan - 25-01-2012

Sur MySQL, la taille maximum des paquets acceptés dépend de la directive max_allowed_packet. Cf. MySQL. Packet too large

Il faut voir selon les règles de ta base de données. Par défaut c'est 1Mo. Ça fait pas mal de texte.
Essaye de peser la requête contenant les 100 000 insertions, histoire qu'on se fasse une idée. Wink

Si la question reste intéressante, je pense que tu ne devrais pas t'embêter avec tout ça.
Autant opter pour des solutions simples et fonctionnelles quand elles font l'affaire. Smile


RE: [PHP/MySQL] Quel est le meilleur nombre d'INSERT simultanés ? - Myrina - 25-01-2012

J'ai pas encore caler totalement le contenu, justement à cause de cette interrogation.
Pour l'instant, j'ai des coordonnées cartésiennes X,Y entre 0 et peut être 9999, le Z étant une clé étrangère issu d'une autre table et une autre clé étrangère pour le type d'objet présent à cet endroit. A cela, se rajoute une code alphanumérique de 10c max synthétisant différemment les coordonnées spatiales et un champ libre pour contenir des métadonnées au format JSON.

Donc, il faut que je trouve en équilibre entre la taille de mes métadonnées et le nombre de requêtes réellement envoyées tout en gardant un oeil sur le temps d'exécution globale pour avoir le plus court.

Sinon, tu entends quoi par : Autant opter pour des solutions simples et fonctionnelles quand elles font l'affaire.


RE: [PHP/MySQL] Quel est le meilleur nombre d'INSERT simultanés ? - Sephi-Chan - 25-01-2012

(25-01-2012, 07:36 PM)Myrina a écrit : Sinon, tu entends quoi par : Autant opter pour des solutions simples et fonctionnelles quand elles font l'affaire.

Je veux dire qu'il ne faut pas se prendre la tête. Lancer 100 000 insertions individuelles, c'est très simple et ça fonctionne très bien.

De toute façon, un tel script doit forcément être exécuté sous forme de background job, et pas dans un script lancé par le serveur Web. Partant de là, que ça prenne 15, 20 ou 30 secondes, ça ne change pas grand chose. Smile




RE: [PHP/MySQL] Quel est le meilleur nombre d'INSERT simultanés ? - niahoo - 25-01-2012

Ou même 10 minutes hein, tu t'en fous.