Вопрос

Мне нужна структура данных, которая позволяла бы выполнять запросы сколько предметов в прошлом X минуты.Элемент может быть просто простым идентификатором или более сложной структурой данных, предпочтительно временная метка элемента будет находиться в элементе, а не храниться снаружи (в виде хэша или аналогичного, не хотелось бы иметь проблемы с несколькими элементами, имеющими одинаковую временную метку).

Пока кажется, что с помощью LINQ я мог бы легко фильтровать элементы с меткой времени, превышающей заданное время, и суммировать количество.Хотя я пока не решаюсь пытаться внедрить материал, специфичный для .NET 3.5, в мою производственную среду.Есть ли какие-либо другие предложения по аналогичной структуре данных?

Другая часть, которая меня интересует, это старение старые данные отсутствуют, если я собираюсь запрашивать количество элементов только менее 6 часов назад, я бы хотел, чтобы все, что старше этого, было удалено из моей структуры данных, потому что это может быть давно работающая программа.

Это было полезно?

Решение

Для этого можно использовать простой связанный список.

По сути, вы добавляете новые элементы в конец и удаляете слишком старые элементы с самого начала, это дешевая структура данных.

пример-код:

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

Если список будет достаточно насыщенным, чтобы оправдать отрубание более крупных кусков, чем по одному за раз, тогда я согласен с дмо, используйте древовидную структуру или что-то подобное, что позволяет выполнять обрезку на более высоком уровне.

Другие советы

Я думаю, что важным соображением будет частота запросов по сравнению сдобавление / удаление.Если вы будете выполнять частые запросы (особенно если у вас будет большая коллекция), возможно, вам подойдет B-дерево:

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

Вы могли бы использовать какой-нибудь поток и периодически очищать это дерево или сделать его частью поиска (опять же, в зависимости от использования).По сути, вы выполните поиск по дереву, чтобы найти место "x минут назад", затем подсчитаете количество дочерних элементов на узлах с более новым временем.Если вы постоянно обновляете количество дочерних элементов под узлами, эту сумму можно подсчитать быстро.

кэш со скользящим сроком действия выполнит эту работу ....

загружайте свои элементы , и кэш справится со старением ....

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top