Bonjour,

Voila je rencontre un petit problème qui bloque l'avancée de mon projet.
Pour information, je travaille actuellement à la création d'un site mis en place grace à OctoberCMS. (base laravel)

Le but du site est de pouvoir présenter un hotel, et j'ai donc besoin de recuperer des données via un webservice SOAP. Cependant l'appel du webservice retourne un flux de dates disponibles très long (>100MB).

J'ai pourtant besoin de récuperer ces informations pour pouvoir récupérer un prix d'appel sur l'ensemble des dates, les stocks disponibles par dates, les services, les chambres etc...

Bien sur tout cela serait facile si je pouvais recuperer seulement ce que je veux depuis le webservice. malheureusement les fonctions ne sont pas optimales.

J'ai donc plusieurs questions à vous poser:
1) Comment puis je récuperer ce flux en php sans dépasser a chaque fois la "memory limit" et sans que le client mette 20 ans à charger la page en front ?

Pour information, j'avais commencé à plencher sur la possibilité d'utiliser XMLReader cependant cela ne me permet pas de résoudre le probleme de vitesse de chargement. De plus, il faudrait traiter les données recues avant l'affichage de la page.

2) J'ai lu et vu des introductions sur ElasticSearch, serait ce une possibilité pour résoudre ce genre de probleme ? Fonctionne t-il avec Soap ?

En espérant que vous pourrez m'aider,

merci d'avance

4 réponses


Salut Slevin, je ne connais pas Laravel, mais vu que c'est plus un problème de conception/infra, je me permets de te répondre. Si tu veux absolument charger toutes les infos, le faire à chaque appel de page n'est pas, de mon point de vue la bonne solution. Tu vas surcharger très rapidement ton serveur!
Tu peux passer par un gestionnaire de queues (AMQP) comme RabbitMQ (vérifier la capacité à supporter SOAP), qui va se charger à la demande d'aller effectuer les traitements en back-office.
Utiliser ES en aval pour traiter les données dans le cadre d'une recherche est une bonne idée, si tu as besoin d'effectuer des recherches avancées c'est le top...

Bonjour,

à quel moment as-tu besoin de récupérer le ws soap ?
Si tu peux travailler en mode légèrement asynchrone, il serait intéressant de prévoir un job toutes les x minutes pour peupler une table dans la base de données (ES ne me semble pas très intéressant car ce sont des données assez réferentielles).

Plus les données sont référentielles moins la fréquence du job est importante.

Bonjour et merci a vous deux

A vrai dire, je peux soit passer par le WS Soap et donc interoger en direct le flux des disponibilités de mes produits, ou alors je peux recuperer le flux xml deposé sur un serveur ftp et le copier. J'essaye de voir ce qui est le plus pratique.

Le flux xml est seulement déposé deux fois par jours sur le FTP et ne met donc pas a jour les disponibilités en temps réels. c'est assez embêtant car au final, le moindre changement de prix dans le logiciel de réservation n'est pas transmis en direct au site. Et il convient dans ce cas d'attendre soit le lendemain pour avoir des données à jour ou de relancer la génération du flux a la main (très lourd a faire surtout sur plusieurs etablissements.)

Mon but serait donc d'utiliser directement le WS Soap pour pouvoir recuperer les données fraiche en permanence. Cependant il est hors de question de charger un flux aussi important de données sans le mettre dans un systeme de cache que je pourrais lire rapidement.

La notion de base de données en tant que systeme de cache est interessante et je pense que cela sera surement celle choisie au final, mais j'aimerais vraiment trouvé un moyen de lire ceci à la manière d'un big data qui permettrait de gerer des quantités enormes d'informations sans perdre en rapidité de lecture. ES me semblait aller dans ce sens.

Comme tu le dis, "Plus les données sont référentielles moins la fréquence du job est importante." et je pense qu'une population de la BDD toutes les 30 minutes suffirait déja a rendre les données plus fraiches.

L'idée d'une DB de cache est plutôt bonne, si tu fais du différentiel.
Concernant ES, tu ne vas pas gérer des données, mais plutôt rechercher très rapidement dans un grand volume de données. Donc si tu as des recherches complexes, c'est totalement appropriés (facettes, indexation, plein texte avancé, etc.).
Un aspect à étudier, peut-être, ce sont les "river" ES qui permettent l'import de données dans ES. Ca doit exister pour des flux soap... Mais je ne connais pas assez le sujet.