Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有效地关联事件 我正在研究一个C++ Windows应用程序,需要添加一个相关的能力。目前我有两个事件生成器,每个生成器生成相似的事件。两个生产者的事件生成平均组合速率为2k/秒。但是,在负载下,它会跳到300-500 k/sec。这就是事件的简化版本 Event ProcessId // e.g. 1234 Action // e.g. 0, 1, 2 Timestamp // e.g. LARGE_INTEGER Windows timestamp_C++_Algorithm_Events_Filter_Correlation - Fatal编程技术网

有效地关联事件 我正在研究一个C++ Windows应用程序,需要添加一个相关的能力。目前我有两个事件生成器,每个生成器生成相似的事件。两个生产者的事件生成平均组合速率为2k/秒。但是,在负载下,它会跳到300-500 k/sec。这就是事件的简化版本 Event ProcessId // e.g. 1234 Action // e.g. 0, 1, 2 Timestamp // e.g. LARGE_INTEGER Windows timestamp

有效地关联事件 我正在研究一个C++ Windows应用程序,需要添加一个相关的能力。目前我有两个事件生成器,每个生成器生成相似的事件。两个生产者的事件生成平均组合速率为2k/秒。但是,在负载下,它会跳到300-500 k/sec。这就是事件的简化版本 Event ProcessId // e.g. 1234 Action // e.g. 0, 1, 2 Timestamp // e.g. LARGE_INTEGER Windows timestamp,c++,algorithm,events,filter,correlation,C++,Algorithm,Events,Filter,Correlation,我需要构建的关联规则如下所示 Filter // events are from the same process ev1.ProcessId == ev2.ProcessId && // events have specific types ( ev1.Action == 0 && ev2.Action == 1) && // they are less than 2 sec

我需要构建的关联规则如下所示

Filter

    // events are from the same process
    ev1.ProcessId == ev2.ProcessId  

    &&

    // events have specific types
    ( ev1.Action == 0 && ev2.Action == 1) 

    &&

    // they are less than 2 secs apart
    ( abs(ev1.Timestamp - ev2.Timestamp) < 2 seconds) 
过滤器
//事件来自同一进程
ev1.ProcessId==ev2.ProcessId
&&
//事件有特定的类型
(ev1.Action==0&&ev2.Action==1)
&&
//它们之间的间隔不到2秒
(abs(ev1.Timestamp-ev2.Timestamp)<2秒)
我在想

  • 带有队列(用于时间和操作关联)的hashmap(ProcessId作为键)
  • 增压管路(上的示例)
但我不知道如何处理快速事件逐出,因为我需要保持CPU和内存利用率低


有谁能建议一种解决方案,使我能够有效地关联事件(CPU影响最小,内存占用率低)?由于关联窗口非常小,您可以从拆分数据开始,以便轻松逐出

将流1(较慢/较小的流)中的所有对象存储在三个哈希映射的循环缓冲区中。当您刚刚得到的事件的时间戳比您放入最新hashmap的第一个时间戳早两秒以上时,您清空最旧的hashmap并将其放在最前面,将所有其他时间戳向下移动一步。您还可以记录您现在放入此桶中的第一个项目的“开始时间”

这允许您保留来自流1的大约4-6秒的数据的循环缓冲区,这为未按正确顺序传递的消息提供了一点缓冲

对于流2(较大/较快的流),只需在所有哈希映射中进行查找。当你得到一个匹配项时,你可以用你的相关函数检查它是否真的匹配。这在
n
m
消息流中以
O(m+b*n log k/b)
b
哈希映射(bucket)和
k
消息每秒运行。对于
b=3
,流
n
中每秒有k条消息
O(m+n log k)
。空间要求应在
6k左右


如果只使用三个hashmaps会使性能太高(无论是内存使用还是cpu使用(清空hashmaps确实需要一些时间)),那么可以使用更多的hashmaps(增加
b
)。只需在内存中保留足够的时间,再加上一两个,并记住为迟到的人准备的小缓冲区

您是否在寻找所产生事件的数量或事件的某些特征之间的相关性?采样和估计是允许的还是需要精确的相关性度量?这是事件的特征:在有争议的事件流中,我需要找到与我的过滤器匹配的事件。也许“相关性”这个词在这里并不准确。采样/估计可能会导致错误,我可能会错过重要数据,但我认为我可以对重复数据消除事件应用一些过滤,因为将有许多“接近”重复。