Top Banner
Elasticsearch de dentro para fora
60

Elasticsearch shards, index, filters and queries

Apr 09, 2017

Download

Technology

Waldemar Neto
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Elasticsearch shards, index, filters and queries

Elasticsearch de dentro para fora

Page 2: Elasticsearch shards, index, filters and queries

OPA!Sou o Waldemar NetoEngenheiro e consultor na ThoughtWorks.http://walde.co

2

Page 3: Elasticsearch shards, index, filters and queries

Índice invertido

Term Doc_1 Doc_2 Doc_3

Waldemar x x

Bicicleta x x x

Avião x

3

1. Score1.1. Bicicleta 31.2. Waldemar 21.3. Avião 1

Page 4: Elasticsearch shards, index, filters and queries

Overview do ecossistema4

CLUSTER

NODE

SHARD REPLICA

Page 5: Elasticsearch shards, index, filters and queries

Lucene

Page 6: Elasticsearch shards, index, filters and queries

Como o Lucene vê os documentos

● O Lucene não separa tipos nem objetos.● O Lucene é apenas chave e valor.● Como ele vê objetos?

○ produto.nome = "test"

Page 7: Elasticsearch shards, index, filters and queries

o campo _source

O campo source é compactado e jogado no disco.

Page 8: Elasticsearch shards, index, filters and queries

o campo _all

O campo _all e fusão de todos os campos do documento em um só.

Page 9: Elasticsearch shards, index, filters and queries

Como o SHARD funciona

● Como a busca é "real-time"?● Como as operações de CRUD são "real-time"?● Por que quando deletamos dados o espaço em disco

não fica livre na hora?● O que o refresh, flush e optimize fazem e quando devo

usar eles?

Page 10: Elasticsearch shards, index, filters and queries

como a busca é real-time?

● Inverted index é imutável● Como indexar dados sem recriar todo o inverted index?● O conceito per-segment

○ Um segment é um inverted index○ um index no Lucene é uma coleção de segments○ Um commit point é um arquivo que lista todos os segments

Page 11: Elasticsearch shards, index, filters and queries

como a busca é real-time? index vs shard

● Lucene Index é o que conhecemos como shard

Documentos prontos para serem commitados

Page 12: Elasticsearch shards, index, filters and queries

como a busca é real-time? processo de commit

● Novos documentos são coletados e adicionados a um buffer de memória.● Frequentemente o buffer é commitado

○ Um novo segment é escrito em disco.○ Um novo commit-point é escrito incluindo o novo segment.○ O fsync entra em ação, e todas as escritas esperando no file-system cache

são escritas no disco para garantir que eles estão fisicamente salvos.● O novo segment é aberto, fazendo com que os documentos sejam liberados para a

busca.● O buffer de memória é liberado para receber novos documentos.

Page 13: Elasticsearch shards, index, filters and queries

como a busca é real-time? processo de commit

Depois de um commit o novo segment é adicionado ao commit-point e o buffer é limpo.

Page 14: Elasticsearch shards, index, filters and queries

como a busca é real-time? deletes e updates

● Segments são imutáveis○ documentos não podem ser removidos de segments velhos○ segments não podem ser alterados para refletir a versão mais recente de um

documento.● Cada commit-point cria um arquivo .del onde é listado todos os documentos

deletados e a qual segment pertencem.○ Quando um documento é deletado ele basicamente é marcado como

deletado no arquivo .del○ Um documento deletado ainda ira ser visto pelas queries mas sera removido

dos resultados.● Updates funcionam de uma maneira parecida.

○ Quando um documento é atualizado a versão antiga é marcada como deletada no arquivo .del

○ A nova versão do documento é indexada em um novo segment.

Page 15: Elasticsearch shards, index, filters and queries

como a busca é real-time? o gargalo do disco

● Aguardar os dados criados serem escritos em disco poderia levar mais de um minuto.

● Commitar o novo segment para o disco depende do fsync.○ esse processo é custoso e não pode ser feito toda vez que um documento é

indexado.● Entre o elasticsearch e o disco fica o file-system cache

○ Novos segments são escritos no file-system cache primeiro.○ Depois são escritos no disco, mas já no file-system cache ficam abertos para

busca.

Page 16: Elasticsearch shards, index, filters and queries

como a busca é real-time? Refresh API

● Refresh é o processo de escrever e criar um novo segment○ Por padrão o refresh em cada shard acontece a cada segundo.○ As mudanças não são vistas imediatamente.

● Forçar o refresh em índices com muitas escritas pode causar sérios problemas de performance.

Page 17: Elasticsearch shards, index, filters and queries

como a busca é real-time? Refresh API

● Refresh é o processo de escrever e criar um novo segment.○ Por padrão cada o refresh em cada shard acontece a cada segundo.○ As mudanças não são vistas imediatamente.

● Forçar o refresh em índices com muitas escritas pode causar sérios problemas de performance.

Page 18: Elasticsearch shards, index, filters and queries

como a busca é real-time? Translog

● Quando um documento é indexado ele é adicionado ao buffer de memória e também ao translog.

Page 19: Elasticsearch shards, index, filters and queries

como a busca é real-time? translog

● A cada segundo o shard é atualizado pela refresh api○ Os documentos no buffer de memória são escritos em um novo segment

(mas não escritos em disco)○ O segment é liberado para ser buscado○ O buffer de memória é limpo

Page 20: Elasticsearch shards, index, filters and queries

como a busca é real-time? Translog

● O processo continua com mais documentos sendo adicionados para o buffer de memória e também ao translog

Page 21: Elasticsearch shards, index, filters and queries

como a busca é real-time? Translog

● Quando o translog se torna grande o index(lucene) passa pelo processo de flush e um novo translog é criado.○ Todos os documentos no buffer de memória são adicionados a um segment○ O buffer é limpo○ O commit-point é escrito no disco○ O file-system cache passa por um flush usando o fsync○ O translog é deletado

Page 22: Elasticsearch shards, index, filters and queries

como a busca é real-time? Translog

● O translog garante que as mudanças vão estar disponíveis○ Quando buscamos/editamos/deletamos um documento por ID ele verifica

primeiro no translog por mudanças mais atuais antes de buscar do segment.

Page 23: Elasticsearch shards, index, filters and queries

como a busca é real-time? Flush API

● A ação de fazer um commit e limpar o translog é chamada de flush.○ Shards fazem flush a cada 30 minutos automaticamente, ou quando o

translog se torna grande.

Page 24: Elasticsearch shards, index, filters and queries

como a busca é real-time? Segment Merging

● Como segments são criados a cada segundo, não demora para que tenhamos vários deles.○ Cada segment consome I/O, memoria e CPU.○ Cada busca tem que checar todos os segments, quanto mais segments mais

lento sera.● Os segments de tamanhos pareciados são mesclados em um grande segment● Esse é o momento que os documentos deletados são removidos do file system.

○ Documentos deletados e versões antigas não são copiadas para o segment grande.

Page 25: Elasticsearch shards, index, filters and queries

como a busca é real-time? Segment Merging

Page 26: Elasticsearch shards, index, filters and queries

como a busca é real-time? Segment Merging

● É feito flush do novo segment● Um novo commit-point é feito com esse

segment e os velhos e menores são removidos● O novo segment é liberado pra busca

Page 27: Elasticsearch shards, index, filters and queries

● A optimize api força o segment merging○ É possível limitar o numero de segments forçando os merges a

acontecerem mais frequentemente.● Reduzindo o numero de segments aumenta a velocidade da busca.● Não deve ser usado em índices com muita escrita pois atrapalha o processo

de merging.

como a busca é real-time? Optimize API

Page 28: Elasticsearch shards, index, filters and queries

Filter

Page 29: Elasticsearch shards, index, filters and queries

O que são filtros?

Filtros são a melhor forma para trabalhar com "valores exatos" pois eles acessam diretamente o nível do Lucene e dispensam o nível de analise, além de serem cacheados por padrão.

Page 30: Elasticsearch shards, index, filters and queries

COMO OS FILTROS FUNCIONAM

● Combinação de termos exatos○ Tipos como String, Numérico, Booleano, Ranges

são combinados pelo tipo.● Executado ao nível do Lucene (search level)● Podem ser cacheados

Page 31: Elasticsearch shards, index, filters and queries

Quando usar filtros?

● Termos booleanos● Termos que não mudam● Termos que determinam regras● Ranges

Page 32: Elasticsearch shards, index, filters and queries

Caching

Page 33: Elasticsearch shards, index, filters and queries

O que é cache?

Resultados guardados em memória, desta maneira o shard não precisa calcular as resultados novamente nem fazer o calculo de relevância.

Page 34: Elasticsearch shards, index, filters and queries

TIPOS DE CACHE

● Shard-Level cache >= 1.4● Filter Cache

Page 35: Elasticsearch shards, index, filters and queries

Shard Level cache

Quando uma busca é executada dentro de um index, cada shard executa sua busca localmente e calcula seu resultado. Esse resultado é mesclado com o resultado global no coordinating node.

Page 36: Elasticsearch shards, index, filters and queries

Filter Caching

Filtros não calculam relevância e não passam por analise, dessa maneira eles podem ser cacheados pois na maioria das vezes eles devolvem o mesmo resultado.

Page 37: Elasticsearch shards, index, filters and queries

Filtros que não são cacheados

Alguns filtros não são cacheados por padrão pois são usados para buscas que mudam a cada chamada como por exemplo AND, OR e RANGE.É possível forçar o cache usando "_cache" : true

Page 38: Elasticsearch shards, index, filters and queries

Query

Page 39: Elasticsearch shards, index, filters and queries

O que são queries?

● Queries determinam como a busca deve se comportar e garantem que o conteúdo buscado vai ser procurado e comparado da maneira certa.

● Elas conseguem calcular o quão relevante aquele resultado é para a busca que foi feita.

Page 40: Elasticsearch shards, index, filters and queries

Quando usar queries?

● Quando relevância é importante● Quando é necessário mudar as regras do termo como

linguagens e sinônimos● Quando o full text search é importante● Quando analisar os termos é importante

Page 41: Elasticsearch shards, index, filters and queries

Query vs filter

Page 42: Elasticsearch shards, index, filters and queries
Page 43: Elasticsearch shards, index, filters and queries

Query vs Filter

Page 44: Elasticsearch shards, index, filters and queries

score

Page 45: Elasticsearch shards, index, filters and queries

Score

Score é relacionado a relevância do resultado de uma busca para com o que foi buscado. São usados dois padrões para determinar relevância em uma Query que são TF e IDF.

Page 46: Elasticsearch shards, index, filters and queries

TF - term frequency

_search?name=test{ "_id": 1,

"name": "this name is a test or not a test"}

2

Page 47: Elasticsearch shards, index, filters and queries

IDF - Inverse Document Frequency

_search?name=test{

"_id": 1,

"name": "this name is a test or not a test"

}, {

"_id": 2,

"name": "this name is a test"

}

2

1

Page 48: Elasticsearch shards, index, filters and queries

Field Lenght Norm

_search?name=test{

"_id": 1,

"name": "this name is a test or not a test"

}, {

"_id": 2,

"name": "this name is a test"

}

Page 49: Elasticsearch shards, index, filters and queries

Analyzers impact

Page 50: Elasticsearch shards, index, filters and queries

Impacto de analyzers

Prefira custo no index do que na busca.

Page 51: Elasticsearch shards, index, filters and queries

PAGINATION

Page 52: Elasticsearch shards, index, filters and queries

O PROBLEMA DO SIZE/FROM

● Cada shard calcula seu size● Cada shard gera seus próprios resultados limitados● Todos os resultados são mesclados no coordinator node● O shard precisa percorrer os dados

○ Imagine que queremos os resultados de 1010 até 1020

■ Cada shard vai produzir 1020 resultados○ O cordinator node vai receber 5100 resultados caso

tenha 5 shards■ Vai remover 5090 resultados para produzir

apenas 10.

Page 53: Elasticsearch shards, index, filters and queries

QUE TAL SCAN/SCROLL?

● A scroll api é usada pelo elastic para buscar grandes números de documentos.○ Uma busca por scroll permite que façamos uma busca inicial e continuemos

buscando até que não tenha mais resultados.■ Mais ou menos como um cursor em bancos de dados tradicionais

○ Depois da busca inicial ser feita as próximas não irão pegar atualizações de documentos caso tenha neste intervalo.

● O scan permite que desativemos o sorting do elastic e apenas retorne os proximos dados do scroll.

● Para usar basta fazer uma busca colocando o search_type como scan e passando o parâmetro scroll dizendo quanto tempo esse scroll pode ficar aberto.

Page 54: Elasticsearch shards, index, filters and queries

PREFIX VS REGEX VS NGRAM

Page 55: Elasticsearch shards, index, filters and queries

Prefix Query

● Prefix queries rodam em baixo nível ou seja não passam por analyzers.● Por padrão não geram relevância, é mais como um filtro do que uma query. ● Mas como funciona?

○ O inverted index é uma lista de termos.○ Vários termos consistem uma frase e pertencem a um campo.

● Mas como busca?○ Lista todos os termos.○ Checa o primeiro para ver se começa com o prefix informado.○ Pega o id do documento que o term pertence○ Move para o próximo○ Se ele começar com o prefix informado pega o id○ Move para o próximo○ Até acabar

Page 56: Elasticsearch shards, index, filters and queries

PREFIX QUERY

PREFIX = EX;UMA FRASE DE EXEMPLO

Retorna o ID

Page 57: Elasticsearch shards, index, filters and queries

WILDCARD e REGEXP query

● Funcionam da mesma maneira que a Prefix Query● Aceitam expressões regulares como * [0-9]

Page 58: Elasticsearch shards, index, filters and queries

NGRAMS

● Buscas baseadas em digitação são incrementais○ exemplo: waldemar = wal ald lde dem ema mar

■ São produzidos 6 terms para formar o term desejado● Só podem ser buscadas coisas que estão indexadas

○ Por que não indexar pedaços de terms?● Edge ngram

○ Inicia do começo da palavra

Page 60: Elasticsearch shards, index, filters and queries

ATÉ MAIS PESSOAL!!!