我有一个包含250+百万个netflow数据条目的数据集。我的目标是开发一种有效的方法来为此netflow数据生成数据包,我决定使用Scapy作为模拟数据包的方法。对于我的数据集中的每个条目,我发现绝大多数数据包是在五分钟的某个时间范围上限之间发送的,其中一些条目的数据包净总数高达数十万!
这就是问题所在:我需要一种方法来一次跟踪成千上万个不同的条目,以确保每个条目的数据包都在正确的增量时间发送出去,直到所有数据包都发送完为止。
例如:
假设我们的数据集中有3个条目。第一个是跨越20秒的100个数据包。下一个是200个数据包,跨越20秒。最后是500个数据包,跨越60秒。数据集中每个数据包之间的增量时间分别为0.2s,0.1s和0.12s(20 / 100、20 / 200、60 / 500)。现在,我只有三个条目需要以这些增量时间的速率传递这些数据包。附加到列表的每个条目的前几个数据包的示例如下:[来自条目1的0.0s,来自条目2的0.0s,来自条目3的0.0s,来自条目3的0.1s,来自条目2的0.1s,来自条目3的0.12s,从条目1开始0.2s,从条目2开始0.2s(0.1 x 2),从条目3开始0.24s(0.12 x 2),从条目2开始0.3s(0.1 x 3),从条目3开始0.36s(0.12 x 3),从条目1开始0.4s(0.2 x 2)]
我能想到的最好的系统是什么,它将允许所有数据包同时输出到同一列表,从而使此过程得以实现?
到目前为止,我已经尝试过简单地逐个入口(添加具有正确增量时间的数据包)并将其添加到庞大的数据包列表中,然后转到下一个入口,依此类推。这种方法行之有效,但是不仅数据包没有按时排序而且需要排序算法,而且速度极慢,而且需要15分钟以上的时间才能解决这2.5亿个条目数据集中的前100个条目!我认为我绝对可以通过管道流程来一次将多个条目添加到列表中,但是我不确定该怎么做。
当前代码位于我的github https://github.com/NolanRudolph/UONetflow/blob/master/PyScripts/netflowPackager.py上,但是我认为没有人需要阅读我的代码来解决此问题。我相信某人对Python的广泛了解绝对可以在几秒钟内提供优化的解决方案。我听说过要利用具有哈希的集合,但是我不确定如何将其集成到以高效的方式导出多个条目的数据包中。
我可以看到这个问题很快变得非常令人困惑,所以请不要犹豫,提出澄清的问题。任何帮助将不胜感激。非常感谢!