Share Button

Lire la version française

When and why hydrating objects thanks to Transformers?

When you use Elasticsearch and the FosElasticaBundle Finders, the responses received from Elasticsearch are automatically transformed into Doctrine objects.

In some cases, you will need to display some information that come from a join : a photo, a category translation, …
Unfortunately, the hydratation is only done on the objects : FosElasticaBundle transforms the ids that match your search into objects via a select * in (:ids).
The consequence is that, for each entry in your results list, Doctrine will make a query for the join object (for example a Category). For 100 results in 100 different categories, 100 simple queries will be done. You understand what can happen with a complex model and several joins.

Fortunately, you can avoid that by overriding the Transformer.
Continue reading

Share Button

Share Button

Read the English version

Elasticsearch vous permet de réaliser des recherches avancées.
Certains utilisateurs souhaiteront extraire le résultat de leurs recherches sous excel (ou LibreOffice Calc…) pour retraiter les données.

Comme nous l’avons expliqué lors de notre article Exporter des données dans un fichier csv, le but d’un export (réussi) est de limiter l’impact sur le serveur.

Dans Elasticsearch, nous pouvons utiliser les fonctions scan et scroll pour réaliser nos itérations.

Continue reading

Share Button

Share Button

Read the English version

Quand et pourquoi hydrater son objet avec les Transformers?

Quand on utilise Elasticsearch et les Finders du FOSElasticaBundle, les réponses reçues d’Elasticsearch sont automatiquement transformées en objets Doctrine. 

Dans certains cas, vous aurez besoin d’afficher une information issue d’une jointure : la photo, la traduction d’une catégorie, …
Malheureusement, l’hydratation est faite uniquement sur les objets en question : FOSElasticaBundle transforme les ids correspondant à la recherche en objets via un select * in (:ids).
Conséquence : pour chaque entrée dans votre liste de résultats, Doctrine ira chercher la Category associée. Pour 100 enregistrements dans 100 catégories différentes, 100 requêtes simples seront ajoutées. On se rend compte de ce qui peut arriver avec un modèle de données compliqué et plusieurs jointures.

Heureusement, pour éviter cela, vous pouvez surcharger le Transformer.
Continue reading

Share Button

Share Button

Read the English version
Récemment, j’ai dû exporter un gros volume de données dans un fichier csv. C’est facile et rapide à faire si vous ne vous souciez pas de la mémoire utilisée et de l’expérience utilisateur. Je voulais que la consommation de mémoire n’augmente pas en fonction du volume de données.

Je me suis inspiré de cet article de blog mais, malgré ce qui est écrit dans le billet, des tests ont montré que la consommation de mémoire augmentait rapidement si le volume de données augmentait.

Continue reading

Share Button

Share Button

Lire la version française
I recently had to export a huge set of data to a csv file. This is easy and fast to do if you don’t care about memory and User Experience. I wanted the memory consumption does not increase with the volume of data.

I got inspiration from this post (in French) but, in spite of what is written in the post, some tests with the memory_get_usage function proved that the memory consumption increased quickly with the number of datas.
Continue reading

Share Button