paralleliser mes requetes SQL - PHP - Programmation
Marsh Posté le 12-06-2015 à 15:28:36
Si ton pb est réellement les requête sql, c'est peut-être le moment soit de changer de SGBDR (j'imagine que tu es sous Mysql, un Oracle serait peut-être plus performant) soit de passer sur du NoSQL
Marsh Posté le 12-06-2015 à 18:36:56
oh rufo .. tj le même pour répondre à mes question tordu :-)
je suis en effet sur du mysql, et même du myisam (innodb en étude, en même temps que le passage à mariadb)
Oracle : trop chère.
Le NoSQL à été étudié, on en à un peu sur certain projet très lourd (plusieurs centaine de millions de lignes), mais très difficile de le déployer dans tout nos projets (pour info on utilise monetdb, pas très connu comme base, mais avec des perfomances très impressionnante, tout en restant sur du SQL standard)
Dans le même genre il y a aussi postgres que tu n'as pas cité.
Mais toutes ces solutions ont déjà été étudiés avec soin et c'est un autre débat.
Mon besoin pour l'instant est de pouvoir paralléliser des requêtes SQL. Par exemple certain de nos serveurs ont 32 CPU et 12 disques SSD en raid, mais un seul CPU est utilisé et les disques s'ennuie. En lançant 2 requêtes SQL simultanément, je double tout simplement la vitesse de traitement, pour un coût de développement très faible et sans changer de SGBD . (et on pourrait passer à 4 simultanément pour saturer les SSD)
la solution serait un vrai ordonnanceur, mais je me demande s'il n'y en à pas orienté base de données
Marsh Posté le 12-06-2015 à 19:02:44
T'as regardé l'outil de Joce ?
http://forum.hardware.fr/hfr/Progr [...] 2180_1.htm
Marsh Posté le 15-06-2015 à 00:55:48
Pour faire bosser des scripts PHP à la volée, j'utilise beanstalkd ( http://kr.github.io/beanstalkd/ ). Un script produit des tâches, puis N-scripts simultanément en exécution piochent une tâche dans la pile. Seulement, il n'y a pas de base de notion d'ordonnancement, et c'est du pur asynchrone. Il y a d'autres systèmes capables de faire du multi-tâches synchrone mais je ne les connais pas (j'en ai seulement entendu parler.)
Après avec beanstalkd, il y a toujours moyen de faire de la tâche à état et du reduce à la main mais ce n'est de base pas prévu pour ça.
edit: termes utiles à rechercher : mapreduce, hadoop, hive
Marsh Posté le 15-06-2015 à 10:38:58
Je pensai aussi au MapReduce quand je proposais du NoSQL, mais ça va nécessité une réécriture de l'appli, assez conséquente je pense.
Marsh Posté le 11-06-2015 à 15:48:24
Bonjour à tous,
Dans mon métier je traite un volume de données important avec du PHP / SQL .
J'ai des batch en PHP qui lance des requêtes SQL les unes à la suite des autres.
Pendant longtemps le goulant d'étranglement des performances c'etait le disque dur. (I/O)
A présent qu'on passe à des SSD, le goulot d'étranglement devient la fréquence du CPU. En effet une requête SQL n'utilise bien souvent qu'un seul CPU à la fois.
Avant de réinventer la roue je viens donc ici poser ma question.
Il faut que j'arrive à paralléliser mes requetes SQL . Mais pas toutes les requêtes. Je peux en lancer plusieurs en parallèle puis je dois à attendre la fin de certaine pour en lancer d'autre, etc, etc ...
Connaissez vous des outils (au mieux une libraire PHP) pour gérer un plan d'exécution de mes requêtes ? (sorte d'ordonnanceur)
Merci
Pierre
Message édité par PierreC le 11-06-2015 à 15:48:43
---------------
Du tofu en Alsace : www.tofuhong.com