SlideShare une entreprise Scribd logo
1  sur  59
Globalcode – Open4educationGlobalcode – Open4education
Trilha – BigData
Caliel Costa
Nerd, ouvinte de blues, pesquisador, esportista e fotógrafo amador, desenvolvedor e projetista de soluções em TI. Software
Designer no Superplayer.
Gabriel Ladeira
Sou estudante de Ciências da Computação na PUCRS. Atuo como desenvolvedor a cerca de seis anos, tendo contato com
diferentes tecnologias. Atualmente integro a equipe do Superplayer, como backend developer, vivenciando altas aventuras
com Mongodb :)
Globalcode – Open4education
Agenda
• Geolocation
• Aggregation Pipelines
•MapReduce
• Single Purpose Aggregation Operations
Globalcode – Open4education
Superplayer é um serviço de recomendação musical focado em melhorar
todos os momentos da vida das pessoas através da trilha sonora
perfeita.
Startup brasileira
Criado em 2012
Globalcode – Open4education
Web, Android, iOS, Windows Phone, ...
+ 10.000.000
USUÁRIOS ÚNICOS
ACUMULADOS
+ 1.400.000
USUÁRIOS ÚNICOS POR MÊS
+ 4.500.000
VISITAS POR MÊS
TOP
600SITES MAIS
ACESSADOS
DO BRASIL.
Alexa – Traffic Rank
Globalcode – Open4education
Geolocation
Na versão 2.4 (em 2013) foi introduzido o suporte a geometrias GeoJSON,
podendo ser usadas em data e consultas.
Globalcode – Open4education
Planeta Terra
Globalcode – Open4education
Planeta Terra
Degrees, Minutes, Seconds to/from Decimal Degrees
Cidade Latitude Longitude
Porto Alegre -30.03128
30° 1' 52.6074" Sul
-51.2125487
51° 12' 45.1764" Oeste
São Paulo -23.598877
23° 35' 55.9572" Sul
-46.6749596
46° 40' 29.8554" Oeste
Londres 51.4994438
51° 29' 57.9978" Norte
0
0° 0' 0"
Hong Kong 22.3576782
22° 21' 27.6402" Norte
114.2196956
114° 13' 10.905" Leste
Globalcode – Open4education
GeoJSON
type coordinates
Point deve ser uma posição simples
MultiPoint deve ser um array de posição
LineString deve ser um array de 2 ou mais posições
MultiLineString deve ser um array de array de LineString
Polygon deve ser um LinearRing, ou seja um LineString com 4 ou mais pontos,
onde o primeiro e o último são posições equivalentes
MultiPolygon deve ser um array de array de Polygon
Globalcode – Open4education
GeoJSON - Point
{
"type": "Point",
"coordinates": [100.0, 0.0],
}
Globalcode – Open4education
GeoJSON - LineString
{
"type": "LineString",
"coordinates": [
[100.0, 0.0],
[101.0, 1.0]
],
}
Globalcode – Open4education
GeoJSON - Polygon
{
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0], [101.0, 0.0],
[101.0, 1.0], [100.0, 1.0],
[100.0, 0.0]
]
],
}
Globalcode – Open4education
GeoJSON - MultiPoint
{
"type": "MultiPoint",
"coordinates": [
[100.0, 0.0],
[101.0, 1.0]
],
}
Globalcode – Open4education
GeoJSON - MutiLineString
{
"type": "MultiLineString",
"coordinates": [
[ [100.0, 0.0], [101.0, 1.0] ],
[ [102.0, 2.0], [103.0, 3.0] ]
]
}
Globalcode – Open4education
GeoJSON - MultiPolygon
{
"type": "MultiPolygon",
"coordinates": [
[
[ [102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0] ]
],
[
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ],
[ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
]
]
}
Globalcode – Open4education
Brazil, seus 27 estados e
respectivas capitais
Globalcode – Open4education
GeoJSON - Brasil
{
"_id" : ObjectId("54f4bd437da3100f4454e812"),
"level" : "Country",
"name" : "Brasil (BR)",
"loc" : {
"type" : "Polygon",
"coordinates" : [
[
[ -44.69501, -1.817778 ],
… 336 ...
[-44.69501, -1.817778 ]
]
]
}
}
Globalcode – Open4education
Longitude e Latitude Vs
Latitude e Longitude
{
"loc" : {
"type" : "Polygon",
"coordinates" : [
[
[ -46.53766020909132, -23.36963320731797 ],
..310..
[ -46.53766020909132, -23.36963320731797 ]
]
]
}
}
Cidade Latitude Longitude
São Paulo -23.598877
-23° 35' 55.9572" Sul
-46.6749596
-46° 40' 29.8554" Oeste
Globalcode – Open4education
Longitude e Latitude Vs
Latitude e Longitude
“All documents must store location data in the same order. If
you use latitude and longitude as your coordinate system,
always store longitude first. MongoDB’s 2d spherical index
operators only recognize [longitude, latitude] ordering.”
Globalcode – Open4education
Indexando GeoJSON
Tipo Uso
2dsphere Suporta consultas que calculem geometrias em uma esfera tipo a Terra.
2d Gera um geohash de acordo com o valor das coordenadas
haystack Este índice é um tipo especial de índice otimizado para retornar resultados
sobre areas pequenas
Globalcode – Open4education
Indexando GeoJSON
db.locations.createIndex({
"loc" : "2dsphere"
}, {
"name" : "loc_"
})
• Índice esparso
• Não pode ser usado como chave de sharding
Globalcode – Open4education
Consultas GeoJSON
Function Objetivo
$geoWithin Seleciona geometrias dentro dos limites de outra
$geoIntersects Seleciona geometrias em interção com outra
$near Retorna objetos na proximidade de um ponto
$nearSphere Retorna objetos na proximidade de um ponto na esfera
Globalcode – Open4education
Onde estou?
query: {
"loc": {
$geoIntersects: {
$geometry: {
type: "Point" ,
coordinates: [-51.2125487, -30.03128]
}
}
}
}
Globalcode – Open4education
Onde estou?
query: {
"loc": {
$geoIntersects: {
$geometry: {
type: "Point" ,
coordinates: [-51.2125487, -30.03128]
}
}
}
}
Result:
Brasil (BR)
Rio Grande do Sul (RS)
Porto Alegre
Globalcode – Open4education
Cidades perto de Gramado/RS
{
"level": "City",
"loc": {
$near: {
$geometry: { type: "Point", coordinates: [-50.8586806,-29.3851463] }
$minDistance: 1,
$maxDistance: 300000,
},
}
}
Globalcode – Open4education
Cidades perto de Gramado/RS
{
"level": "City",
"loc": {
$near: {
$geometry: { type: "Point", coordinates: [-50.8586806,-29.3851463] }
$minDistance: 1,
$maxDistance: 300000,
},
}
}
Result:
Porto Alegre
Florianópolis
Globalcode – Open4education
$NearSphere
Funciona igual ao Near só que ao invés de se usar
distâncias em metros usa-se em radianos.
Globalcode – Open4education
Buscando playlists
query: {
$or: [
{ "location": { $not: { $exists: true } } },
{
"location": {
$geoIntersects: { $geometry: { type: "Point" , coordinates: [-47.0562422, -22.9084404] } }
}
}
],
}
Result:
Acorda, Peão!, Acorda, Vagabundo!, Bebendo no Boteco, Dia de Chuva, Men’s Health, Trabalhando
numa Boa, Whiskynho com a Rapaziada, ...
Globalcode – Open4education
Conteúdo Localizado
• Playlists
• Spots
• Patrocínios de Playlists
• Log de Playlists ouvidas
• Log de Músicas (Tracks) ouvidas
Globalcode – Open4education
Globalcode – Open4education
Aggregation
Operações que processão conjuntos de dados e retornam
dados calculados.
• Aggregation Pipelines
• Map-Reduce
• Single Purpose Aggregation Operations
Globalcode – Open4education
Aggregation Pipelines
Framework para agregação de dados modelado sob os conceitos de
pipelines
Globalcode – Open4education
Aggregation Pipelines
Comando:
db.collection.aggregate(pipeline, options)
pipeline: []
options: {
"explain": <bool>,
"allowDiskUse": {batchSize : <bool> },
"cursor": {batchSize : <int> },
}
Limitações:
Estágios com limite de 100MB de RAM
Até a versão 2.6 result set está limitado ao tamanho máximo de um documento
BSON (16MB)
Globalcode – Open4education
Pipeline Stage Operators
Cada etapa transforma os documentos a medida que estes passam
através do pipeline.
Operadores:
$project
$match
$redact
$limit
$skip
$unwind
$group
$sort
$geoNear
$out
Globalcode – Open4education
Pipeline Expressions Operators
Especificam transformações aplicadas aos documentos que passam
pelo pipeline.
Principais tipos de operadores:
• expressões boleanas - $and, $or;
• expressões aplicadas sob conjuntos - $setIntersection, $setUnion;
• expressões de comparação - $eq, $gt, $lt, $cmp;
• expressões aritiméticos - $add, $subtract;
• expressões sob strings - $substr, $toLower;
• expressões acumuladoras - $sum, $avg, $max, $min;
• expressões condicionais - $cond, $ifNull;
• expressões sob data/hora - $dayOfMonth, $month, $year, $hour, $minute.
Globalcode – Open4education
Plays por gênero
db.plays.aggregate([
{ $match: { createdat: {
$gte: ISODate("2015-05-01T00:00:00.000Z"),
$lte: ISODate("2015-05-31T23:59:59.000Z")
}
}},
{ $group: { _id: "$account.gender", plays: { $sum: 1 }}}
])
Globalcode – Open4education
Plays por regiões do Brasil
db.plays.aggregate([
{ $match: { createdat: {
$gte: ISODate("2015-05-01T00:00:00.000Z"),
$lte: ISODate("2015-05-31T23:59:59.000Z")
}
}},
{ $unwind: "$geolocation.locations" },
{ $project: { _id: "$_id", loc: "$geolocation.locations" }},
{ $match: { "loc.level": { $eq: "state" } }},
{ $group: { _id: "$loc.name", plays: { $sum: 1 }}}
])
Globalcode – Open4education
Playlists mais tocadas por
região do Brasil
db.plays.aggregate([
{ $match: { createdat: {
$gte: ISODate("2015-05-01T00:00:00.000Z"),
$lte: ISODate("2015-05-31T23:59:59.000Z")
}
}},
{ $unwind: "$playlists" },
{ $unwind: "$geolocation.locations" },
{ $project: {
playlist: "$playlists.name",
location: "$geolocation.locations.name"
}},
{ $group: { _id: { playlist: "$playlist", location: "$location" }, plays: { $sum: 1 }}}
])
Globalcode – Open4education
Globalcode – Open4education
MapReduce
… é um modelo de programação desenhado para processar grandes volumes de
dados em paralelo, dividindo o trabalho em um conjunto de tarefas
independentes.
Globalcode – Open4education
Globalcode – Open4education
Map
Responsável por transformar cada documento em nenhum, 1 ou muitos
documentos.
O melhor é retornar um documento igual para todas as chaves.
Ela não pode acessar o banco em hipótese alguma
Globalcode – Open4education
Reduce
Ela não pode acessar o banco em hipotese alguma (mesmo que seja para
leitura)
Vai receber um array de documentos com o mesmo key
Deve retornar um documento só
O Tipo de retorno deve identico ao tipo de entrada
Globalcode – Open4education
Output Param
Pode ser um literal que será transformada em uma nova coleção
Ou pode indicar uma resposta inline
Globalcode – Open4education
Qual dia da semana escuta-se mais
música?
db.plays.mapReduce(function() {
emit(dayOfWeek(this.createdat), 1);
}, function(key, values) {
return Array.sum(values);
}, {
out: { inline: 1}
});
Globalcode – Open4education
Voodoo behind MapReduce
Map
Reduce Reduce Reduce
Reduce
Globalcode – Open4education
Plays por regiões do Brasil
db.plays.mapReduce(function() {
this.geolocation.locations.forEach(function(location) {
if (location.level === "state") { emit(location.name, 1); }
});
}, function(key, values) {
return Array.sum(values);
}, {
query: {
"geolocation.locations": { $exists: true, },
"createdat": { $gte: ISODate("2015-05-01T00:00:00.000Z"), $lte:
ISODate("2015-05-31T23:59:59.000Z") }
},
out: { inline: 1},
});
Globalcode – Open4education
Plays por Cidade e Sexo
var map = function() {
var key = null;
this.geolocation.locations.for
Each(function(location) {
if (location.level ===
"city") key = location.name;
});
if (key == null) return;
var gender =
this.account.gender;
this.playlists.forEach(functio
n(playlist) {
var result = {};
result[gender] = 1; emit(key,
result);
});
};
var reduce = function(key, values) {
var result = { "F": 0, "M": 0,
};
values.forEach(function(value)
{
result["F"] += (value["F"]
|| 0);
result["M"] += (value["M"]
|| 0);
});
return result;
};
db.plays.mapReduce(map, reduce, {
query: { "account.gender": {
$exists: true },
"geolocation.locations": { $exists: true
} },
out: "playlist_by_genre",
});
Globalcode – Open4education
Globalcode – Open4education
Single Purpose Aggregation Operations
Operações bem específicas para agregação de dados disponíveis no Mongodb.
São elas:
Count
Retorna o número total de documentos que satisfaz a cosulta informada.
Distinct
Retorna os valores distintos de um campo sob os documentos resultantes da consulta.
Group
Agrupa os documentos de uma coleção de acordo com uma chavee específica.
Análago ao GROUP BY em SQL.
Globalcode – Open4education
Count
Comando:
db.database.count()
db.database.count(query)
Exemplos:
db.plays.count()
db.plays.count({ createdat: {
$gte: ISODate("2015-09-25T00:00:00.000Z"),
$lte: ISODate("2015-09-25T23:59:59.000Z")
}})
Globalcode – Open4education
Distinct
Comando:
db.database.distinct(“field”)
db.database.distinct(“field”, query)
Exemplos:
db.plays.distinct("account.gender")
db.plays.distinct("playlists.name", { createdat: {
$gte: ISODate("2015-09-25T00:00:00.000Z"),
$lte: ISODate("2015-09-25T23:59:59.000Z")
}
})
Globalcode – Open4education
Group
Comando:
db.database.group({
key: <key>,
reduce: <reduce function>,
keyf: <key function>,
cond: <query>,
finalize: <finalize function>
})
Limitações:
Não é possível de utilizar em coleções com sharding.
Result set está limitado ao tamanho máximo de um documento BSON (16MB)
Globalcode – Open4education
Número de plays por plataforma
db.plays.group( {
key: { 'consumer.name': 1 },
reduce: function(cur, result) { result.plays += 1 },
initial: { plays: 0 }
})
Globalcode – Open4education
jointheband@superplayer.fm

Contenu connexe

Similaire à BigData Trilha MongoDB - Geolocalização, Pipelines e MapReduce

Expressões regulares para novatos, usando Python
Expressões regulares para novatos, usando PythonExpressões regulares para novatos, usando Python
Expressões regulares para novatos, usando PythonAmom Mendes
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresFernando Franquini
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano Anderson
 
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIGeo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIChristiano Anderson
 
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 2014Christiano Anderson
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSRodrigo Branas
 
Mapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoMapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoChristiano Anderson
 
Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangoMapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangotdc-globalcode
 
Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangoMapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangotdc-globalcode
 
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 SearchMichel Bottan
 
MongoDB Introdução
MongoDB IntroduçãoMongoDB Introdução
MongoDB IntroduçãoThiago Poiani
 
TDC2016SP - Utilizando Azure Storage em app´s Xamarin
TDC2016SP - Utilizando Azure Storage em app´s XamarinTDC2016SP - Utilizando Azure Storage em app´s Xamarin
TDC2016SP - Utilizando Azure Storage em app´s Xamarintdc-globalcode
 
Scikit-Suprise para sistemas de recomendação
Scikit-Suprise para sistemas de recomendaçãoScikit-Suprise para sistemas de recomendação
Scikit-Suprise para sistemas de recomendaçãoJosé Fernando Tavares
 
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...ISCTE-IUL ACM Student Chapter
 

Similaire à BigData Trilha MongoDB - Geolocalização, Pipelines e MapReduce (20)

Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
 
Expressões regulares para novatos, usando Python
Expressões regulares para novatos, usando PythonExpressões regulares para novatos, usando Python
Expressões regulares para novatos, usando Python
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIGeo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
 
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
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJS
 
Mapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoMapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjango
 
Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangoMapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjango
 
Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangoMapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjango
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
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 Introdução
MongoDB IntroduçãoMongoDB Introdução
MongoDB Introdução
 
GeoDjango
GeoDjangoGeoDjango
GeoDjango
 
TDC2016SP - Utilizando Azure Storage em app´s Xamarin
TDC2016SP - Utilizando Azure Storage em app´s XamarinTDC2016SP - Utilizando Azure Storage em app´s Xamarin
TDC2016SP - Utilizando Azure Storage em app´s Xamarin
 
Azure blob xamarin-tdc2016
Azure blob xamarin-tdc2016Azure blob xamarin-tdc2016
Azure blob xamarin-tdc2016
 
Scikit-Suprise para sistemas de recomendação
Scikit-Suprise para sistemas de recomendaçãoScikit-Suprise para sistemas de recomendação
Scikit-Suprise para sistemas de recomendação
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
 

Plus de tdc-globalcode

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadetdc-globalcode
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...tdc-globalcode
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucessotdc-globalcode
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPAtdc-globalcode
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinotdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicestdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publicatdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocustdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golangtdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QAtdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciatdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Servicetdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETtdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Coretdc-globalcode
 

Plus de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Dernier

637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 anoAdelmaTorres2
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfIedaGoethe
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirIedaGoethe
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfEditoraEnovus
 
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISVitor Vieira Vasconcelos
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveaulasgege
 
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfBRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfHenrique Pontes
 
geografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundogeografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundonialb
 

Dernier (20)

637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimir
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdf
 
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGIS
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
 
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfBRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
 
geografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundogeografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundo
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 

BigData Trilha MongoDB - Geolocalização, Pipelines e MapReduce

  • 1. Globalcode – Open4educationGlobalcode – Open4education Trilha – BigData Caliel Costa Nerd, ouvinte de blues, pesquisador, esportista e fotógrafo amador, desenvolvedor e projetista de soluções em TI. Software Designer no Superplayer. Gabriel Ladeira Sou estudante de Ciências da Computação na PUCRS. Atuo como desenvolvedor a cerca de seis anos, tendo contato com diferentes tecnologias. Atualmente integro a equipe do Superplayer, como backend developer, vivenciando altas aventuras com Mongodb :)
  • 2. Globalcode – Open4education Agenda • Geolocation • Aggregation Pipelines •MapReduce • Single Purpose Aggregation Operations
  • 3. Globalcode – Open4education Superplayer é um serviço de recomendação musical focado em melhorar todos os momentos da vida das pessoas através da trilha sonora perfeita. Startup brasileira Criado em 2012
  • 4. Globalcode – Open4education Web, Android, iOS, Windows Phone, ...
  • 9. Globalcode – Open4education Geolocation Na versão 2.4 (em 2013) foi introduzido o suporte a geometrias GeoJSON, podendo ser usadas em data e consultas.
  • 11. Globalcode – Open4education Planeta Terra Degrees, Minutes, Seconds to/from Decimal Degrees Cidade Latitude Longitude Porto Alegre -30.03128 30° 1' 52.6074" Sul -51.2125487 51° 12' 45.1764" Oeste São Paulo -23.598877 23° 35' 55.9572" Sul -46.6749596 46° 40' 29.8554" Oeste Londres 51.4994438 51° 29' 57.9978" Norte 0 0° 0' 0" Hong Kong 22.3576782 22° 21' 27.6402" Norte 114.2196956 114° 13' 10.905" Leste
  • 12. Globalcode – Open4education GeoJSON type coordinates Point deve ser uma posição simples MultiPoint deve ser um array de posição LineString deve ser um array de 2 ou mais posições MultiLineString deve ser um array de array de LineString Polygon deve ser um LinearRing, ou seja um LineString com 4 ou mais pontos, onde o primeiro e o último são posições equivalentes MultiPolygon deve ser um array de array de Polygon
  • 13. Globalcode – Open4education GeoJSON - Point { "type": "Point", "coordinates": [100.0, 0.0], }
  • 14. Globalcode – Open4education GeoJSON - LineString { "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ], }
  • 15. Globalcode – Open4education GeoJSON - Polygon { "type": "Polygon", "coordinates": [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ] ], }
  • 16. Globalcode – Open4education GeoJSON - MultiPoint { "type": "MultiPoint", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ], }
  • 17. Globalcode – Open4education GeoJSON - MutiLineString { "type": "MultiLineString", "coordinates": [ [ [100.0, 0.0], [101.0, 1.0] ], [ [102.0, 2.0], [103.0, 3.0] ] ] }
  • 18. Globalcode – Open4education GeoJSON - MultiPolygon { "type": "MultiPolygon", "coordinates": [ [ [ [102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0] ] ], [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ], [ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ] ] ] }
  • 19. Globalcode – Open4education Brazil, seus 27 estados e respectivas capitais
  • 20. Globalcode – Open4education GeoJSON - Brasil { "_id" : ObjectId("54f4bd437da3100f4454e812"), "level" : "Country", "name" : "Brasil (BR)", "loc" : { "type" : "Polygon", "coordinates" : [ [ [ -44.69501, -1.817778 ], … 336 ... [-44.69501, -1.817778 ] ] ] } }
  • 21. Globalcode – Open4education Longitude e Latitude Vs Latitude e Longitude { "loc" : { "type" : "Polygon", "coordinates" : [ [ [ -46.53766020909132, -23.36963320731797 ], ..310.. [ -46.53766020909132, -23.36963320731797 ] ] ] } } Cidade Latitude Longitude São Paulo -23.598877 -23° 35' 55.9572" Sul -46.6749596 -46° 40' 29.8554" Oeste
  • 22. Globalcode – Open4education Longitude e Latitude Vs Latitude e Longitude “All documents must store location data in the same order. If you use latitude and longitude as your coordinate system, always store longitude first. MongoDB’s 2d spherical index operators only recognize [longitude, latitude] ordering.”
  • 23. Globalcode – Open4education Indexando GeoJSON Tipo Uso 2dsphere Suporta consultas que calculem geometrias em uma esfera tipo a Terra. 2d Gera um geohash de acordo com o valor das coordenadas haystack Este índice é um tipo especial de índice otimizado para retornar resultados sobre areas pequenas
  • 24. Globalcode – Open4education Indexando GeoJSON db.locations.createIndex({ "loc" : "2dsphere" }, { "name" : "loc_" }) • Índice esparso • Não pode ser usado como chave de sharding
  • 25. Globalcode – Open4education Consultas GeoJSON Function Objetivo $geoWithin Seleciona geometrias dentro dos limites de outra $geoIntersects Seleciona geometrias em interção com outra $near Retorna objetos na proximidade de um ponto $nearSphere Retorna objetos na proximidade de um ponto na esfera
  • 26. Globalcode – Open4education Onde estou? query: { "loc": { $geoIntersects: { $geometry: { type: "Point" , coordinates: [-51.2125487, -30.03128] } } } }
  • 27. Globalcode – Open4education Onde estou? query: { "loc": { $geoIntersects: { $geometry: { type: "Point" , coordinates: [-51.2125487, -30.03128] } } } } Result: Brasil (BR) Rio Grande do Sul (RS) Porto Alegre
  • 28. Globalcode – Open4education Cidades perto de Gramado/RS { "level": "City", "loc": { $near: { $geometry: { type: "Point", coordinates: [-50.8586806,-29.3851463] } $minDistance: 1, $maxDistance: 300000, }, } }
  • 29. Globalcode – Open4education Cidades perto de Gramado/RS { "level": "City", "loc": { $near: { $geometry: { type: "Point", coordinates: [-50.8586806,-29.3851463] } $minDistance: 1, $maxDistance: 300000, }, } } Result: Porto Alegre Florianópolis
  • 30. Globalcode – Open4education $NearSphere Funciona igual ao Near só que ao invés de se usar distâncias em metros usa-se em radianos.
  • 31. Globalcode – Open4education Buscando playlists query: { $or: [ { "location": { $not: { $exists: true } } }, { "location": { $geoIntersects: { $geometry: { type: "Point" , coordinates: [-47.0562422, -22.9084404] } } } } ], } Result: Acorda, Peão!, Acorda, Vagabundo!, Bebendo no Boteco, Dia de Chuva, Men’s Health, Trabalhando numa Boa, Whiskynho com a Rapaziada, ...
  • 32. Globalcode – Open4education Conteúdo Localizado • Playlists • Spots • Patrocínios de Playlists • Log de Playlists ouvidas • Log de Músicas (Tracks) ouvidas
  • 34. Globalcode – Open4education Aggregation Operações que processão conjuntos de dados e retornam dados calculados. • Aggregation Pipelines • Map-Reduce • Single Purpose Aggregation Operations
  • 35. Globalcode – Open4education Aggregation Pipelines Framework para agregação de dados modelado sob os conceitos de pipelines
  • 36. Globalcode – Open4education Aggregation Pipelines Comando: db.collection.aggregate(pipeline, options) pipeline: [] options: { "explain": <bool>, "allowDiskUse": {batchSize : <bool> }, "cursor": {batchSize : <int> }, } Limitações: Estágios com limite de 100MB de RAM Até a versão 2.6 result set está limitado ao tamanho máximo de um documento BSON (16MB)
  • 37. Globalcode – Open4education Pipeline Stage Operators Cada etapa transforma os documentos a medida que estes passam através do pipeline. Operadores: $project $match $redact $limit $skip $unwind $group $sort $geoNear $out
  • 38. Globalcode – Open4education Pipeline Expressions Operators Especificam transformações aplicadas aos documentos que passam pelo pipeline. Principais tipos de operadores: • expressões boleanas - $and, $or; • expressões aplicadas sob conjuntos - $setIntersection, $setUnion; • expressões de comparação - $eq, $gt, $lt, $cmp; • expressões aritiméticos - $add, $subtract; • expressões sob strings - $substr, $toLower; • expressões acumuladoras - $sum, $avg, $max, $min; • expressões condicionais - $cond, $ifNull; • expressões sob data/hora - $dayOfMonth, $month, $year, $hour, $minute.
  • 39. Globalcode – Open4education Plays por gênero db.plays.aggregate([ { $match: { createdat: { $gte: ISODate("2015-05-01T00:00:00.000Z"), $lte: ISODate("2015-05-31T23:59:59.000Z") } }}, { $group: { _id: "$account.gender", plays: { $sum: 1 }}} ])
  • 40. Globalcode – Open4education Plays por regiões do Brasil db.plays.aggregate([ { $match: { createdat: { $gte: ISODate("2015-05-01T00:00:00.000Z"), $lte: ISODate("2015-05-31T23:59:59.000Z") } }}, { $unwind: "$geolocation.locations" }, { $project: { _id: "$_id", loc: "$geolocation.locations" }}, { $match: { "loc.level": { $eq: "state" } }}, { $group: { _id: "$loc.name", plays: { $sum: 1 }}} ])
  • 41. Globalcode – Open4education Playlists mais tocadas por região do Brasil db.plays.aggregate([ { $match: { createdat: { $gte: ISODate("2015-05-01T00:00:00.000Z"), $lte: ISODate("2015-05-31T23:59:59.000Z") } }}, { $unwind: "$playlists" }, { $unwind: "$geolocation.locations" }, { $project: { playlist: "$playlists.name", location: "$geolocation.locations.name" }}, { $group: { _id: { playlist: "$playlist", location: "$location" }, plays: { $sum: 1 }}} ])
  • 43. Globalcode – Open4education MapReduce … é um modelo de programação desenhado para processar grandes volumes de dados em paralelo, dividindo o trabalho em um conjunto de tarefas independentes.
  • 45. Globalcode – Open4education Map Responsável por transformar cada documento em nenhum, 1 ou muitos documentos. O melhor é retornar um documento igual para todas as chaves. Ela não pode acessar o banco em hipótese alguma
  • 46. Globalcode – Open4education Reduce Ela não pode acessar o banco em hipotese alguma (mesmo que seja para leitura) Vai receber um array de documentos com o mesmo key Deve retornar um documento só O Tipo de retorno deve identico ao tipo de entrada
  • 47. Globalcode – Open4education Output Param Pode ser um literal que será transformada em uma nova coleção Ou pode indicar uma resposta inline
  • 48. Globalcode – Open4education Qual dia da semana escuta-se mais música? db.plays.mapReduce(function() { emit(dayOfWeek(this.createdat), 1); }, function(key, values) { return Array.sum(values); }, { out: { inline: 1} });
  • 49. Globalcode – Open4education Voodoo behind MapReduce Map Reduce Reduce Reduce Reduce
  • 50. Globalcode – Open4education Plays por regiões do Brasil db.plays.mapReduce(function() { this.geolocation.locations.forEach(function(location) { if (location.level === "state") { emit(location.name, 1); } }); }, function(key, values) { return Array.sum(values); }, { query: { "geolocation.locations": { $exists: true, }, "createdat": { $gte: ISODate("2015-05-01T00:00:00.000Z"), $lte: ISODate("2015-05-31T23:59:59.000Z") } }, out: { inline: 1}, });
  • 51. Globalcode – Open4education Plays por Cidade e Sexo var map = function() { var key = null; this.geolocation.locations.for Each(function(location) { if (location.level === "city") key = location.name; }); if (key == null) return; var gender = this.account.gender; this.playlists.forEach(functio n(playlist) { var result = {}; result[gender] = 1; emit(key, result); }); }; var reduce = function(key, values) { var result = { "F": 0, "M": 0, }; values.forEach(function(value) { result["F"] += (value["F"] || 0); result["M"] += (value["M"] || 0); }); return result; }; db.plays.mapReduce(map, reduce, { query: { "account.gender": { $exists: true }, "geolocation.locations": { $exists: true } }, out: "playlist_by_genre", });
  • 53. Globalcode – Open4education Single Purpose Aggregation Operations Operações bem específicas para agregação de dados disponíveis no Mongodb. São elas: Count Retorna o número total de documentos que satisfaz a cosulta informada. Distinct Retorna os valores distintos de um campo sob os documentos resultantes da consulta. Group Agrupa os documentos de uma coleção de acordo com uma chavee específica. Análago ao GROUP BY em SQL.
  • 54. Globalcode – Open4education Count Comando: db.database.count() db.database.count(query) Exemplos: db.plays.count() db.plays.count({ createdat: { $gte: ISODate("2015-09-25T00:00:00.000Z"), $lte: ISODate("2015-09-25T23:59:59.000Z") }})
  • 55. Globalcode – Open4education Distinct Comando: db.database.distinct(“field”) db.database.distinct(“field”, query) Exemplos: db.plays.distinct("account.gender") db.plays.distinct("playlists.name", { createdat: { $gte: ISODate("2015-09-25T00:00:00.000Z"), $lte: ISODate("2015-09-25T23:59:59.000Z") } })
  • 56. Globalcode – Open4education Group Comando: db.database.group({ key: <key>, reduce: <reduce function>, keyf: <key function>, cond: <query>, finalize: <finalize function> }) Limitações: Não é possível de utilizar em coleções com sharding. Result set está limitado ao tamanho máximo de um documento BSON (16MB)
  • 57. Globalcode – Open4education Número de plays por plataforma db.plays.group( { key: { 'consumer.name': 1 }, reduce: function(cur, result) { result.plays += 1 }, initial: { plays: 0 } })
  • 58.