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

    View Slide

  2. 0.90.6 1.0 1.3 1.7 2.0
    Elasticsearch

    View Slide

  3. Jérémy Lecour

    View Slide

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

    View Slide

  5. à quoi ça sert ?
    Elasticsearch

    View Slide

  6. ce que nous en faisons

    View Slide

  7. View Slide

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

    View Slide

  9. MySQL et MongoDB

    View Slide

  10. Elasticsearch

    View Slide

  11. Comment ?

    View Slide

  12. index permanents
    index éphémères

    View Slide

  13. hotels
    hotel_id
    address
    rating

    ~580k docs

    View Slide

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

    View Slide

  15. des dizaines de process
    travaillent en secret

    View Slide

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

    View Slide

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

    View Slide

  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"

    }

    View Slide

  19. hotels-20151013
    hotel_id
    address
    rating
    search_id
    status
    partner
    best_price
    ranking
    +

    View Slide

  20. facettes
    agrégations

    View Slide

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

    View Slide

  22. View Slide

  23. View Slide

  24. Index datés

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  28. Performance

    View Slide

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

    View Slide

  30. 1 nœud secondaire
    en cas de besoin

    View Slide

  31. Stabilité

    View Slide

  32. fiabilité/prévisibilité

    View Slide

  33. API/fonctionnalités

    View Slide

  34. Merci

    View Slide

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

    View Slide