sistemas de recomendações e neo4j na cloud computing

47
Sistemas de recomendações e Neo4J na nuvem Priscila Mayumi Sato @mayogax http://dev.mayogax.me

Upload: priscila-mayumi-sato

Post on 22-Dec-2014

1.323 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Sistemas de recomendações e neo4J na cloud computing

Sistemas de recomendações e Neo4J

na nuvemPriscila Mayumi Sato

@mayogax

http://dev.mayogax.me

Page 2: Sistemas de recomendações e neo4J na cloud computing

Agenda

• Projeto de exemplo• Sistema de recomendações• Banco de dados de grafos• Como subir uma base de grafos na nuvem• Acessando REST API

Page 3: Sistemas de recomendações e neo4J na cloud computing

Projeto de exemplo♪”Hoje à noite eu tive apenas um leve sonho (...)à luz do luar.”♪

- Shinku Crimson Red (Kurushitsuji)

Page 4: Sistemas de recomendações e neo4J na cloud computing

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.

Page 5: Sistemas de recomendações e neo4J na cloud computing

GitHub (again)

• No GitHub temos repositórios, cada um pode ser um projeto (ou mais??).

PrivadosPúblicos

Page 6: Sistemas de recomendações e neo4J na cloud computing

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

Page 7: Sistemas de recomendações e neo4J na cloud computing

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.

Page 8: Sistemas de recomendações e neo4J na cloud computing

GitHub (again)

• Como fazer um sistema de recomendações??

Page 9: Sistemas de recomendações e neo4J na cloud computing

Sistema de recomendações♪”Novamente iniciará a legendária batalha final.

Vou usar a Armadura Sagrada!♪” - Megami no Senshi (Saint Seiya)

Page 10: Sistemas de recomendações e neo4J na cloud computing

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

Page 11: Sistemas de recomendações e neo4J na cloud computing

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

Page 12: Sistemas de recomendações e neo4J na cloud computing

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

Page 13: Sistemas de recomendações e neo4J na cloud computing

GitHub (again)

• Existem alguns meios de se achar repositórios interessantes no GitHub:

• GitHub Trending https://github.com/trending

Page 14: Sistemas de recomendações e neo4J na cloud computing

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

Page 15: Sistemas de recomendações e neo4J na cloud computing

GitHub (again)

• Como pegar repositórios que muitos amigos derem watch?

• Como modelar em uma base relacional a minha estrutura?

Repositório UsuárioPossui

Watch

Segue

Page 16: Sistemas de recomendações e neo4J na cloud computing

Bancos de dados de grafos♪”Vamos estender as mãos e tentar agarrar o infinito céu estrelado”♪

- 8 Sense (Saint Seiya)

Page 17: Sistemas de recomendações e neo4J na cloud computing

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

Page 18: Sistemas de recomendações e neo4J na cloud computing

Banco de dados de Grafos

Repositório UsuárioPossui

Watch

Segue

Nó NóR

R

R

Page 19: Sistemas de recomendações e neo4J na cloud computing

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

Page 20: Sistemas de recomendações e neo4J na cloud computing

Comparação

Page 21: Sistemas de recomendações e neo4J na cloud computing

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)

Page 22: Sistemas de recomendações e neo4J na cloud computing

Banco de dados de Grafos

• API para diversas linguagens (ou não)

• API RESTful (maioria dos casos)

• Dialeto de query própria

• ORM! (raro)

Page 23: Sistemas de recomendações e neo4J na cloud computing

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/

Page 24: Sistemas de recomendações e neo4J na cloud computing

Como subir uma base de grafos na nuvem♪” abro minhas asas o imenso céu vou alcançar

acreditar...”♪ - Never (Saint Seiya)

Page 25: Sistemas de recomendações e neo4J na cloud computing

Por que usar a nuvem?

• Redução do investimento inicial de capital em servidores

• Fácil deploy e manutenção• Facilmente escalável

Page 26: Sistemas de recomendações e neo4J na cloud computing

Opções

• Subir uma instancia manualmente• Subir uma instancia automaticamente com puppet• Usar um serviço já existente.

Page 27: Sistemas de recomendações e neo4J na cloud computing

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

Page 28: Sistemas de recomendações e neo4J na cloud computing

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

Page 29: Sistemas de recomendações e neo4J na cloud computing

Subir uma instancia manualmente

Page 30: Sistemas de recomendações e neo4J na cloud computing

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

Page 31: Sistemas de recomendações e neo4J na cloud computing

Subir uma instancia automaticamente com puppet

Page 32: Sistemas de recomendações e neo4J na cloud computing

Subir uma instancia automaticamente com puppet

Page 33: Sistemas de recomendações e neo4J na cloud computing

Subir uma instancia automaticamente com puppet

Page 34: Sistemas de recomendações e neo4J na cloud computing

Subir uma instancia automaticamente com puppet

Page 35: Sistemas de recomendações e neo4J na cloud computing

Subir uma instancia automaticamente com puppet

Page 36: Sistemas de recomendações e neo4J na cloud computing

Subir uma instancia automaticamente com puppet

Page 37: Sistemas de recomendações e neo4J na cloud computing

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

Page 38: Sistemas de recomendações e neo4J na cloud computing

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

Page 39: Sistemas de recomendações e neo4J na cloud computing

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).

Page 40: Sistemas de recomendações e neo4J na cloud computing

Acessando REST API♪”” -

Page 41: Sistemas de recomendações e neo4J na cloud computing

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

Page 42: Sistemas de recomendações e neo4J na cloud computing

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

• Troque o “Endpoint” pelo ip do seu banco

Page 43: Sistemas de recomendações e neo4J na cloud computing

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

Page 44: Sistemas de recomendações e neo4J na cloud computing

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• http://ENDPOINT/db/data/relationship/1

Page 45: Sistemas de recomendações e neo4J na cloud computing

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

Page 46: Sistemas de recomendações e neo4J na cloud computing

Dúvidas?Dúvidas, refutações, criticas, sugestões, convites para jogar RPG?