Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Après 883 indices quotidiens, ça cherche encore et trouve sans cesse

Après 883 indices quotidiens, ça cherche encore et trouve sans cesse

En production depuis 2 ans, Elasticsearch a révolutionné notre flux de données par ses fonctionnalités, ses performances et sa stabilité. Je raconterai ce qu'on lui fait faire, un peu en dehors de ses cas d'usage classiques ; indexation par lot, indices éphémères, agrégations, scripts embarqués…

Jérémy Lecour

October 13, 2015
Tweet

More Decks by Jérémy Lecour

Other Decks in Technology

Transcript

  1. !!" index quotidiens ça cherche encore ça trouve sans cesse

    Meetup Elasticsearch - Marseille - 13 octobre 2015
  2. 0.90.6 1.0 1.3 1.7 2.0 Elasticsearch

  3. Jérémy Lecour

  4. +2 ans en production fonctionnalités, performance, stabilité Retour d'expérience

  5. à quoi ça sert ? Elasticsearch

  6. ce que nous en faisons

  7. None
  8. beaucoup de données vites périmées

  9. MySQL et MongoDB

  10. Elasticsearch

  11. Comment ?

  12. index permanents index éphémères

  13. hotels hotel_id address rating … ~580k docs

  14. hotels-20151013 hotel_id address rating search_id 9c8fa011649a-20151013

  15. des dizaines de process travaillent en secret

  16. results-20151013 hotel_id search_id partner price INSERT BULK INSERT BULK INSERT

    BULK
  17. hotels-20151013 hotel_id address rating search_id UPDATE BULK UPDATE BULK UPDATE

    BULK GROOVY
  18. def update = false def statuses = ['available','full','on_demand','error','pending']
 if ctx._source.ranking

    == null || ctx._source.ranking > ranking {
 update = true
 ctx._source.ranking = ranking
 }
 if ctx._source.best_price == null || ctx._source.best_price > best_price {
 update = true
 ctx._source.best_price = best_price
 } status_index = statuses.indexOf(status)
 if (status_index >= 0 && statuses.indexOf(ctx._source.status) > status_index) {
 update = true
 ctx._source.status = status
 }
 if (update == false) {
 ctx.op = "none"
 }
  19. hotels-20151013 hotel_id address rating search_id status partner best_price ranking +

  20. facettes agrégations

  21. 3-4 requêtes Elasticsearch en 1 requête HTTP

  22. None
  23. None
  24. Index datés

  25. templates foo-* foo-1 foo-2 foo-3

  26. alias foo-1 foo-2 foo-3 foo-4 { foo

  27. routing forcé GET /index?routing=9c8fa011649a-20151013

  28. Performance

  29. 1 nœud master pour l'usage courant

  30. 1 nœud secondaire en cas de besoin

  31. Stabilité

  32. fiabilité/prévisibilité

  33. API/fonctionnalités

  34. Merci

  35. [email protected] @jlecour jeremy.wordpress.com github.com/jlecour