|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
Bonjour tous le monde,
je cherche des retours d'experience concernant les batches PHP voici mon probleme: j'ai 300M de fichier sql chaque fichier contient des insertions dans 3 tables: - country - city - region pour cela, je veux optimiser mon programme suivant: Code :
Code :
|
||||
|
00
|
|
|
#2 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Si le SGBD supporte les transactions, c.a.d en gros si ce n'est pas mysql avec le moteur MyISAM, il faudrait grouper les INSERT dans une transaction. Une transaction par fichier SQL, par exemple, ça serait assez simple au vu du découpage.
Dans le cas contraire à chaque INSERT, le SGBD attend que les données soient bien physiquement sur disque avant de continuer, ce qui ralentit énormément. |
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
oui j'ai bien mySql avec le moteur myISam,
comment faire pour englober un fichier par transaction ? |
|
00
|
|
|
#4 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Avec MyISAM ce n'est pas faisable ni nécessaire car ce moteur n'a pas de transaction.
Pour aller plus vite il aurait fallu que les données soient au format brut au lieu d'être déjà en insert SQL, et les importer avec la commande LOAD DATA ou le programme mysqlimport qui sont spécialement prévus pour l'import de données en masse. Une autre option serait en principe de traiter plusieurs fichiers en parallèle, mais avec MyISAM ça risque de ne rien donner comme accélération puisque que lors d'un INSERT le moteur verrouille toute la table. Bref, rien de positif :-( |
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
ok je vais changer en InnoDB,
est ce qu'il faut aussi changer le format des fichier insert ?? |
|
00
|
|
|
#6 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Les INSERTs ont l'air complètement standard, il ne devrait pas y avoir de problème avec.
En revanche j'ai oublié quelque chose précédemment: s'il y a des index sur les tables, il est bon pour le temps d'exécution de les supprimer, pour les recréer une fois que l'import est terminé. Et c'est encore plus vrai pour une insertion en parallèle s'il y a des index uniques. |
|
|
00
|
|
|
#7 |
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
le soucis avec load data infile est qu'il permet pas l'import dans plusieurs table est c'est ça que j'aime pas,
d'autre proposition ? |
|
00
|
|
|
#8 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
y'a jamais de saut ligne dans tes insères ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#9 |
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
si j'ai bien compris non j'ai pas de saut de ligne dans mes fichiers mes par contre j'ai retour a la ligne
|
|
00
|
|
|
#10 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Hey, ne va pas changer le moteur de stockage juste parce que c'est plus pratique. Il faut un raison technique valide pour faire ça.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#11 | |
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
Citation:
jusqu'a présent j'ai pas une réponse claire et pointue |
|
|
00
|
|
|
#12 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Le choix du moteur de stockage va dépendre de plusieurs paramètres: le volume de données à stocker, la présence de clés étrangères, le temps d'accès etc.
Généralement, et sauf motivation particulière, on mets les tables en InnoDB pour avoir: - le renforcement de sécurité sur les clés étrangères - les dépendances et les modifications en cascade - les transactions En revanche, si ta table contiens un nombre très important de donnés (supérieur à plusieurs millions de tuples) il vaut mieux mettre du MyIsam sinon la taille en mémoire va exploser avec les index. Egalement, si tu cherches à faire des recherches fulltext, seul MyIsam possède l'index qui te permet de le faire. Renseigne toi plus sur le site de MySQL pour déterminer le moteur qu'il te faut: http://dev.mysql.com/doc/refman/5.0/...e-engines.html, http://www.mysql.fr/why-mysql/white-...sam_innodb.php
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#13 |
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
j'ai fait un test si j'ai met:
- MyIsam le temps d’exécution il est entre 20 et 30 min - si je met innoDb le temps est doublé en 2 à savoir plus que 40 min donc pour ses table la j'adopte comme moteur myIsam, cela dit j'aimerais bien des idées sur comment optimisé mon code au début |
|
00
|
|
|
#14 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
y'a quoi derrière le executeQuery ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#15 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
Si c'est une action que tu dois effectuer une fois de temps en temps, le temps d'import export importe moins que la rapidité des requêtes effectuées par le système sur ces tables... Egalement, si tu as un fichier de données (volumineux certes) tu peux l'importer dans un base de données en utilisant la console: Code :
mysql -u xxx -p yyy database < fichier.sql
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
10
|
|
|
#16 |
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
- executeQuery comme sont nom l'indique il lance une requête sql
- en fait c'est un system qui offre aux utilisateurs un ensemble de pays qu'il veux installer comme il peux les réinstallé si l’utilisateur clic sur check All alors la il faut attendre |
|
00
|
|
|
#17 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
je m'en doutais pas du-tout ...
montre le code, on ne sait pas ce que t'as mis dedans
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#18 | ||
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
Code :
|
||
|
00
|
|
|
#19 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
arf c'est du Joomla, je comprend mieux
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#20 |
|
Membre actif
![]() Inscription : février 2008 Messages : 394 ![]() |
non ce n'est pas de joomla mais c'est du PHP
![]() j'attend vos lumieres les gas? |
|
00
|
Copyright © 2000-2012 - www.developpez.com