对于一个特定的项目,我们会获取许多事件的数据并同时收集有关这些事件的变量。收集数据后,我们对所述数据执行用户可自定义的分析,以确定用户感兴趣的内容。
数据以类似于以下的形式收集:
时间戳事件 0 x = 0 0 y = 1 3 事件 A 发生 3 x = 1 4 事件 A 发生 4 x = 2 9 事件 B 发生 9 y = 2 9 x = 0
要随时了解整个状态,最直接的方法是遍历整个数据集。例如,如果我从时间 0 开始,并“分析”到时间戳 5,我知道在该点 x = 2,y = 1,并且事件 A 已经发生了两次。这是一个非常简单的例子。用户可能(并且经常)对事件之间的时间感兴趣,比如从 A 到 B,他们可能会指定第一次出现 A,然后是 B,或者最后一次出现 A,然后是 B(分别为 9-3 = 6 或 9-4 = 5)。就像我说的,当你走过整个场景时,这很容易分析。
现在,我们需要调整模型以分析任意时间窗口。如果我们看一下 0-N,那就很简单了。但是,例如,如果我查看 1-5,我没有 y 的概念,除非我从 0 开始并且知道 y 最初是 1 并且在窗口 1-5 中没有改变。
我们的方法本质上是创建一个变量字典,并对事件运行回调。如果一个分析是“当事件 A 发生并且时间大于 3 时 x 是什么”,那么我们将在第一个事件 A 上运行该回调,它会立即返回,因为时间不大于 3。它将在 4 处再次运行,并且它会报告在 t=4 时 x 为 1。
为了适应“时间窗口”,我想我将(在后台)为分析添加额外的条件。如果他们的分析只是“事件A发生时x是什么”,并且当前窗口是1-5,那么我将其更改为“事件A发生并且时间> = 1并且时间<= 5时x是什么”。然后如果下一个窗口是 6-10,我可以根据需要重新调整条件。
我的主要问题是:这适合什么模式? 我们显然不是第一个处理此类问题的人,但我一直无法找到其他人是如何处理它的。我可能只是不知道在 Google 上究竟要搜索什么。 除了保存整个全局状态的字典以在给定时间查找单个状态之外,还有其他方法吗? 另请注意,数据可能有几条甚至数万条记录,因此对数据集的迭代越少越好。