Language agnostic 从时间序列数据事件重构状态

Language agnostic 从时间序列数据事件重构状态,language-agnostic,time-series,Language Agnostic,Time Series,对于一个特定的项目,我们获取许多事件的数据,同时收集这些事件的变量。收集数据后,我们对所述数据执行用户自定义分析,以确定用户感兴趣的内容 数据的收集形式与此类似: Timestamp Event 0 x = 0 0 y = 1 3 Event A occurred 3 x = 1 4 Event A occurred 4 x = 2 9

对于一个特定的项目,我们获取许多事件的数据,同时收集这些事件的变量。收集数据后,我们对所述数据执行用户自定义分析,以确定用户感兴趣的内容

数据的收集形式与此类似:

Timestamp Event 0 x = 0 0 y = 1 3 Event A occurred 3 x = 1 4 Event A occurred 4 x = 2 9 Event B occurred 9 y = 2 9 x = 0 时间戳事件 0 x=0 0 y=1 3发生了事件A 3x=1 4发生了事件A 4x=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发生时x是什么,时间>=1,时间您可以在日志(N)中按时间搜索,您可以感觉到有多少更新是可接受的……因此,我的解决方案如下:

选择一个可接受的更新数N,以返回结果。考虑到您目前提到的比例,256可能是好的

每N个记录,向字典提交一个具有时间戳的所有状态条目


现在,您需要权衡字典大小和速度。N->\infty是定期搜索。N我认为您最好的方法是定期“快照”完整状态数据,例如每1000个样本(例如),并记录增量。当您将数据存储为某个原始值(也称为增量)的偏移量时,您别无选择,只能从原始值开始重建完整数据。存储定期快照将减少您必须执行的重建量-设计折衷是一方面存储要求低但重建时间长,另一方面存储要求高但重建时间短另一方面


例如,MPEG将每一帧存储为当前帧和前一帧之间的差异。通常,这将强制从开始查看MPEG,但该格式还定期存储完整帧,以便解码器不必一直回溯到文件的开始。

特别是长GOP MPEG(一长组图片)。既然你提到了它,我认为这与Flash电影使用“关键帧”IIRC所做的类似。很好的例子。