Your SlideShare is downloading. ×

Sistemas de recomendações e neo4J na cloud computing

1,546

Published on

Você conhece o Github? Seria bacana um sistema de sugestões de repositórios? Sabe fazer isso? …

Você conhece o Github? Seria bacana um sistema de sugestões de repositórios? Sabe fazer isso?

Veja como funciona a teoria dos sistemas de recomendações e como usar noSQL, especificamente sistemas de grafos, para criar recomendações.

Depois suba seu banco Neo4J na Cloud Computing

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,546
On Slideshare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
24
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Sistemas de recomendações e Neo4J na nuvem Priscila Mayumi Sato @mayogax http://dev.mayogax.me
  • 2. Agenda • Projeto de exemplo • Sistema de recomendações • Banco de dados de grafos • Como subir uma base de grafos na nuvem • Acessando REST API
  • 3. Projeto de exemplo ♪”Hoje à noite eu tive apenas um leve sonho (...)à luz do luar.”♪ - Shinku Crimson Red (Kurushitsuji)
  • 4. Github (again) • Github pode ser usado como repositório de código, rede social e um ótimo lugar para aprender código. Informações do meu perfil. Sigam.
  • 5. GitHub (again) • No GitHub temos repositórios, cada um pode ser um projeto (ou mais??). PrivadosPúblicos
  • 6. GitHub (again) • Algumas pessoas são escavadoras de repositórios e ficam lendo, comentando, discutindo e submetendo alterações nos códigos dos outros. • Uma forma divertida de rede social <3
  • 7. GitHub (again) Alexandre, como você acha repositórios legais? Eu sigo pessoas e vou vasculhando o que elas seguem ou contribuem. Seria legal ter uma forma fácil de encontrar repositórios, né? Acho que vou fazer uma. Se você fizer mostra pro pessoal, será de grande ajuda.
  • 8. GitHub (again) • Como fazer um sistema de recomendações??
  • 9. Sistema de recomendações ♪”Novamente iniciará a legendária batalha final. Vou usar a Armadura Sagrada!♪” - Megami no Senshi (Saint Seiya)
  • 10. Recomendações • Muitas empresas fornecem serviços ou produtos e fornecem a seus usuários recomendações de produtos ou serviços. • Não é mais uma vantagem e sim um serviço básico um e- commerce fornecer recomendações de produtos. • Existem serviços que se especializam em recomendações. Vantagem competitiva: recomendações de produtos Principal serviço: recomendações de músicas
  • 11. Tipos de sistemas de recomendações: • Baseado em Conteúdo • Busca itens parecidos para sugerir • Diferentes formas de se classificar o conteúdo: • Algoritmos de análise de conteúdos parecidos • Informações classificatórias em tags • Menos informação • Filtragem Colaborativa • Baseia-se em sugerir itens que pessoas também gostaram • Forma de se classificar o conteúdo: • “Se um usuário gostou de A e de B, um outro usuário que gostou de A também pode gostar de B” [Renata Ghisloti] • Muita informação
  • 12. Algoritmos • Baseado em conteúdo: • Necessário: classificar conteúdos parecidos • Opção manual: humano coloca tags nos itens • Algoritmos classificam conteúdos • Exemplos: algoritmo dos Vizinhos Mais Próximos, Content Matching, Content-plus-Link • Baseado em colaboração: • Necessário: classificar itens, usuários e relações • Opção prática: selecionar itens que pessoas próximas se relacionaram da mesma forma (ex: filmes que meus amigos curtiram) • Algoritmos buscam relações entre itens e usuários • Exemplos: Slope One, Friend-of-Friend, SONAR
  • 13. GitHub (again) • Existem alguns meios de se achar repositórios interessantes no GitHub: • GitHub Trending https://github.com/trending
  • 14. GitHub (again) • Baseado em algoritmos de colaboração encontrar repositórios que eu gostaria de ver baseado nos repositórios que meus amigos seguem. • Se muitos amigos meus seguirem (watch) um repositório X ele pode ser legal para mim. • No caso de empate mostrar primeiro o repositório que contém uma tag que eu goste • Entre um repositório que usa Java e um que usa C# qual eu vou ver primeiro? • No futuro: dar mais pontos pros repositórios de amigos “famosos” • Se o Alexandre tem um repositório X esse pode ser mais interessante que o repositório Y que um Fulano tem
  • 15. GitHub (again) • Como pegar repositórios que muitos amigos derem watch? • Como modelar em uma base relacional a minha estrutura? Repositório Usuário Possui Watch Segue
  • 16. Bancos de dados de grafos ♪”Vamos estender as mãos e tentar agarrar o infinito céu estrelado”♪ - 8 Sense (Saint Seiya)
  • 17. Banco de dados de Grafos • Tipo de banco de dados noSQL • Baseado na teoria de grafos • Index-free • Nossas entidades são os vertices (nos) • O relacionamento são as arestas • Os relacionamentos são tão importantes quanto entidades • Relacionamentos podem possuir dados
  • 18. Banco de dados de Grafos Repositório Usuário Possui Watch Segue Nó Nó R R R
  • 19. Quando usar grafos? • Quando os relacionamentos forem mais importantes que os dados. • Quando houverem muitos relacionamentos e caminhos até os relacionamentos. • A propósta não é que você use graph databases a todo momento, mas em certas ocasiões em que há alto indice de dados conectados
  • 20. Comparação
  • 21. Por que usar grafos? • “It is normal to reach read-performance of 2000 relationship traversals per millisecond (about 1-2 million traversal steps per second) fully transactional, with warm caches, per thread. With shortest-path- calculations, Neo4j is even on small graphs of a couple of 1000 of nodes 1000 times faster than MySQL, the difference increasing as the size of the graph increases.” • http://www.infoq.com/articles/graph-nosql-neo4j • Motivos: • Algoritmos mais otimizados para buscas transversais • Não precisa de Joins • Lazy fashion (retorna dados somente do nó encontrado)
  • 22. Banco de dados de Grafos • API para diversas linguagens (ou não) • API RESTful (maioria dos casos) • Dialeto de query própria • ORM! (raro)
  • 23. Neo4J • “Neo4j is a highly scalable, robust (fully ACID) native graph database. Neo4j is used in mission-critical apps by thousands of leading startups, enterprises, and governments around the world.” • http://www.neo4j.org/
  • 24. Como subir uma base de grafos na nuvem ♪” abro minhas asas o imenso céu vou alcançar acreditar...”♪ - Never (Saint Seiya)
  • 25. Por que usar a nuvem? • Redução do investimento inicial de capital em servidores • Fácil deploy e manutenção • Facilmente escalável
  • 26. Opções • Subir uma instancia manualmente • Subir uma instancia automaticamente com puppet • Usar um serviço já existente.
  • 27. Usar um serviço já existente. • GRapheneDB • http://www.graphenedb.com/ • Serviço rodado por cima da Amazon • 512MB gratuitos • Suporte a REST API e Gremlin
  • 28. Subir uma instancia manualmente • Ir no seu serviço de Cloud favorito • Criar uma instancia • Habilitar firewall para ser acessado de fora • Instalar o Neo4J • Subir instancia
  • 29. Subir uma instancia manualmente
  • 30. Subir uma instancia automaticamente com puppet • Disponível para Amazon Web Services • Passos: • Necessário criar uma conta (caso você não tenha) • Vá ao painel de CloudInformation e crie um Stack com o nome que você quiser • Selecione a opção de usar uma url com o template • https://cf-templates.neo4j.org.s3.amazonaws.com/cf_template.json • Escolha uma senha e usuário para o Neo4J • Adicione uma keyValue tag • Next Next Next Finish
  • 31. Subir uma instancia automaticamente com puppet
  • 32. Subir uma instancia automaticamente com puppet
  • 33. Subir uma instancia automaticamente com puppet
  • 34. Subir uma instancia automaticamente com puppet
  • 35. Subir uma instancia automaticamente com puppet
  • 36. Subir uma instancia automaticamente com puppet
  • 37. Bonus: subindo no Azure • Crie uma conta no Windows Azure • Instale o Azure SDK no Visual Studio • Baixe a solução pronta do Neo4J.Azure.Server • Configure o Java no Azure • Deploy da solução que você baixou do Neo4J no Azure
  • 38. Bonus: subindo no Azure • Passo a passo (em inglês): • Part 1. Create Azure Account and Prepare Azure for Neo4j Deployment • Part 2. Download the Azure SDK and Configure Azure in Visual Studio Server Explorer • Part 3. Download and Configure the Neo4j.Azure.Server Solution • Part 4. Upload Java and Neo4j to Azure • Part 5. Deploy Neo4j to Azure
  • 39. Bonus: subindo no Azure • Da forma tradicional: • Inicie uma instancia • Instale/Configure o Java • Instale o Neo4J Server • Inicie o Server • Configure o Firewall da sua instancia para aceitar acesso remoto (selecione um IP de onde ficará sua aplicação).
  • 40. Acessando REST API ♪”” -
  • 41. API REST • Depois disso você vai receber um endpoint com o ip do banco (if tudo deu certo) • A partir daqui você pode usar esse endpoint para conversar com o banco • No caso do Neo4J, como muitos, há uma interface REST
  • 42. API REST • Criando um nó: • Método POST • http://ENDPOINT/db/data/node {“repositorio":”GitHubAgain"} • Lendo um nó • Método GET • http://ENDPOINT/db/data/node/666 • Deletando um nó • Método Delete • http://ENDPOINT/db/data/node/666 • *Um nó com relacionamento não pode ser deletado
  • 43. API REST • Adicionando propriedades a um nó: • Método PUT • http://lENDPOINT/db/data/node/666/properties/tag/ CSharp • Modificando uma propriedade • Método PUT • http://ENDPOINT/db/data/node/666/properties/tag/ Java • Deletando uma propriedade • Método Delete • http://ENDPOINT/db/data/node/666/properties/tag • Troque o “Endpoint” pelo ip do seu banco
  • 44. API REST • Atravessando um nó: • Método POST • http://lENDPOINT/db/data/node/3/traverse/node • Atravessando relacionamentos: • Método POST • http://ENDPOINT/db/data/node/3/traverse/relationship • Atravessando caminhos: • Método POST • http://ENDPOINT/db/data/node/3/traverse/path • Deletando um relacionamento: • Método Delete
  • 45. API REST • Atravessando um nó: • Método POST • http://lENDPOINT/db/data/node/3/traverse/node • Atravessando relacionamentos: • Método POST • http://ENDPOINT/db/data/node/3/traverse/relationship • Descobrindo tipos de relacionamentos: • Método GET • http://ENDPOINT/db/data/relationship/types • Troque o “Endpoint” pelo ip do seu banco
  • 46. Dúvidas? Dúvidas, refutações, criticas, sugestões, convites para jogar RPG?
  • 47. Obrigada http://dev.mayogax.me @MayogaX

×