SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
BUSCA E ANÁLISE DE DADOS ESCALÁVEL EM 
TEMPO-REAL 
Aécio Santos 
@aeciosan 
aecio.solando@gmail.com
Como fazer busca textual e análise de dados em tempo-real em 
grandes bases dados?
BUSCA E ANÁLISE DE DADOS ESCALÁVEL EM 
TEMPO-REAL 
Busca por termos, intervalos numéricos, datas, posicão 
geográfica, relevância, etc 
Execução consultas ad-hoc, agregação e visualização de dados 
Busca distribuída com replicação e sharding automáticos 
Near real-time, latência pequena, respostas em poucos ms
API 
REST 
Java 
Python 
Ruby 
PHP 
JavaScript 
...
INDEXAÇÃO DE DOCUMENTOS 
API 
PUT /{index}/{type}/{?id} 
Exemplos 
$ curl ­XPUT 
'http://localhost:9200/twitter/tweet/1' ­d 
'{ 
"user" : "aeciosan", 
"post_date" : "2014­08­28T14: 
00:00", 
"message" : "Testando o ElasticSearch" 
}' 
$ curl ­XPUT 
'http://localhost:9200/twitter/user/aeciosan' ­d 
'{ 
"user" : "aeciosan", 
"bio" : "Software Engineer at Zunnit Technologies" 
}
RECUPERAÇÃO DE DOCUMENTOS 
API 
GET /{index}/{type}/{id} 
Exemplo 
curl ­XGET 
'http://localhost:9200/twitter/tweet/1' 
{ 
"_index" : "twitter", 
"_type" : "tweet", 
"_id" : "1", 
"_version" : 1, 
"found": true, 
"_source" : { 
"user" : "aeciosan", 
"post_date" : "2014­08­28T14: 
00:00", 
"message" : "Testando o ElasticSearch" 
} 
}'
BUSCA 
API 
GET /{index}/_search 
GET /{index}/{type}/_search 
Exemplos 
$ curl ­XGET 
'http://localhost:9200/twitter/_search?q=user:aeciosan' 
$ curl ­XGET 
'http://localhost:9200/twitter/tweet,user/_search?q=user:aeciosan' 
$ curl ­XGET 
'http://localhost:9200/_all/tweet/_search?q=message:elasticsearch' 
$ curl ­XPOST 
'http://localhost:9200/twitter/tweet/_search' ­d 
'{ 
"query" : { 
"term" : { "message" : "elasticsearch" } 
} 
}'
BUSCA 
Vários de tipos de queries e filtros disponíveis 
bool 
fuzzy 
geoshape 
more like this 
range 
regexp 
wildcard 
...
BUSCA 
Resposta 
{ 
[...] 
"hits": [ 
{ 
"_index": "twitter", 
"_type": "tweet", 
"_id": "1", 
"_score": 0.15342641, 
"_source": { 
"user": "aeciosan", 
"post_date": "2014­08­28T14: 
00:00", 
"message": "Testando o ElasticSearch" 
} 
}, 
{ 
"_index": "twitter", 
"_type": "tweet", 
"_id": "2", 
"_score": 0.11506981, 
"_source": { 
"user": "aeciosan", 
"post_date": "2014­08­28T14: 
01:00", 
"message": "Apresentação sobre ElasticSearch no BH­TEC 
Talks" 
} 
} 
] 
}
AGREGAÇÕES 
Computações sobre os resultados de uma busca 
Tipos: 
Metrics 
Bucketing
EXEMPLO: DADOS 
698 documentos: dep_federal 
POST /eleicoes2014/dep_federal 
{ 
"partido": "PARTIDO", 
"nome": "NOME", 
"numero": 9999, 
"coligacao": "PARTIDO1 / PARTIDO2 / PARTIDO3" 
} 
1200 documentos: dep_estadual 
POST /eleicoes2014/dep_estadual 
{ 
"partido": "PARTIDO", 
"nome": "NOME", 
"numero": 99999, 
"coligacao": "PARTIDO1 / PARTIDO2 / PARTIDO3" 
}
EXEMPLO 1 
POST /eleicoes2014/_search?q=nome:joao 
{ 
"size": 2, 
"aggregations": { 
"tipo_de_candidato": { 
"terms": { 
"field": "_type" 
} 
} 
} 
}
EXEMPLO 1: RESULTADO 
{ 
[...], 
"aggregations": { 
"tipo_de_candidato": { 
"buckets": [ 
{ 
"key": "dep_estadual", 
"doc_count": 6 
}, 
{ 
"key": "dep_federal", 
"doc_count": 2 
} 
] 
} 
} 
}
EXEMPLO 2 
POST /eleicoes2014/_search 
{ 
"size": 0, 
"aggregations": { 
"tipo_de_candidato": { 
"terms": { 
"field": "_type" 
}, 
"aggregations": { 
"por_partido": { 
"terms": { 
"field": "partido", 
"size":2 
} 
}, 
"por_coligacao": { 
"terms": { 
"field": "coligacao", 
"size":2 
} 
}, 
"numero_stats": { 
"stats": { 
"field": "numero" 
} 
} 
} 
} 
} 
}
EXEMPLO 2: RESULTADO 
{ 
[...] 
"aggregations": { 
"tipo_de_candidato": { 
"buckets": [ 
{ 
"key": "dep_estadual", 
"doc_count": 1200, 
"numero_stats": { 
"count": 1200, 
"min": 10000, 
"max": 90999, 
"avg": 36122.61666666667, 
"sum": 43347140 
}, 
"por_partido": { 
"buckets": [ 
{ 
"key": "PT do B", 
"doc_count": 85 
}, 
{ 
"key": "PC do B", 
"doc_count": 41 
} 
] 
}, 
"por_coligacao": { 
"buckets": [ 
{
AGREGAÇÕES DISPONÍVEIS 
min 
max 
IPv4 range 
Date histogram 
Geo distance 
...
VISUALIZAÇÃO DE DADOS: KIBANA
VISUALIZAÇÃO DE DADOS: KIBANA
OBRIGADO! 
Aécio Santos 
@aeciosan 
aecio.solando@gmail.com

Mais conteúdo relacionado

Semelhante a Busca e análise de dados escalável em tempo-real

Semelhante a Busca e análise de dados escalável em tempo-real (20)

JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
Workshop Elasticsearch - Android Dev Conference 2016
Workshop Elasticsearch - Android Dev Conference 2016Workshop Elasticsearch - Android Dev Conference 2016
Workshop Elasticsearch - Android Dev Conference 2016
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHP
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
Cloud search avancado
Cloud search avancadoCloud search avancado
Cloud search avancado
 
GraphQL - APIs mais robustas e flexíveis
GraphQL - APIs mais robustas e flexíveisGraphQL - APIs mais robustas e flexíveis
GraphQL - APIs mais robustas e flexíveis
 
MySQL + JSON da casamento sim!
MySQL + JSON da casamento sim!MySQL + JSON da casamento sim!
MySQL + JSON da casamento sim!
 
Introdução ao Solr e Faceted Search
Introdução ao Solr e Faceted SearchIntrodução ao Solr e Faceted Search
Introdução ao Solr e Faceted Search
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibana
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
Api v3
Api v3Api v3
Api v3
 
TDC 2011 - Ext JS 4
TDC 2011 - Ext JS 4TDC 2011 - Ext JS 4
TDC 2011 - Ext JS 4
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHP
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 

Busca e análise de dados escalável em tempo-real

  • 1. BUSCA E ANÁLISE DE DADOS ESCALÁVEL EM TEMPO-REAL Aécio Santos @aeciosan aecio.solando@gmail.com
  • 2. Como fazer busca textual e análise de dados em tempo-real em grandes bases dados?
  • 3.
  • 4. BUSCA E ANÁLISE DE DADOS ESCALÁVEL EM TEMPO-REAL Busca por termos, intervalos numéricos, datas, posicão geográfica, relevância, etc Execução consultas ad-hoc, agregação e visualização de dados Busca distribuída com replicação e sharding automáticos Near real-time, latência pequena, respostas em poucos ms
  • 5.
  • 6. API REST Java Python Ruby PHP JavaScript ...
  • 7. INDEXAÇÃO DE DOCUMENTOS API PUT /{index}/{type}/{?id} Exemplos $ curl ­XPUT 'http://localhost:9200/twitter/tweet/1' ­d '{ "user" : "aeciosan", "post_date" : "2014­08­28T14: 00:00", "message" : "Testando o ElasticSearch" }' $ curl ­XPUT 'http://localhost:9200/twitter/user/aeciosan' ­d '{ "user" : "aeciosan", "bio" : "Software Engineer at Zunnit Technologies" }
  • 8. RECUPERAÇÃO DE DOCUMENTOS API GET /{index}/{type}/{id} Exemplo curl ­XGET 'http://localhost:9200/twitter/tweet/1' { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_version" : 1, "found": true, "_source" : { "user" : "aeciosan", "post_date" : "2014­08­28T14: 00:00", "message" : "Testando o ElasticSearch" } }'
  • 9. BUSCA API GET /{index}/_search GET /{index}/{type}/_search Exemplos $ curl ­XGET 'http://localhost:9200/twitter/_search?q=user:aeciosan' $ curl ­XGET 'http://localhost:9200/twitter/tweet,user/_search?q=user:aeciosan' $ curl ­XGET 'http://localhost:9200/_all/tweet/_search?q=message:elasticsearch' $ curl ­XPOST 'http://localhost:9200/twitter/tweet/_search' ­d '{ "query" : { "term" : { "message" : "elasticsearch" } } }'
  • 10. BUSCA Vários de tipos de queries e filtros disponíveis bool fuzzy geoshape more like this range regexp wildcard ...
  • 11. BUSCA Resposta { [...] "hits": [ { "_index": "twitter", "_type": "tweet", "_id": "1", "_score": 0.15342641, "_source": { "user": "aeciosan", "post_date": "2014­08­28T14: 00:00", "message": "Testando o ElasticSearch" } }, { "_index": "twitter", "_type": "tweet", "_id": "2", "_score": 0.11506981, "_source": { "user": "aeciosan", "post_date": "2014­08­28T14: 01:00", "message": "Apresentação sobre ElasticSearch no BH­TEC Talks" } } ] }
  • 12. AGREGAÇÕES Computações sobre os resultados de uma busca Tipos: Metrics Bucketing
  • 13. EXEMPLO: DADOS 698 documentos: dep_federal POST /eleicoes2014/dep_federal { "partido": "PARTIDO", "nome": "NOME", "numero": 9999, "coligacao": "PARTIDO1 / PARTIDO2 / PARTIDO3" } 1200 documentos: dep_estadual POST /eleicoes2014/dep_estadual { "partido": "PARTIDO", "nome": "NOME", "numero": 99999, "coligacao": "PARTIDO1 / PARTIDO2 / PARTIDO3" }
  • 14. EXEMPLO 1 POST /eleicoes2014/_search?q=nome:joao { "size": 2, "aggregations": { "tipo_de_candidato": { "terms": { "field": "_type" } } } }
  • 15. EXEMPLO 1: RESULTADO { [...], "aggregations": { "tipo_de_candidato": { "buckets": [ { "key": "dep_estadual", "doc_count": 6 }, { "key": "dep_federal", "doc_count": 2 } ] } } }
  • 16. EXEMPLO 2 POST /eleicoes2014/_search { "size": 0, "aggregations": { "tipo_de_candidato": { "terms": { "field": "_type" }, "aggregations": { "por_partido": { "terms": { "field": "partido", "size":2 } }, "por_coligacao": { "terms": { "field": "coligacao", "size":2 } }, "numero_stats": { "stats": { "field": "numero" } } } } } }
  • 17. EXEMPLO 2: RESULTADO { [...] "aggregations": { "tipo_de_candidato": { "buckets": [ { "key": "dep_estadual", "doc_count": 1200, "numero_stats": { "count": 1200, "min": 10000, "max": 90999, "avg": 36122.61666666667, "sum": 43347140 }, "por_partido": { "buckets": [ { "key": "PT do B", "doc_count": 85 }, { "key": "PC do B", "doc_count": 41 } ] }, "por_coligacao": { "buckets": [ {
  • 18. AGREGAÇÕES DISPONÍVEIS min max IPv4 range Date histogram Geo distance ...
  • 21. OBRIGADO! Aécio Santos @aeciosan aecio.solando@gmail.com