Requete calculer en avance ?

Eléphant du PHP | 74 Messages

17 déc. 2008, 17:29

Hello,

Toujours dans mes soucis de calcul intense de données, j'ai opté pour les bases en memoire, c'est pour l'instant très concluant mais mon imagination à encore une nouvelle idée mais je sais pas si c'est possible.

Actuellement mon algo :
CREATE TABLE table_mem TYPE=MEMORY SELECT une,dizaine,de,col FROM client WHERE (une dizaine de condition SQL)
et ensuite j'effectue une multitude de calcul sur cette table en mémoire (et ca boost vraiment beaucoup, que du bonheur)

Le problème c'est que la création de la table_mem prend entre 2 et 4 minutes (c'est pas affreux dans mon cas, mais je ne pouvais passer à 30s sa serait super)

Là où mon imagination est débordante est que dans l'utilisation du site web, je connais avec quelque clic d'avance la requete sql à executer pour créer ma table_mem avant que le user demande toutes la suite de calcul.

Ma question est donc : est t"il possible de précalculer le create table de manièrer désynchoniser en php (pas d'attente de la réponse) et par la suite executer des requetes sur cette table_mem qui si elle n'est pas encore finit d'etre créer, les requetes seront en attente ?

C'est clair ?

expliquer par l'exemple :
Le users se connecte -> lancement du create table table_mem en asynchrone (Il faut 4min pour la fin de la création)
le user clic clic clic et se balade
40 secondes plus tard le user décide du lancement des calcul
Execution du multitude de requete du genre select count(col1) from table_mem (mais la table mem n'est peut etre pas finit d'etre crée).


Merci
Mon projet opensource de gestion de Devis, Commandes, Factures, pour TPE : OpenDCF : http://opendcf.1g6.biz

Eléphant du PHP | 422 Messages

17 déc. 2008, 19:13

Ajax ... : quand l'internaute se connecte sur la première page, un javascript lance un fichier PHP en asynchrone sur le serveur et permet à l'utilisateur de continuer à se balader.

Il faut juste savoir à quel moment la table est créée : peut-être avec un simple sémaphore, c'est à dire un champ associé au nom de l'utilisateur (ou à sa session) dans une base de données qui n'est positionné que lorsque le PHP a fini de créer la table. Quand l'internaute arrive sur une page, un script tout aussi asynchrone interroge la base toutes les x secondes et avertit l'internaute quand la base est terminée.