0

我有一些独特的问题,看起来类似于这里的问题:

https://news.ycombinator.com/item?id=8368509

我有一个高速流量分析框,它以大约 5 Gbps 的速度捕获,并从中挑选出特定的数据包以保存为 C++ 程序中的某种格式。每天可能会有 1-3 TB 写入磁盘。由于它是网络数据,因此它的所有时间序列都低至纳秒级,但最好将其保存在秒或毫秒级,然后让另一个应用程序对嵌入的更高分辨率的时间戳进行排序。我的问题是决定使用哪种格式。我的两个要求是:

  1. 能够使用几个不同的时间戳参数以大约 50 MB/s 的速度连续写入磁盘。
  2. 能够将此数据块导出到 MATLAB (HDF5)。
  3. 每天查询一次或两次此数据以进行分析

另一个不是硬性要求的好东西是:

  1. 将有 4 个这样的盒子独立运行,如果可能的话,最好查询所有这些盒子并合并数据。我应该提到所有这 4 个盒子都位于物理上不同的位置,因此共享数据存在一些开销。

由于遗留应用程序,第二个是我无法更改的,但我认为第一个更重要。我可能想要导出到 matlab 的查询类型类似于“在时间 Y 和 Z 之间拉度量 X”,因此最终必须进入 HDF5 格式。如果需要,我可以使用一个名为 MatIO 的外部库来编写 matlab 文件,但如果没有翻译步骤会更好。我已经阅读了上面提到的整个线程,并且有很多选项似乎很突出:kdb+、Cassandra、PyTables 和 OpenTSDB。所有这些似乎都在做我想做的事,但我真的不知道将它变成 MATLAB HDF5 格式有多么容易,以及是否其中任何一个会使它比其他格式更难。

如果有人有做类似事情的经验,那将是一个很大的帮助。谢谢!

4

1 回答 1

1

KDB+ 自动收报机当然能够以这种速度捕获数据,但是您需要确保很多事情(无论您选择什么解决方案)

  • 捕获数据的机器是否有足够的内核?例如,最适合于taskset一个tickerplant,一个没有其他东西可以与之抗衡的核心
  • 与磁盘类似 - SSD,确保总线上没有争用
  • 分离工作负载 - 可以将不同类型的数据(也许数据包可以按源或流分区?)到不同的 cpus/disks/tickerplant 进程。

基本上有很多方法可以削减这个。我可以说,尽管使用适当的硬件 KDB+ 可以完成这项工作。但是,如果您想要 HDF5,最好有一个简单的过程来捕获数据并即时写入/转换到磁盘。

于 2015-02-22T17:21:06.143 回答