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 full-size slide

  2. 0.90.6 1.0 1.3 1.7 2.0
    Elasticsearch

    View full-size slide

  3. Jérémy Lecour

    View full-size slide

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

    View full-size slide

  5. à quoi ça sert ?
    Elasticsearch

    View full-size slide

  6. ce que nous en faisons

    View full-size slide

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

    View full-size slide

  8. MySQL et MongoDB

    View full-size slide

  9. Elasticsearch

    View full-size slide

  10. index permanents
    index éphémères

    View full-size slide

  11. hotels
    hotel_id
    address
    rating

    ~580k docs

    View full-size slide

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

    View full-size slide

  13. des dizaines de process
    travaillent en secret

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  16. 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 full-size slide

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

    View full-size slide

  18. facettes
    agrégations

    View full-size slide

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

    View full-size slide

  20. Index datés

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  25. 1 nœud secondaire
    en cas de besoin

    View full-size slide

  26. fiabilité/prévisibilité

    View full-size slide

  27. API/fonctionnalités

    View full-size slide

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

    View full-size slide