o que seria um bom algoritmo para manter a contagem de itens não lidos em uma implementação de alimentação agregador online?

StackOverflow https://stackoverflow.com/questions/989134

  •  13-09-2019
  •  | 
  •  

Pergunta

Suponha que o banco de dados tem tabelas para os usuários, Feeds, itens, e uma capacidade de saber quais os itens que o usuário já tenha visto. Eu estou olhando para um projeto paradigma que pode ser usado no servidor para computação em um curto espaço de tempo [id alimentação, NUM_UNREAD] para cada alimentação que o usuário tenha subscrito.

Suponha abundância de usuários e que os alimentos estão sendo atualizados periodicamente no backend.

Editar: Eu queria resolver o problema Nick J trouxe à tona (veja abaixo). Mas agradeço a solução postado por cletus. Eu não estou tão preocupado com as consultas de db, mas quer um "paradigma de design." - como manter um processo de watchdog que mantém as contagens não lidas na memória para que ele pode ser servido em qualquer ponto

Foi útil?

Solução

Eu não sei o que lhe dizer exatamente porque o que você está pedindo é razoavelmente simples.

Primeiro, use Google Reader como referência para alimentação agregadores / leitores online. E se você está tentando recriar a funcionalidade, o Google Reader tem praticamente pregado já (IMHO).

Google Reader funciona simplesmente armazenando uma lista de feeds. Em termos de banco de dados, você provavelmente tem essas entidades

User: id, name, email, etc...
Feed: id, feed_name, feed_url
Content: id, feed_id, title, content
User Feed: id, user_id, feed_id, user_label, has_read

itens não lidos:

SELECT COUNT(1)
FROM user u
JOIN user_feed uf ON uf.user_id = u.id
JOIN feed f ON f.id = uf.feed_id
WHERE has_read = 0

itens não lidos por feed:

SELECT feed_id, feed_name, COUNT(1)
FROM user u
JOIN user_feed uf ON uf.user_id = u.id
JOIN feed f ON f.id = uf.feed_id
WHERE has_read = 0
GROUP BY feed_id, feed_name

E então você só precisa de algum mecanismo para marcar itens como lidos. No caso do Google Reader, há chamadas apenas AJAX desencadeadas por eventos mouseover com links adicionais para tudo o marca como leitura, deixe um item marcado como não lido e assim por diante.

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