0

我实际上已经完成了一个,但想将我的与一个经过充分研究的可能的学术算法进行比较。可能有一个统计对象库,可以直接或组合解决我的特殊需求。

我的系统(我打算开源)有一个 NetFlow 数据流。与其存储在数据库中并使用 SQL 函数,我更喜欢拥有一个无数据库系统并维护一组统计信息,为每个新流更新,并每秒滚动(或更高)。

我的解决方案涉及单个 uint 数组,以有效地创建大小为 [60、59、23、6、...] 的锯齿状数组,代表秒、分钟、小时、天、周等。

每个插槽包含该时间的总字节数。因此,在 60 秒后,将创建一个单分钟统计信息作为 Avg(seconds)。当然,这在时间尺度上会持续相对较长。

不是简单地有数千秒的增量,而是由于:

  1. 内存限制和拥有更多统计节点的潜力;和
  2. 向用户理想的展示

...我卷起时间尺度。

鉴于一个流可能应用于统计层次结构中的多个节点(WAN 链接、IP 地址、目标地址、SourcePort-DestinationPort),我计算了一次增量(GenerateDelta),然后简单地应用于每个既活跃又活跃的节点与流元数据匹配。

在以下潜在情况下,将“滚动”给定节点上的统计信息:

  1. 被读取/显示时(通过 HTTP\JSON AJAX 请求)
  2. 应用增量时(由于相关流程)
  3. 只需每 n 秒(n 通常为 1)

总体而言,可能有一个完善的算法来保持随时间推移的运行总数(以秒、分钟......)。但如果做不到这一点,也可能有合适的算法来比较我的代码的较小子部分:

  • GenerateDelta - 不太可能,因为这专门用于分解和平均统计数组中插槽上的持续时间的流。
  • 滚动 - 如果只有几秒钟,那么这当然很简单,但是我的解决方案要求每 60 秒将 60 秒组合成一个新的分钟总数,依此类推。

我不希望响应者提出任何他们自己的算法,我已经(几乎)完成了我自己的所有算法,没有任何问题并且考虑了许多性能。当我完成并作为开源发布后,其他人可能会看到我的算法。

我希望看到的是任何“完善”的比较算法。也许我的会更好,也许我的会更糟。谷歌不擅长这类问题,我需要你的帮助。

谢谢!

4

1 回答 1

2

感谢@rici 的评论,我发现“流统计”域是必需的。有用于处理流统计的数据流管理系统 (DSMS)。SQL RDBMS 系统可以存储数据和 SQL 查询生成的统计信息,而数据流管理系统可以在给定一个或多个查询的情况下处理连续的数据流。

本文将 DSMS 描述为:

  1. 能够为了定性使用而牺牲质量
  2. 单程,因为数据量很大
  3. 让查询将数据视为序列而不是集合等等...

这个,描述了这样一个 DSMS 的图表,引用了网络流量分析问题域,

本文描述了 StreamSQL,一种类似 SQL 的语法,用于定义连续查询。

即使无法访问专有解决方案。当然有完善的算法。因此,我可以针对通用流查询工具测试我的专业系统的性能。

DSMS 的几个产品/原型可以在这个 wiki 页面中找到,特别是Odysseus很有趣,它是基于 Java 和开源的。

于 2012-12-22T14:15:16.840 回答