【发布时间】:2012-08-07 03:54:42
【问题描述】:
我需要一种数据存储类型和算法来跟踪我看到的最后 N 个项目的状态。每个项目都有通过或失败的状态,但如果连续 M 个项目失败,我正在监控的系统将被视为失败。一旦系统被认为出现故障,我就需要回溯历史数据并找到宽度为 W 的最后一个窗口,其中所有项目都处于“良好”状态。
例如,如果 M=4 和 W = 3:
1 好 2 好 3 好 4 好 5 好 | 6 好 |- 大小为 3 的窗口,一切都很好。 7 好 | 8 坏 9 坏 10 好 11 好 12 坏 13 好 14 坏 15 坏 16 坏 17 Bad我知道这最终会以正则表达式搜索的形式结束,并且对 Knuth 的模糊回忆浮现在我记忆的黑暗深处,所以有人能指点我简单介绍一下如何做到这一点吗?同样值得我将在 C# .Net 3.5 中在 Windows XP 系统上实现这个,看到 3GB 的 Ram(和一个 i7 处理器 - sniff 这台机器曾经有 Windows 7,它确实有8GB 内存 - 但那是 TDWTF 的故事)
最后,我将在该系统的任何给定运行中扫描从 100,000 到数百万的项目数量。我不需要跟踪整个运行,只需跟踪所有项目的子集,直到发生系统故障。发生这种情况时,我可以转储所有收集的数据并重新开始该过程。但是,对于我正在跟踪的每个项目,我必须至少保留通过/失败状态和 10 个字符的字符串。因此,我也在寻找有关如何在系统中收集和维护这些数据的建议。虽然我很想说 - “嗯,即使整个运行以 100% 的速度通过,它也会全部放入内存中,所以它为你准备了一个数组!”
【问题讨论】: