ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
Garinpando no MongoDB sem picareta e com elegância
1. Globalcode – 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 :)
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
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
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
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
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:
• expreções boleanas - $and, $or;
• expreções aplicadas sob conjuntos - $setIntersection, $setUnion;
• expreções de comparação - $eq, $gt, $lt, $cmp;
• expreções aritiméticos - $add, $subtract;
• expreções sob strings - $substr, $toLower;
• expreções acumuladoras - $sum, $avg, $max, $min;
• expreções condicionais - $cond, $ifNull;
• expreçõ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 }}}
])
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}
});
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.
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 }
})