Pergunta

Estou construindo um site com conteúdo gerado pelo usuário. Na página inicial, quero mostrar uma lista de todos os itens criados, e quero poder classificá -los por um contador de visualização. Isso é fácil, mas eu quero vários contadores. Quero saber qual foi o item mais visitado no último dia, na semana passada ou nos últimos meses ou no geral.

Minha primeira idéia foi criar 4 colunas de contador na tabela DB do item. Um para cada um dos diários, semanal, mensal e geral, e para criar um trabalho de cron, que limpa o contador diário a cada 24 horas, o balcão semanal a cada 7 dias e assim por diante.

Mas meu problema com isso é: o que acontece se eu quiser saber qual foi o item mais visto da semana, logo após o balcão semanal ser liberado?

O que eu preciso é uma maneira eficiente de criar um contador contínuo, que foi reduzido para cada visualização de páginas que é muito antiga e aumentada para cada nova visualização de página.

Agora estou pensando em uma solução com o Servidor Redis, mas ainda não tenho nenhuma solução.

Estou apenas procurando uma ideia geral aqui, mas para sua informação, estou desenvolvendo esse aplicativo em Ruby on Rails.

Foi útil?

Solução

O que eu sugeriria para rastrear hits em cada página, com apenas um registro de data e hora e qualquer ID de usuário ou o que você puder armazenar, então você pode calcular os contadores como quiser e alterá -lo mais tarde, porque você tem os dados em um formato simples de usar . Uma tabela com entidade (página) UserID e Timestamp devem ser bons. Basta adicionar a isso sempre que a página for solicitada.

Para reduzir o número de inserções, você pode fazer parte das lojas em seu software. Construindo uma inserção de várias fileiras como aqui Para o MySQL, economizará sobrecarga. Você só precisará de suas aulas para construir a inserção conforme descrito e armazenar até a inserção. Uma idéia é não apenas a hora, mas corrigir várias linhas para que você diga, no máximo, se o servidor for, você perde apenas x número de linhas de hits.

Existe um gatilho MySQL que você pode fazer com que seja executado somente depois que o lote completo de inserções for feito, que você pode usar para atualizar tabelas de relatório, para que você não precise atingir constantemente a tabela de rastreamento principal.

Além disso, se isso precisar ser uma taxa de transferência realmente alta, poderá ser quebrado em seu próprio fragmento e acessado por meio de chamadas do Ajax para fazer o rastreamento de sucesso e obter as contagens.

Outras dicas

O que você pode fazer é armazenar o que é visitado e em que data (registro de data e hora) e você faria isso para cada vez que algo é visitado. Quando você deseja recuperar o que foi visitado, você escolheu aqueles dentro de uma variedade de datas (registro de data e hora) e as adicionaria.

OU

Cada um de seus links terá sua própria linha respectiva para todos os dias em que forem visitados. Se eles forem visitados mais de uma vez em um dia, ele adicionará +1 ao valor já existente.

Você pode usar o segundo exemplo e fazer armazenamento semanal em vez de diariamente se suas semanas forem algo como domingo a sábado e não 7 dias antes de hoje. Portanto, substitua o dia das palavras pela semana da palavra, com quantidades menores de armazenamento de dados.

Vejo que você deseja evitar enormes lojas de dados, mas na medida em que você deseja que isso funcione, não vejo muito melhor do que isso. Você poderia usar o segundo exemplo e fazer armazenamento semanal em vez de diariamente se suas semanas são algo como domingo -Sadrinha e não 7 dias antes de hoje.

Aqui está uma possibilidade para o Regis Server depois de analisar alguma documentação.

SET link_id|date => "visit_count"

Isso armazena o link_id ou o que você chama junto com o date separado por | Ou qualquer personagem que você deseja usar. Nesse valor-chave, você armazena o visit_count.

Diga que deseja adicionar um acerto a esse link nesta data. Você poderia GET link_id|date e então adicione +1 ao visit_count Ele retorna e, em seguida, guarde -o de volta da maneira que mostrei acima.

Se você deseja obter a quantidade de acertos para uma data específica, poderá com o GET link_id|date novamente.

Você apenas usaria rubi-se-hasts para substituir link_id, date e visit_count com os valores apropriados.

Espero que isso ajude você.

O que você poderia fazer é criar uma tabela chamada ViewCounters.

Haveria uma coluna 'Pageid', uma coluna 'dia' e uma coluna 'Views'. O PageId corresponderia à página visualizada e o 'dia' corresponderia ao dia em que foi visto.

Cada vez que uma página é visualizada, ela encontra (ou cria se ainda não existe uma) a linha na tabela Viewcounters com seu PageID e com o dia atual. Em seguida, incrementaria a coluna 'visualizações' para essa linha.

Isso oferece a máxima flexibilidade em relação à criação de novos contadores e acesso ao histórico. Além disso, a contagem de visualizações para contadores mensais, semanais e diários é muito barata de gerar.

Outro grande benefício para isso seria que é apenas uma linha por página por dia, o que não é realmente tão ruim assim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top