SlideShare uma empresa Scribd logo
1 de 60
Baixar para ler offline
Elasticsearch
de dentro para fora
OPA!
Sou o Waldemar Neto
Engenheiro e consultor na ThoughtWorks.
http://walde.co
2
Índice invertido
Term Doc_1 Doc_2 Doc_3
Waldemar x x
Bicicleta x x x
Avião x
3
1. Score
1.1. Bicicleta 3
1.2. Waldemar 2
1.3. Avião 1
Overview do ecossistema4
CLUSTER
NODE
SHARD REPLICA
Lucene
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"
o campo _source
O campo source é compactado e jogado no disco.
o campo _all
O campo _all e fusão de todos os campos do documento em
um só.
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?
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
como a busca é real-time?
index vs shard
● Lucene Index é o que conhecemos como shard
Documentos prontos para serem commitados
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.
como a busca é real-time?
processo de commit
Depois de um commit o novo segment é adicionado ao
commit-point e o buffer é limpo.
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.
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.
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.
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.
como a busca é real-time?
Translog
● Quando um documento é indexado ele é adicionado ao buffer de memória e
também ao translog.
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
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
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
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.
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.
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.
como a busca é real-time?
Segment Merging
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
● 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
Filter
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.
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
Quando usar filtros?
● Termos booleanos
● Termos que não mudam
● Termos que determinam regras
● Ranges
Caching
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.
TIPOS DE CACHE
● Shard-Level cache >= 1.4
● Filter Cache
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.
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.
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
Query
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.
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
Query vs filter
Query vs Filter
score
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.
TF - term frequency
_search?name=test
{
"_id": 1,
"name": "this name is a test or not a test"
}
2
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
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"
}
Analyzers impact
Impacto de analyzers
Prefira custo no index do que na busca.
PAGINATION
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.
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.
PREFIX VS REGEX
VS NGRAM
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
PREFIX QUERY
PREFIX = EX;
UMA FRASE DE EXEMPLO
Retorna o ID
WILDCARD e REGEXP query
● Funcionam da mesma maneira que a Prefix Query
● Aceitam expressões regulares como * [0-9]
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
Na produção
artigo publicado no iMasters sobre boas práticas
ATÉ MAIS PESSOAL!!!

Mais conteúdo relacionado

Destaque

Elasticsearch Aggregations
Elasticsearch AggregationsElasticsearch Aggregations
Elasticsearch AggregationsWaldemar Neto
 
Latinoware2013 - Implentando Plugin de Geolocalização no Zabbix
Latinoware2013 - Implentando Plugin de Geolocalização no Zabbix Latinoware2013 - Implentando Plugin de Geolocalização no Zabbix
Latinoware2013 - Implentando Plugin de Geolocalização no Zabbix aristotelesaraujo
 
Monitoramento com ELK - Elasticsearch - Logstash - Kibana
Monitoramento com ELK - Elasticsearch - Logstash - KibanaMonitoramento com ELK - Elasticsearch - Logstash - Kibana
Monitoramento com ELK - Elasticsearch - Logstash - KibanaWaldemar Neto
 
Projeto Zabbix: Conhecendo a ferramenta
Projeto Zabbix: Conhecendo a ferramentaProjeto Zabbix: Conhecendo a ferramenta
Projeto Zabbix: Conhecendo a ferramentaAécio Pires
 
Zabbix - Alem da Infraestrutura - Parte 2
Zabbix - Alem da Infraestrutura - Parte 2Zabbix - Alem da Infraestrutura - Parte 2
Zabbix - Alem da Infraestrutura - Parte 2Luiz Sales
 
Zabbix meetup RJ: Integrações e opensource
Zabbix meetup RJ: Integrações e opensourceZabbix meetup RJ: Integrações e opensource
Zabbix meetup RJ: Integrações e opensourceFilipe Paternot
 
Gerenciamento de Redes com Zabbix
Gerenciamento de Redes com ZabbixGerenciamento de Redes com Zabbix
Gerenciamento de Redes com ZabbixAndré Déo
 
Zabbix meetup RJ: Infra, tuning e documentação
Zabbix meetup RJ: Infra, tuning e documentaçãoZabbix meetup RJ: Infra, tuning e documentação
Zabbix meetup RJ: Infra, tuning e documentaçãoFilipe Paternot
 
Monitoramento Opensource com Zabbix
Monitoramento Opensource com ZabbixMonitoramento Opensource com Zabbix
Monitoramento Opensource com ZabbixRenato Batista
 
Aula 008 - Gerenciamento e Desempenho de Redes: Halexsandro Sales
Aula 008 - Gerenciamento e Desempenho de Redes: Halexsandro SalesAula 008 - Gerenciamento e Desempenho de Redes: Halexsandro Sales
Aula 008 - Gerenciamento e Desempenho de Redes: Halexsandro SalesVerdanatech Soluções em TI
 
Workshop de Monitoramento com Zabbix e OCS
Workshop de Monitoramento com Zabbix e OCSWorkshop de Monitoramento com Zabbix e OCS
Workshop de Monitoramento com Zabbix e OCSLinux Solutions
 
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0aristotelesaraujo
 
Zabbix: Apresentação meetup Fortaleza/CE (Brasil)
Zabbix: Apresentação meetup Fortaleza/CE (Brasil)Zabbix: Apresentação meetup Fortaleza/CE (Brasil)
Zabbix: Apresentação meetup Fortaleza/CE (Brasil)Werneck Costa
 
Monitoramento de ativos com zabbix
Monitoramento de ativos com zabbixMonitoramento de ativos com zabbix
Monitoramento de ativos com zabbixRafael Gomes
 
Zabbix API at FISL12 by Takanori Suzuki
Zabbix API at FISL12 by Takanori SuzukiZabbix API at FISL12 by Takanori Suzuki
Zabbix API at FISL12 by Takanori Suzukitakanori suzuki
 
Zabbix Smart problem detection - FISL 2015 workshop
Zabbix Smart problem detection - FISL 2015 workshopZabbix Smart problem detection - FISL 2015 workshop
Zabbix Smart problem detection - FISL 2015 workshopZabbix
 
Monitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELMonitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELAlessandro Silva
 

Destaque (20)

Elasticsearch Aggregations
Elasticsearch AggregationsElasticsearch Aggregations
Elasticsearch Aggregations
 
Palestra Zabbix no 12 Geinfo (2013)
Palestra Zabbix no 12 Geinfo (2013)Palestra Zabbix no 12 Geinfo (2013)
Palestra Zabbix no 12 Geinfo (2013)
 
Latinoware2013 - Implentando Plugin de Geolocalização no Zabbix
Latinoware2013 - Implentando Plugin de Geolocalização no Zabbix Latinoware2013 - Implentando Plugin de Geolocalização no Zabbix
Latinoware2013 - Implentando Plugin de Geolocalização no Zabbix
 
Monitoramento com ELK - Elasticsearch - Logstash - Kibana
Monitoramento com ELK - Elasticsearch - Logstash - KibanaMonitoramento com ELK - Elasticsearch - Logstash - Kibana
Monitoramento com ELK - Elasticsearch - Logstash - Kibana
 
Projeto Zabbix: Conhecendo a ferramenta
Projeto Zabbix: Conhecendo a ferramentaProjeto Zabbix: Conhecendo a ferramenta
Projeto Zabbix: Conhecendo a ferramenta
 
Zabbix - Alem da Infraestrutura - Parte 2
Zabbix - Alem da Infraestrutura - Parte 2Zabbix - Alem da Infraestrutura - Parte 2
Zabbix - Alem da Infraestrutura - Parte 2
 
Zabbix meetup RJ: Integrações e opensource
Zabbix meetup RJ: Integrações e opensourceZabbix meetup RJ: Integrações e opensource
Zabbix meetup RJ: Integrações e opensource
 
Aula 009 de Gerenciamento de Redes - SNMP
Aula 009 de Gerenciamento de Redes - SNMPAula 009 de Gerenciamento de Redes - SNMP
Aula 009 de Gerenciamento de Redes - SNMP
 
Gerenciamento de Redes com Zabbix
Gerenciamento de Redes com ZabbixGerenciamento de Redes com Zabbix
Gerenciamento de Redes com Zabbix
 
Zabbix meetup RJ: Infra, tuning e documentação
Zabbix meetup RJ: Infra, tuning e documentaçãoZabbix meetup RJ: Infra, tuning e documentação
Zabbix meetup RJ: Infra, tuning e documentação
 
Monitoramento Opensource com Zabbix
Monitoramento Opensource com ZabbixMonitoramento Opensource com Zabbix
Monitoramento Opensource com Zabbix
 
Aula 008 - Gerenciamento e Desempenho de Redes: Halexsandro Sales
Aula 008 - Gerenciamento e Desempenho de Redes: Halexsandro SalesAula 008 - Gerenciamento e Desempenho de Redes: Halexsandro Sales
Aula 008 - Gerenciamento e Desempenho de Redes: Halexsandro Sales
 
Workshop de Monitoramento com Zabbix e OCS
Workshop de Monitoramento com Zabbix e OCSWorkshop de Monitoramento com Zabbix e OCS
Workshop de Monitoramento com Zabbix e OCS
 
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
 
Zabbix: Apresentação meetup Fortaleza/CE (Brasil)
Zabbix: Apresentação meetup Fortaleza/CE (Brasil)Zabbix: Apresentação meetup Fortaleza/CE (Brasil)
Zabbix: Apresentação meetup Fortaleza/CE (Brasil)
 
Monitoramento de ativos com zabbix
Monitoramento de ativos com zabbixMonitoramento de ativos com zabbix
Monitoramento de ativos com zabbix
 
Zabbix API at FISL12 by Takanori Suzuki
Zabbix API at FISL12 by Takanori SuzukiZabbix API at FISL12 by Takanori Suzuki
Zabbix API at FISL12 by Takanori Suzuki
 
Zabbix Smart problem detection - FISL 2015 workshop
Zabbix Smart problem detection - FISL 2015 workshopZabbix Smart problem detection - FISL 2015 workshop
Zabbix Smart problem detection - FISL 2015 workshop
 
Monitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELMonitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHEL
 
ELK introduction
ELK introductionELK introduction
ELK introduction
 

Semelhante a Elasticsearch de dentro para fora

Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisJefferson Martins de Andrade
 
Bancos de dados analíticos open source
Bancos de dados analíticos open sourceBancos de dados analíticos open source
Bancos de dados analíticos open sourceMatheus Espanhol
 
Lecture 4-Processos e Threads pt mz.pptx
Lecture 4-Processos e Threads pt mz.pptxLecture 4-Processos e Threads pt mz.pptx
Lecture 4-Processos e Threads pt mz.pptxcassamo2
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
Estou seguro com no sql
Estou seguro com no sqlEstou seguro com no sql
Estou seguro com no sqlRafael Redondo
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift PrimerMateus Aubin
 
Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlHelder Lopes
 
Pesquisa do Sapo
Pesquisa do SapoPesquisa do Sapo
Pesquisa do Sapocodebits
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2Paulo Fonseca
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2Paulo Fonseca
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 

Semelhante a Elasticsearch de dentro para fora (20)

Google File System
Google File SystemGoogle File System
Google File System
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | Florianópolis
 
Treinamento Oracle GoldenGate 19c
Treinamento Oracle GoldenGate 19cTreinamento Oracle GoldenGate 19c
Treinamento Oracle GoldenGate 19c
 
Bancos de dados analíticos open source
Bancos de dados analíticos open sourceBancos de dados analíticos open source
Bancos de dados analíticos open source
 
teAula 11
teAula 11teAula 11
teAula 11
 
Gerencia de Memória Opensolaris
Gerencia de Memória OpensolarisGerencia de Memória Opensolaris
Gerencia de Memória Opensolaris
 
Lecture 4-Processos e Threads pt mz.pptx
Lecture 4-Processos e Threads pt mz.pptxLecture 4-Processos e Threads pt mz.pptx
Lecture 4-Processos e Threads pt mz.pptx
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
Gfs slides
Gfs slidesGfs slides
Gfs slides
 
Estou seguro com no sql
Estou seguro com no sqlEstou seguro com no sql
Estou seguro com no sql
 
Hd’s e armazenamento
Hd’s e armazenamentoHd’s e armazenamento
Hd’s e armazenamento
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift Primer
 
Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySql
 
Processos e threads cap 02 (i unidade)
Processos e threads   cap 02 (i unidade)Processos e threads   cap 02 (i unidade)
Processos e threads cap 02 (i unidade)
 
Pesquisa do Sapo
Pesquisa do SapoPesquisa do Sapo
Pesquisa do Sapo
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
pgDay Campinas – 2015
pgDay Campinas – 2015pgDay Campinas – 2015
pgDay Campinas – 2015
 

Mais de Waldemar Neto

12 Factor App Docker na Cloud e outras buzzwords
12 Factor App Docker na Cloud e outras buzzwords12 Factor App Docker na Cloud e outras buzzwords
12 Factor App Docker na Cloud e outras buzzwordsWaldemar Neto
 
12 Factor APPS, docker na cloud e outras buzzwords
12 Factor APPS, docker na cloud e outras buzzwords12 Factor APPS, docker na cloud e outras buzzwords
12 Factor APPS, docker na cloud e outras buzzwordsWaldemar Neto
 
Construindo APIs testáveis com Node.js - RSJS
Construindo APIs testáveis com Node.js - RSJSConstruindo APIs testáveis com Node.js - RSJS
Construindo APIs testáveis com Node.js - RSJSWaldemar Neto
 
Symfony2 e Elasticsearch com FosElasticaBundle
Symfony2 e Elasticsearch com FosElasticaBundleSymfony2 e Elasticsearch com FosElasticaBundle
Symfony2 e Elasticsearch com FosElasticaBundleWaldemar Neto
 
No mundo das ap is com Restful webservices
No mundo das ap is com Restful webservicesNo mundo das ap is com Restful webservices
No mundo das ap is com Restful webservicesWaldemar Neto
 
Cakephp 3.0 o bolo ainda serve muita gente
Cakephp 3.0 o bolo ainda serve muita genteCakephp 3.0 o bolo ainda serve muita gente
Cakephp 3.0 o bolo ainda serve muita genteWaldemar Neto
 
No sql no mundo da persistencia poliglota
No sql no mundo da persistencia poliglotaNo sql no mundo da persistencia poliglota
No sql no mundo da persistencia poliglotaWaldemar Neto
 
Android para padawns
Android para padawnsAndroid para padawns
Android para padawnsWaldemar Neto
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 
CakePHP workshop ifsul
CakePHP workshop ifsulCakePHP workshop ifsul
CakePHP workshop ifsulWaldemar Neto
 
O que é esteganografia
O que é esteganografiaO que é esteganografia
O que é esteganografiaWaldemar Neto
 
Divisão de conhecimento e open source
Divisão de conhecimento e open sourceDivisão de conhecimento e open source
Divisão de conhecimento e open sourceWaldemar Neto
 

Mais de Waldemar Neto (13)

12 Factor App Docker na Cloud e outras buzzwords
12 Factor App Docker na Cloud e outras buzzwords12 Factor App Docker na Cloud e outras buzzwords
12 Factor App Docker na Cloud e outras buzzwords
 
12 Factor APPS, docker na cloud e outras buzzwords
12 Factor APPS, docker na cloud e outras buzzwords12 Factor APPS, docker na cloud e outras buzzwords
12 Factor APPS, docker na cloud e outras buzzwords
 
Construindo APIs testáveis com Node.js - RSJS
Construindo APIs testáveis com Node.js - RSJSConstruindo APIs testáveis com Node.js - RSJS
Construindo APIs testáveis com Node.js - RSJS
 
Symfony2 e Elasticsearch com FosElasticaBundle
Symfony2 e Elasticsearch com FosElasticaBundleSymfony2 e Elasticsearch com FosElasticaBundle
Symfony2 e Elasticsearch com FosElasticaBundle
 
O que é docker?
O que é docker?O que é docker?
O que é docker?
 
No mundo das ap is com Restful webservices
No mundo das ap is com Restful webservicesNo mundo das ap is com Restful webservices
No mundo das ap is com Restful webservices
 
Cakephp 3.0 o bolo ainda serve muita gente
Cakephp 3.0 o bolo ainda serve muita genteCakephp 3.0 o bolo ainda serve muita gente
Cakephp 3.0 o bolo ainda serve muita gente
 
No sql no mundo da persistencia poliglota
No sql no mundo da persistencia poliglotaNo sql no mundo da persistencia poliglota
No sql no mundo da persistencia poliglota
 
Android para padawns
Android para padawnsAndroid para padawns
Android para padawns
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
CakePHP workshop ifsul
CakePHP workshop ifsulCakePHP workshop ifsul
CakePHP workshop ifsul
 
O que é esteganografia
O que é esteganografiaO que é esteganografia
O que é esteganografia
 
Divisão de conhecimento e open source
Divisão de conhecimento e open sourceDivisão de conhecimento e open source
Divisão de conhecimento e open source
 

Elasticsearch de dentro para fora

  • 2. OPA! Sou o Waldemar Neto Engenheiro e consultor na ThoughtWorks. http://walde.co 2
  • 3. Índice invertido Term Doc_1 Doc_2 Doc_3 Waldemar x x Bicicleta x x x Avião x 3 1. Score 1.1. Bicicleta 3 1.2. Waldemar 2 1.3. Avião 1
  • 6. 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"
  • 7. o campo _source O campo source é compactado e jogado no disco.
  • 8. o campo _all O campo _all e fusão de todos os campos do documento em um só.
  • 9. 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?
  • 10. 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
  • 11. como a busca é real-time? index vs shard ● Lucene Index é o que conhecemos como shard Documentos prontos para serem commitados
  • 12. 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.
  • 13. como a busca é real-time? processo de commit Depois de um commit o novo segment é adicionado ao commit-point e o buffer é limpo.
  • 14. 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.
  • 15. 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.
  • 16. 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.
  • 17. 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.
  • 18. como a busca é real-time? Translog ● Quando um documento é indexado ele é adicionado ao buffer de memória e também ao translog.
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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.
  • 23. 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.
  • 24. 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.
  • 25. como a busca é real-time? Segment Merging
  • 26. 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
  • 27. ● 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
  • 29. 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.
  • 30. 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
  • 31. Quando usar filtros? ● Termos booleanos ● Termos que não mudam ● Termos que determinam regras ● Ranges
  • 33. 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.
  • 34. TIPOS DE CACHE ● Shard-Level cache >= 1.4 ● Filter Cache
  • 35. 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.
  • 36. 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.
  • 37. 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
  • 38. Query
  • 39. 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.
  • 40. 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
  • 42.
  • 44. score
  • 45. 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.
  • 46. TF - term frequency _search?name=test { "_id": 1, "name": "this name is a test or not a test" } 2
  • 47. 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
  • 48. 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" }
  • 50. Impacto de analyzers Prefira custo no index do que na busca.
  • 52. 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.
  • 53. 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.
  • 55. 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
  • 56. PREFIX QUERY PREFIX = EX; UMA FRASE DE EXEMPLO Retorna o ID
  • 57. WILDCARD e REGEXP query ● Funcionam da mesma maneira que a Prefix Query ● Aceitam expressões regulares como * [0-9]
  • 58. 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
  • 59. Na produção artigo publicado no iMasters sobre boas práticas