Pergunta

Quero uma estrutura de dados que permita consultar quantos itens no último X minutos.Um item pode ser apenas um identificador simples ou uma estrutura de dados mais complexa, de preferência o carimbo de data e hora do item estará no item, em vez de armazenado fora (como um hash ou similar, não gostaria de ter problemas com vários itens tendo o mesmo carimbo de data/hora).

Até agora parece que com o LINQ eu poderia facilmente filtrar itens com carimbo de data/hora maior que um determinado horário e agregar uma contagem.Embora eu ainda esteja hesitante em tentar trabalhar com coisas específicas do .NET 3.5 em meu ambiente de produção.Existem outras sugestões para uma estrutura de dados semelhante?

A outra parte que me interessa é envelhecimento dados antigos, se eu for solicitar contagens de itens há menos de 6 horas, gostaria que qualquer coisa mais antiga fosse removida da minha estrutura de dados, porque este pode ser um programa de longa execução.

Foi útil?

Solução

Uma lista vinculada simples pode ser usada para isso.

Basicamente você adiciona novos itens no final e remove itens muito antigos desde o início, é uma estrutura de dados barata.

código de exemplo:

list.push_end(new_data)
while list.head.age >= age_limit:
    list.pop_head()

Se a lista estiver suficientemente ocupada para justificar o corte de pedaços maiores do que um de cada vez, então concordo com dmo, use uma estrutura de árvore ou algo semelhante que permita a poda em um nível superior.

Outras dicas

Acho que uma consideração importante será a frequência da consulta vs.adicionando/removendo.Se você fizer consultas frequentes (especialmente se tiver uma coleção grande), uma árvore B pode ser a melhor opção:

http://en.wikipedia.org/wiki/B-tree

Você pode passar por algum tópico e limpar essa árvore periodicamente ou torná-la parte da pesquisa (novamente, dependendo do uso).Basicamente, você fará uma pesquisa em árvore para encontrar o local “x minutos atrás” e depois contará o número de filhos nos nós com horários mais recentes.Se você mantiver atualizado o número de filhos nos nós, essa soma poderá ser feita rapidamente.

um cache com expiração deslizante fará o trabalho....

coloque seus itens e o cache cuidará do envelhecimento....

http://www.sharedcache.com/cms/

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