<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Elasticsearch on Java &amp; Moi</title><link>https://javaetmoi.com/tags/elasticsearch/</link><description>Recent content in Elasticsearch on Java &amp; Moi</description><generator>Hugo</generator><language>fr</language><lastBuildDate>Sun, 03 Jan 2021 11:44:26 +0000</lastBuildDate><atom:link href="https://javaetmoi.com/tags/elasticsearch/feed.xml" rel="self" type="application/rss+xml"/><item><title>Bonnes pratiques de logging</title><link>https://javaetmoi.com/2021/01/bonnes-pratiques-de-logging/</link><pubDate>Sun, 03 Jan 2021 11:44:26 +0000</pubDate><guid isPermaLink="false">https://javaetmoi.com/?p=2100</guid><description>&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_external image_processed"
width="512"
height="512"
src="https://javaetmoi.com/lof-file-1_3583990369974809130.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Publier en 2021 un article sur les logs n’est pas très novateur ; je vous l’accorde. Le &lt;strong&gt;logging&lt;/strong&gt; est une pratique vieille comme l’informatique, ou presque. C’est une &lt;strong&gt;pratique universelle&lt;/strong&gt; qu’on retrouve &lt;strong&gt;quel que soit le langage de programmation&lt;/strong&gt; et quel que soit le type d’application. Pour autant, elle est survolée en fac et en école d’ingénieur. Les dévs apprennent bien souvent à logger sur le tas, en fonction de leurs besoins et de ce qui est déjà mis en place sur leur application. Rares sont également les entreprises mettant à disposition des normes et des bonnes pratiques en termes de traces applicatives.&lt;/p&gt;
&lt;p&gt;Dans cet article, je ne vous expliquerai pas comment utiliser &lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt;, &lt;a href="http://logback.qos.ch/"&gt;Logback&lt;/a&gt;, &lt;a href="https://logging.apache.org/log4j/2.x/"&gt;Log4j 2&lt;/a&gt; ou la controversée &lt;a href="https://docs.oracle.com/javase/8/docs/technotes/guides/logging/index.html"&gt;API de Logging&lt;/a&gt; du langage Java. C’est un prérequis que bon nombre d’entre vous connaissent déjà. Beaucoup de ressources existent à ce sujet, en commençant par leurs documentations officielles.&lt;/p&gt;
&lt;p&gt;Non, &lt;strong&gt;je vous y exposerai plutôt les bonnes pratiques que je préconise&lt;/strong&gt;, tant au niveau d’une application que d’une organisation. Je répondrai également aux questions les plus courantes : &lt;strong&gt;quand utiliser tel ou tel niveau de log ?&lt;/strong&gt; &lt;strong&gt;que mettre dans les messages de logs ?&lt;/strong&gt;&lt;br&gt;Nom de mon blog oblige, j&amp;rsquo;utiliserai des exemples venant du monde Java. Mais vous pourrez aisément transposer ces bonnes pratiques à d’autres technologies. Et bien entendu, elles sont à adapter en fonction de votre contexte et de vos besoins.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="Bonnes pratiques de logging"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2021/01/logo-splunk.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>14 prises de notes à Devoxx France 2017</title><link>https://javaetmoi.com/2017/04/14-prises-de-notes-a-devoxx-france-2017/</link><pubDate>Tue, 25 Apr 2017 19:03:47 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1699</guid><description>&lt;p&gt;Les &lt;strong&gt;vidéos des présentations&lt;/strong&gt; données lors de l’édition &lt;strong&gt;2017&lt;/strong&gt; de la conférence &lt;strong&gt;Devoxx France&lt;/strong&gt; sont d’ores et déjà disponibles sur la &lt;a href="https://www.youtube.com/channel/UCsVPQfo5RZErDL41LoWvk0A/videos"&gt;chaîne Devoxx FR de Youtube&lt;/a&gt;.
Si vous n’avez pas le temps de toutes les visionner, si vous souhaitez vous faire un avis avant de les regarder ou si vous souhaitez garder une trace écrite de ce que vous y avez appris, je mets librement à disposition quelques-unes de &lt;strong&gt;mes notes&lt;/strong&gt;.
Il y’en a pour tous les goûts : du Java pur et dur, du framework avec Spring, du front avec Vue.js, des conteneurs avec Docker Swarm mode, des nouvelles approches de développement avec la programmation réactive, des patterns d’architecture avec les microservices, CQRS et l’Event-Sourcing, du legacy tendance avec les logs, et du Big Data avec Elasticsearch.&lt;/p&gt;
&lt;p&gt;&lt;a href="wp-content/uploads/2017/04/2017-04-14-prises-de-notes-a%CC%80-Devoxx-France-2017.jpg"&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2017/04/2017-04-14-prises-de-notes-a%CC%80-Devoxx-France-2017.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="14 prises de notes à Devoxx France 2017"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2017/04/2017-04-14-prises-de-notes-a%CC%80-Devoxx-France-2017.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>16 prises de notes à Devoxx France 2016</title><link>https://javaetmoi.com/2016/05/16-prises-de-notes-a-devoxx-france-2016/</link><pubDate>Thu, 12 May 2016 17:14:54 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1580</guid><description>&lt;p&gt;Pour vous aider à choisir quelle conférence visionner sur la &lt;strong&gt;&lt;a href="https://www.youtube.com/channel/UCsVPQfo5RZErDL41LoWvk0A"&gt;chaîne Devoxx FR 2016 de Youtube&lt;/a&gt;&lt;/strong&gt; ou pour vous remémorer certaines chose, je mets librement à votre disposition les différentes notes que j’ai pu prendre sur mon laptop.&lt;/p&gt;
&lt;p&gt;Les sujets sont variés : des &lt;strong&gt;Microservices&lt;/strong&gt; avec Spring Boot et Spring Cloud, du &lt;strong&gt;Big Data&lt;/strong&gt; avec Kafka et Elasticsearch, du &lt;strong&gt;Front End&lt;/strong&gt; avec ECMAScript 2015 et React, du &lt;strong&gt;Java 8&lt;/strong&gt; et &lt;strong&gt;9&lt;/strong&gt; ou bien encore de la &lt;strong&gt;méthodologie&lt;/strong&gt; avec les revues de code et de la living documentation.&lt;/p&gt;
&lt;p&gt;Certaines notes pourront être lues de manière autonome ; je pense par exemple au quickie &lt;a href="wp-content/uploads/2016/05/Devoxx_France-2016-Comment_rater_ses_revues_de_code.pdf"&gt;Comment rater ses revues de code ?&lt;/a&gt; et à la conférence &lt;a href="wp-content/uploads/2016/05/Devoxx_France-2016-Stack_Overflow_behind_the_scenes.pdf"&gt;Stack Overflow behind the scenes&lt;/a&gt;. Pour être exploitables en l’état, d’autres notes demanderont à ce que vous ayez assisté à la conférence ou que vous ayez pu récupérer les supports de présentation.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="2016_04_21_Devoxx_France_2016_keynote"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2016/05/2016_04_21_Devoxx_France_2016_keynote.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Tout sur le Elastic{ON} Tour Paris 2015</title><link>https://javaetmoi.com/2015/11/tout-sur-elastic-on-tour-paris-2015/</link><pubDate>Fri, 13 Nov 2015 13:00:47 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1480</guid><description>&lt;p&gt;Sur les 12 représentations mondiales, la 3ième date de la tournée européenne de l &lt;a href="https://www.elastic.co/elasticon"&gt;a conférence Elastic{ON}&lt;/a&gt; a eu lieu le 5 novembre 2015 à Paris.&lt;/p&gt;
&lt;p&gt;Invité par la société &lt;a href="http://adelean.com/"&gt;Adelean&lt;/a&gt;, j’ai pu y participé. Pour toutes celles et ceux qui n’ont pas eu cette chance, ce billet me permet de vous faire partager cette journée.&lt;/p&gt;
&lt;p&gt;&lt;a href="wp-content/uploads/2015/11/elasticon-patis-2015-keynote.jpeg"&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="elasticon-patis-2015-keynote"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2015/11/elasticon-patis-2015-keynote.jpeg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="elasticon-patis-2015-keynote"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2015/11/elasticon-patis-2015-keynote.jpeg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>18 prises de notes à Devoxx France 2015</title><link>https://javaetmoi.com/2015/04/18-prises-de-notes-a-devoxx-france-2015/</link><pubDate>Tue, 21 Apr 2015 06:03:20 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1356</guid><description>&lt;p&gt;En attendant que les vidéos des &lt;a href="http://cfp.devoxx.fr/2015/index.html"&gt;différentes conférences de l’édition 2015&lt;/a&gt; de Devoxx France soient mises en ligne sur &lt;a href="http://www.parleys.com/"&gt;Parleys&lt;/a&gt; et en complément de certains supports déjà mis en ligne par certains Speakers, je mets librement à votre disposition les différentes notes que j’ai pu prendre sur mon laptop.&lt;/p&gt;
&lt;p&gt;Les sujets sont variés : du &lt;strong&gt;Machine Learning&lt;/strong&gt; avec Watson, Spark et MMLib, du &lt;strong&gt;Reactive Programming&lt;/strong&gt; avec RxJava et Vert.x, du &lt;strong&gt;Java 9&lt;/strong&gt;, du &lt;strong&gt;Spring 4.1&lt;/strong&gt; ou bien encore du Docker.&lt;/p&gt;
&lt;p&gt;Certaines notes pourront être lues de manière autonome ; je pense par exemple au quickie &lt;a href="wp-content/uploads/2015/04/Devoxx_France_2015-Strat%C3%A9gie_de_mise_en_place_de_revues_de_code.pdf"&gt;Stratégie de mise en place de revues de code&lt;/a&gt; et à la conférence &lt;a href="ploads/2015/04/Devoxx_France_2015-Livrer_chaque_jour_ce_qui_est_pret.pdf"&gt;Livrer chaque jour ce qui est prêt !.&lt;/a&gt; Pour être exploitables en l’état, d’autres notes demanderont à ce que vous ayez assisté à la conférence ou que vous ayez pu récupérer les supports de présentation.&lt;/p&gt;
&lt;p&gt;&lt;a href="wp-content/uploads/2015/04/Keynote-des-organisateurs.jpg"&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="Keynote des organisateurs"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2015/04/Keynote-des-organisateurs.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="Keynote des organisateurs"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2015/04/Keynote-des-organisateurs.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>NoSQL Matters Paris 2015</title><link>https://javaetmoi.com/2015/03/nosql-matters-paris-2015/</link><pubDate>Tue, 31 Mar 2015 16:32:57 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1324</guid><description>&lt;p&gt;&lt;a href="wp-content/uploads/2015/03/nosql-matters-logo.png"&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="nosql-matters-logo"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2015/03/nosql-matters-logo.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ayant gagné une place par le groupe utilisateurs Elasticsearch (que je remercie une nouvelle fois), j’ai eu l’opportunité d’assister pour la première fois à une conférence dédiée au NoSQL. Parmi la centaine de participants, je devais sans nul doute être le plus néophyte. Certes, je connais relativement bien Elasticsearch pour l’avoir mis en œuvre, mais l’écosystème d’Hadoop et des bases de données NoSQL restait pour moi encore très vague.
Ce fut donc l’occasion rêvée d’approfondir mes connaissances sur le sujet et de m’aérer l’esprit.
Cerise sur le gâteau, cette conférence m’aura permis d’apprécier la qualité de speaker de deux anciens collègues, Bruno Guedes et Lucian Precup.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="nosql-matters-logo"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2015/03/nosql-matters-logo.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Etude de cas Spring Integration</title><link>https://javaetmoi.com/2015/03/etude-de-cas-spring-integration-elasticsearch/</link><pubDate>Wed, 11 Mar 2015 06:30:58 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1310</guid><description>&lt;p&gt;Vous avez déjà entendu parler d’ &lt;strong&gt;Apache Camel&lt;/strong&gt; ?
Les Design Pattern n’ont plus de secrets pour vous ?
L’Event Driven Architecture vous attire ?
Les &lt;strong&gt;Enterprise Integration Pattern&lt;/strong&gt; vous interpellent ?
Vos applications reposent sur TCP, JMS, FTP, SFTP, les fichiers, les mails, XML, les web services SOAP, REST, RSS, JPA, JDBC ou même Twitter ?&lt;/p&gt;
&lt;p&gt;N’attendez plus : venez découvrir l’utilisation des patterns comme le &lt;strong&gt;Channel&lt;/strong&gt; &lt;strong&gt;Adapter&lt;/strong&gt;, le &lt;strong&gt;Router&lt;/strong&gt; ou l’ &lt;strong&gt;Aggregator&lt;/strong&gt; au travers d’un &lt;strong&gt;workshop sur Spring Integration&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Plugin exit pour LogStash</title><link>https://javaetmoi.com/2014/11/plugin-exit-pour-logstash/</link><pubDate>Sun, 09 Nov 2014 11:15:07 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1254</guid><description>&lt;p&gt;&lt;a href="wp-content/uploads/2014/11/logstash.png"&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="logstash"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/11/logstash.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/a&gt; Ce billet a pour objectif de vous présenter un cas d’usage du &lt;strong&gt;plugin exit&lt;/strong&gt; pour LogStash.
Une utilisation répandue de LogStash consiste à alimenter Elasticsearch à partir de fichiers de logs.
Extensible via un mécanisme de plugins, LogStash sait gérer plusieurs types de source et plusieurs types de destinations.
&lt;strong&gt;Une utilisation alternative de LogStash consiste à l’utiliser comme batch d’indexation&lt;/strong&gt;. Le fichier à indexer a une fin. Et &lt;strong&gt;l’utilisateur souhaite que LogStash s’arrête une fois les données importées&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="logstash"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/11/logstash.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Développer et industrialiser une web app avec AngularJS</title><link>https://javaetmoi.com/2014/02/developper-industrialiser-web-app-recherche-angularjs/</link><pubDate>Sun, 09 Feb 2014 19:13:56 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=898</guid><description>&lt;p&gt;Au travers du billet &lt;a href="https://github.com/angular/angular-seed/blob/master/README.md"&gt;Elastifiez la base MusicBrainz sur OpenShift&lt;/a&gt;, je vous ai expliqué comment indexer dans &lt;strong&gt;Elasticsearch&lt;/strong&gt; et avec &lt;strong&gt;Spring Batch&lt;/strong&gt; l’encyclopédie musicale &lt;strong&gt;MusicBrainz.&lt;/strong&gt; L’index avait ensuite été déployé sur le Cloud &lt;strong&gt;OpenShift&lt;/strong&gt; de RedHat.&lt;br&gt;Une application HTML 5 était mise à disposition pour consulter les albums de musique ainsi indexés. Pour m’y aider, &lt;a href="https://twitter.com/lucianprecup"&gt;Lucian Precup&lt;/a&gt; m’avait autorisé à adapter l’application qu’il avait mise au point pour l’atelier &lt;a href="http://agenda2013.scrumday.fr/event/149"&gt;Construisons un moteur de recherche&lt;/a&gt; de la conférence Scrum Day 2013.&lt;br&gt;Afin d’approfondir mes connaissances de l’ &lt;strong&gt;écosystème JavaScript,&lt;/strong&gt; je me suis amusé à recoder cette &lt;strong&gt;application front-end&lt;/strong&gt; en partant de zéro. Ce fut l’occasion d’adopter les meilleures pratiques en vigueur : framework JavaScript MV*, outils de builds, tests, qualité du code, packaging …&lt;br&gt;Au travers de ce article, je vous présenterai comment :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mettre en place un projet Anguler à l’aise d’ &lt;strong&gt;Angular Seed&lt;/strong&gt;, &lt;strong&gt;Node.js&lt;/strong&gt; et &lt;strong&gt;Bower&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Développer en full &lt;strong&gt;AngularJS&lt;/strong&gt; et &lt;strong&gt;Angular UI Bootstrap&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Utiliser le framework &lt;strong&gt;elasticsearch-js&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Internationaliser&lt;/strong&gt; une application Angular&lt;/li&gt;
&lt;li&gt;Tester unitairement et fonctionnellement une application JS avec &lt;strong&gt;Jasmine&lt;/strong&gt; et &lt;strong&gt;Karma&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Analyser du code source JavaScript avec &lt;strong&gt;jshint&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Packager avec &lt;strong&gt;Grunt&lt;/strong&gt; le livrable à déployer&lt;/li&gt;
&lt;li&gt;Utiliser l’ &lt;strong&gt;usine de développement&lt;/strong&gt; JavaScript disponible sur le Cloud : Travis CI, Coversall.io et David&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Le code source de l’application est bien entendu &lt;a href="https://github.com/arey/angular-musicbrainz"&gt;disponible sur GitHub&lt;/a&gt; et &lt;a href="http://angular-musicbrainz.javaetmoi.com/"&gt;testable en ligne&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="Angular MusicBrainz web app screenshot"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/02/angular-musicbrainz-screenshot.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Retour d’expérience sur les problématiques Elasticsearch</title><link>https://javaetmoi.com/2013/12/retour-experience-problematiques-elasticsearch/</link><pubDate>Mon, 16 Dec 2013 14:23:37 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=879</guid><description>&lt;p&gt;&lt;em&gt;« Près de 2 ans passés chez un client en tant que référent technique d’un &lt;strong&gt;middle de recherche&lt;/strong&gt; basé sur le moteur de recherche &lt;a href="http://www.elasticsearch.org/"&gt;Elasticsearch&lt;/a&gt;, il me paraît aujourd’hui opportun de vous faire part des différentes &lt;strong&gt;problématiques&lt;/strong&gt; rencontrées au cours des &lt;strong&gt;développements&lt;/strong&gt; et de son &lt;strong&gt;exploitation&lt;/strong&gt;. »&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;En 2 versions majeures et une montée de version d’Elasticsearch, les problématiques abordées ont été nombreuses : occupation mémoire, ré-indexation sans interruption de service, Split Brain, IDF et partitionnement. Prêts pour ce retour d’expérience ? »&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="Logo Elastisearch"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2013/12/logo-elastisearch.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Elastifiez la base MusicBrainz sur OpenShift</title><link>https://javaetmoi.com/2013/11/musicbrainz-elasticsearch-angularjs-openshift/</link><pubDate>Fri, 15 Nov 2013 19:35:01 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=782</guid><description>&lt;p&gt;Pour les besoins d’un workshop sur Elasticsearch, je me suis amusé à &lt;strong&gt;indexer une encyclopédie musicale&lt;/strong&gt; et à mettre en ligne une petite &lt;strong&gt;application HTML 5&lt;/strong&gt; permettant de réaliser des &lt;strong&gt;recherches&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Comme source de données musicale, j’ai opté pour &lt;strong&gt;&lt;a href="http://musicbrainz.org/" title="MusicBrainz Home"&gt;MusicBrainz&lt;/a&gt;&lt;/strong&gt; qui est une plateforme ouverte collectant des méta-données sur les artistes, leurs albums et leurs chansons puis les mettant à disposition du publique.&lt;/p&gt;
&lt;p&gt;Pour indexer les données depuis une base PostgreSQL, j’ai privilégié &lt;strong&gt;Spring Batch&lt;/strong&gt; au détriment d&amp;rsquo;une river. Pour l’IHM, j’ai adapté un prototype basé sur &lt;strong&gt;AngularJS&lt;/strong&gt;, jQuery et Bootstrap qu’avait réalisé &lt;a href="https://twitter.com/lucianprecup"&gt;Lucian Precup&lt;/a&gt; pour la &lt;a href="http://agenda2013.scrumday.fr/event/149"&gt;Scrum Day 2013&lt;/a&gt;. La mise en ligne de l’index Elasticsearch m’aura permis de tester la plateforme Cloud &lt;strong&gt;OpenShift&lt;/strong&gt; de Redhat.&lt;/p&gt;
&lt;p&gt;Cet article a pour objectif de décrire les différentes étapes qui m’ont été nécessaires pour réaliser ma démo et d’expliquer ce que j’ai librement rendu accessible sur &lt;a href="https://github.com/arey/musicbrainz-elasticsearch/blob/musicbrainz-elasticsearch-1.0.0/src/main/java/com/javaetmoi/core/batch/item/EsDocumentWriter.java"&gt;GitHub&lt;/a&gt; et &lt;a href="http://musicsearch.javaetmoi.com/"&gt;Internet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="logo-musicbrainz"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2013/11/logo-musicbrainz.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Architecture d’un middle d’indexation</title><link>https://javaetmoi.com/2013/02/architecture-middle-indexation-elasticsearch/</link><pubDate>Tue, 26 Feb 2013 10:35:42 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=604</guid><description>Dans &lt;a href="http://javaetmoi.com/2012/12/parallelisation-de-traitements-batchs-spring-batch/" title="Parallélisation de traitements batchs"&gt;un précédent billet&lt;/a&gt;, je vous ai présenté les solutions mises en œuvre sur un projet pour paralléliser un batch d’indexation alimentant un moteur de recherche d’entreprise. Utilisée pour initialiser l’index de recherche puis le resynchroniser quotidiennement, la technique d’intégration par batch ne permet cependant pas d’indexer les données au fil de l’eau. Ce billet aborde précisément cet aspect. En effet, le fil de l’eau ou le quasi temps réel fut dès le départ une exigence forte du métier. Recherches instantanées et auto-complétion révolutionnent le traditionnel formulaire de recherche mettant plusieurs secondes à renvoyer les résultats. Mais au prix de faire des recherches sur des données pouvant dater de J-1 ? Ce n’était pas acceptable ! Un middle d’indexation fut la réponse apportée.</description></item><item><title>Parallélisation de traitements batchs</title><link>https://javaetmoi.com/2012/12/parallelisation-de-traitements-batchs-spring-batch/</link><pubDate>Sat, 01 Dec 2012 17:54:55 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=368</guid><description>&lt;h2 id="contexte"&gt;Contexte&lt;/h2&gt;
&lt;p&gt;Récemment, j’ai participé au développement d’un batch capable d’indexer dans le moteur de recherche &lt;a href="http://www.elasticsearch.org/"&gt;Elasticsearch&lt;/a&gt; des données provenant d’une &lt;strong&gt;base de données&lt;/strong&gt; tierce. Développé en Java, ce batch s’appuie sur &lt;a href="http://static.springsource.org/spring-batch/"&gt;Spring Batch&lt;/a&gt;, le plus célèbre framework de traitements par lot de l’écosystème Java&lt;br&gt;Plus précisément, ce batch est décomposé en 2 jobs Spring Batch, très proches l’un de l’autre :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;le premier est capable d’initialiser à partir de zéro le moteur de recherche&lt;/li&gt;
&lt;li&gt;et le second traite uniquement les mouvements quotidiens de données.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="problématique"&gt;Problématique&lt;/h2&gt;
&lt;p&gt;Au cours du traitement batch, l’exécution de la requête par Oracle pour préparer son &lt;strong&gt;curseur&lt;/strong&gt; a été identifiée comme l’opération la plus couteuse, loin devant la lecture des enregistrements en &lt;strong&gt;streaming&lt;/strong&gt; à travers le réseau, leur traitement chargé de construire les documents Lucene à indexer ou leur &lt;strong&gt;écriture en mode&lt;/strong&gt; bulk dans ElasticSearch. A titre d’exemple, sur des volumétries de production, la préparation côté serveur Oracle d’une requête SQL ramenant 10 millions d’enregistrement peut mettre jusqu’à 1h30.&lt;/p&gt;
&lt;p&gt;Avec pour objectif que le batch passe &lt;strong&gt;sous le seuil de 2h&lt;/strong&gt; à moindre coût, 2 axes d’optimisations ont été étudiés : diminuer le temps d’exécution par Oracle et diminuer le temps de traitement.&lt;/p&gt;
&lt;h2 id="solutions-étudiées"&gt;Solutions étudiées&lt;/h2&gt;
&lt;p&gt;Les optimisations d’un DBA consistant à utiliser des &lt;strong&gt;tables temporaires&lt;/strong&gt; et des &lt;strong&gt;procédures stockées&lt;/strong&gt; n’ont pas été concluantes : trop peu de gains (10 à 20%) pour une réécriture partielle de notre batch, et avec le risque d’engendrer des régressions.&lt;/p&gt;
&lt;p&gt;Après mesures et calculs, l’utilisation de la &lt;strong&gt;pagination&lt;/strong&gt; sur des plages de 100, de 1 000 ou même de 10 000 enregistrements a également été écartée. Dans notre contexte, cela aurait dégradé les performances. Le choix de rester sur l’utilisation d’un &lt;strong&gt;curseur JDBC&lt;/strong&gt; a été maintenu.&lt;br&gt;A cette occasion, nous avons remarqué que les temps de mise en place d’un curseur Oracle pour préparer 1 millions ou 10 millions d’enregistrements étaient du même ordre de grandeur.&lt;/p&gt;
&lt;p&gt;Utilisant déjà l’une des techniques proposées par Spring Batch pour paralléliser notre traitement batch, pourquoi ne pas refaire appel à ses loyaux services ?&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="Modèle physique de données des tables MASTERPIECE, MUSIC_ALBUM et MOVIE"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2012/11/Parall%C3%A9lisationTraitementsBatch_MPD.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item></channel></rss>