Sistemas de recomendação de eventos
Design de Negócios
- Projetar sistemas de recomendação de eventos baseados em personalização para pesquisa de eventos.
Instrução Geral
- Projete um serviço web com
RESTful APIs
em Java para lidar com solicitações e respostas HTTP - Frontend: uma página web interativa com tecnologia
AJAX
implementada com HTML
, CSS
e JavaScript
. O site de recomendação de eventos realiza três funções principais:- Pesquise eventos em torno dos usuários
- Eventos favoritos que eles gostam e também excluem eventos que eles não gostam mais
- Obtenha recomendações de eventos com base em sua história favorita e na distância até onde os eventos serão realizados
- Backend: use
Java
para processar solicitações lógicas, e alguns suportes são os seguintes:- Construído com banco de dados relacional e banco de dados NoSQL (
MySQL
e MongoDB
) para suportar armazenamento de dados de usuários e itens pesquisados na API TicketMaster - Projetar algoritmo de recomendação baseado em conteúdo para recomendação de eventos
- Implantar servidor de site no
Amazon EC2
: Sistema de recomendação de eventos - Analise o tráfego do site online e offline com ELK (
ElasticSearch
, Logstash
e Kibana
) e MapReduce
no MongoDB
Projeto de infraestrutura
- Arquitetura de 3 camadas
- Camada de apresentação: HTML, CSS, JavaScript
- Camada de dados: MySQL, MongoDB
- Camada lógica: Java
- Ambiente de desenvolvimento local e remoto
Ambiente de desenvolvimento local
Ambiente de desenvolvimento remoto
Projeto de API
- Camada lógica (Java Servlet para RPC)
- Procurar
- itens de pesquisa
- API TicketMaster
- analisar e limpar dados, saveItems
- resposta de retorno
- História
- obter, definir, excluir itens favoritos
- consultar banco de dados
- resposta de retorno
- Recomendação
- recomendar itens
- obter história favorita
- pesquisar eventos semelhantes, classificando
- resposta de retorno
- Conecte-se
- GET: verifica se a sessão está logada
- POST: verifique o nome de usuário e senha, defina o horário da sessão e marque como logado
- consultar banco de dados para verificar
- resposta de retorno
- Sair
- GET: sessão inválida se existir e redireciona para
index.html
- POST: o mesmo que GET
- resposta de retorno
- Cadastre-se
- Definir um novo usuário na tabela/coleção de usuários no banco de dados
- resposta de retorno
Design de APIs na camada lógica
- Documento oficial da TicketMasterAPI - API de descoberta
- Design de algoritmos de recomendação
- Recomendação baseada em conteúdo : encontre categorias no perfil do item favorito de um usuário e recomende itens semelhantes com as mesmas categorias.
- Apresentar itens recomendados com classificação baseada na distância (geolocalização dos usuários)
Processo de solicitação de recomendação
Projeto de banco de dados
- MySQL
- usuários - armazena informações do usuário.
- itens - armazena informações do item.
- categoria - relação item-categoria da loja
- histórico - armazena o histórico favorito do usuário
Projeto de banco de dados MySQL
- MongoDB
- usuários - armazena informações do usuário e histórico de favoritos. = (usuários + histórico)
- itens - armazena informações do item e relacionamento item-categoria. = (itens + categoria)
- logs – armazena informações de log
Detalhes de implementação
- Padrão de projeto
- Padrão de construtor :
Item.java
- Ao converter eventos de TicketMasterAPI em itens Java, use o padrão do construtor para adicionar campos livremente.
- Padrão de fábrica :
ExternalAPIFactory.java
, DBConnectionFactory.java
-
ExternalAPIFactory.java
: suporta múltiplas funções como recomendação de evento, restaurante, notícias, empregos… basta vincular a diferentes APIs públicas como TicketMasterAPI. Melhore a capacidade de extensão. -
DBConnectionFactory.java
: suporta vários bancos de dados como MySQL e MongoDB. Melhore a capacidade de extensão.
- Padrão singleton :
MySQLConnection.java
, MongoDBConnection.java
- Crie apenas um número específico de instâncias do banco de dados, e a classe poderá controlar a própria instância e fornecer acesso global à classe externa
Análise do comportamento do usuário
- On-line ( ElasticSearch , Logstash , Kibana )
- Use o Logstash para buscar o log (no formato NoSQL), depois armazene os dados no ElasticSearch e, finalmente, use o Kibana para analisar os dados no ElasticSearch, obtendo algumas tabelas e gráficos como uso de APIs, status da solicitação, geolocalização de visitantes, etc.
Ambiente de desenvolvimento remoto
- Off-line ( MapReduce no MongoDB )
- Copie e cole alguns logs do servidor Tomcat
- Purifique os dados de log e armazene-os no MongoDB
- Faça
mapreduce()
no MongoDB - Obtenha uma lista de contagem de timebucket em ordem decrescente de contagem e, em seguida, encontre o horário de pico do tráfego do site