我想要一个数据结构,允许查询最后 X 分钟中的项目数。项目可以只是简单的标识符或更复杂的数据结构,优选地,项目的时间戳将在项目中,而不是存储在外部(作为散列或类似物,不希望具有相同的多个项目的问题)时间戳)。
到目前为止,似乎使用LINQ我可以轻松过滤时间戳大于给定时间的项目并聚合计数。虽然我对尝试将.NET 3.5特定的东西用于我的生产环境犹豫不决。对于类似的数据结构还有其他建议吗?
我感兴趣的另一部分是老化旧数据,如果我只是要求不到6小时前的物品数量我想要比那更旧的东西要从我的数据结构中删除,因为这可能是一个长期运行的程序。
答案 0 :(得分:3)
可以使用简单的链接列表。
基本上你在最后添加新项目,并从一开始就删除太旧的项目,这是一个廉价的数据结构。
示例代码:
list.push_end(new_data)
while list.head.age >= age_limit:
list.pop_head()
如果列表足够繁忙以保证一次删除大件,那么我同意dmo,使用树结构或类似的东西允许在更高级别进行修剪。
答案 1 :(得分:2)
我认为重要的考虑因素是查询与添加/删除的频率。如果你经常进行查询(特别是如果你有一个大型集合),可以选择B树:
http://en.wikipedia.org/wiki/B-tree
你可以让一些线程经过并定期清理这棵树,或者让它成为搜索的一部分(再次,取决于用法)。基本上,您将进行树搜索以找到“x分钟前”的位置,然后用较新的时间计算节点上的子节点数。如果您保持节点下的子节点数最新,则可以快速完成此总和。
答案 2 :(得分:2)