C# 中的老化数据结构

Posted

技术标签:

【中文标题】C# 中的老化数据结构【英文标题】:Aging Data Structure in C# 【发布时间】:2010-09-06 03:04:55 【问题描述】:

我想要一个允许查询过去 X 分钟内有多少项目的数据结构。一个项目可能只是一个简单的标识符或更复杂的数据结构,最好项目的时间戳将在项目中,而不是存储在外部(作为散列或类似的,不希望有多个项目具有相同的问题时间戳)。

到目前为止,我似乎可以使用 LINQ 轻松过滤时间戳大于给定时间的项目并聚合计数。尽管我对尝试将 .NET 3.5 特定的东西应用到我的生产环境中犹豫不决。对于类似的数据结构,还有其他建议吗?

我感兴趣的另一部分是老化旧数据,如果我只想询问少于 6 小时前的项目计数,我想要比这更旧的任何数据从我的数据结构中删除,因为这可能是一个长时间运行的程序。

【问题讨论】:

【参考方案1】:

可以使用一个简单的链表。

基本上你在末尾添加新项目,从一开始就删除太旧的项目,这是一种廉价的数据结构。

示例代码:

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

如果列表足够繁忙以至于需要一次切掉大于一个的部分,那么我同意dmo,使用树结构或允许更高级别修剪的类似结构。

【讨论】:

【参考方案2】:

我认为一个重要的考虑因素是查询与添加/删除的频率。如果您要进行频繁的查询(特别是如果您有大量的集合),那么 B 树可能是您的最佳选择:

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

您可以让一些线程通过并定期清理此树或使其成为搜索的一部分(同样,取决于使用情况)。基本上,您将进行树搜索以找到“x 分钟前”的位置,然后计算节点上具有较新时间的子节点数。如果你保持节点下的子节点数量是最新的,这个总和可以很快完成。

【讨论】:

【参考方案3】:

具有滑动过期的缓存将完成这项工作....

把你的物品塞进去,缓存处理老化....

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

【讨论】:

以上是关于C# 中的老化数据结构的主要内容,如果未能解决你的问题,请参考以下文章

统计模型产品磨损老化单因素方差分析

IoT创业:产品生产之老化测试

基于负极主导区间的电池神经网络老化预测

执行计划组件组件老化

SGS老化测试,GB/T 16422.2-2014,GB/T 1865-2009,ISO 4892

技术基于负极主导区间的电池神经网络老化预测