A recomendação de conteúdo para usuários é um dos pontos principais no Superplayer. Desde o inicio do ano criamos uma estrutura de geolocalização utilizando MongoDB para selecionar Playlists e propagandas para os usuários. No meio do caminho algumas coisas não funcionaram muito bem, mas apreendemos muito desde então e nesta palestra vou compartilhar os principais pontos.
Link: http://blog.calielcosta.com/2015/07/31/localizando-uma-agulha-usando-mongodb-para-dados-geolocalizados/
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
NoSQL Trilha - MongoDB para GeoJSON e Localização
1. Globalcode – Open4educationGlobalcode – Open4education
Trilha – NoSQL
Caliel Costa
Nerd, ouvinte de blues, pesquisador, esportista e fotógrafo amador, desenvolvedor e projetista de soluções em TI. Software
Designer no Superplayer.
4. 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
8. 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
14. 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
25. 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
26. 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.”
27. 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
28. Globalcode – Open4education
Indexando GeoJSON
db.locations.createIndex({
"loc" : "2dsphere"
}, {
"name" : "loc_"
})
• Índice esparso
• Não pode ser usado como chave de sharding
29. 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
31. 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
43. Globalcode – Open4education
Segmentação de Playlists
Playlist
Loc
Type Loc Name
Correndo no Ibira Polygon [ [ [long, lat] … ] ] São Paulo
Rio 40 Graus Polygon [ [ [long, lat] … ] ] Rio de Janeiro
Men’s Health Polygon [ [ [long, lat] … ] ] Brasil (BR)
44. Globalcode – Open4education
Buscando playlists
query: {
$or: [
{ "location": { $not: { $exists: true } } },
{
"location": {
$geoIntersects: { $geometry: { type: "Point" , coordinates: [-46.6749596, -23.598877] } }
}
}
],
}
Result:
Acorda, Peão!, Acorda, Vagabundo!, Bebendo no Boteco, Correndo no Ibira, Dia de Chuva, Men’s
Health, Trabalhando numa Boa, Whiskynho com a Rapaziada, ...
45. 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, ...
46. Globalcode – Open4education
Conteúdo Localizado
• Playlists
• Spots
• Patrocínios de Playlists
• Log de Playlists ouvidas
• Log de Músicas (Tracks) ouvidas
51. Globalcode – Open4education
Closure
O MongoDB fornece toda a infraestrutura necessária para se
trabalhar com dados geolocalizados de maneira simples
Não é a toa que é usado/foi feito junto com o Foursquare
A nossa estrutura está pronta para crescer. Para colocar
novas cidades, basta mapea-las e importar o arquivo kml. A
demanda de playlists e spots vem crescendo nos últimos
meses sem que tivessemos que alterar a infraestrutura
para isso.