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…

7d1caf9df777b3b2cf474ff743494335?s=128

Jérémy Lecour

October 13, 2015
Tweet

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. jeremy.lecour@gmail.com @jlecour jeremy.wordpress.com github.com/jlecour