查询和转换为Matlab的最佳时间序列格式(HDF5)



我有一个独特的问题,看起来与这里的问题相似:

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

我有一个高速流量分析盒,它以大约5Gbps的速度捕获,并从中挑选出特定的数据包,保存到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格式有多容易,以及这些是否会使其比其他格式更难。

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

KDB+tickerplant当然能够以这种速度捕获数据,但您需要确保(无论选择何种解决方案)

  • 正在捕获数据的机器是否有足够的核心?最好是taskset一个tickerplant,例如,一个其他任何东西都无法与之抗衡的核心
  • 与磁盘SSD类似,请确保总线上没有争用
  • 分离工作负载-可以将不同类型的数据(可能数据包可以按源或流进行分区?)写入不同的cpu/磁盘/tickerplant进程

基本上有很多方法可以解决这个问题。不过,我可以说,有了合适的硬件,KDB+就可以完成这项工作。然而,如果您想要HDF5,那么最好有一个简单的过程来捕获数据并动态写入/转换到磁盘。

最新更新