o que seria um bom algoritmo para manter a contagem de itens não lidos em uma implementação de alimentação agregador online?
-
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
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.