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

时间:2015-02-21 16:50:26

标签: matlab cassandra hdf5 kdb q-lang

我有一个与此处问题类似的独特问题:

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

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

  1. 能够使用几个不同的带时间戳的参数以大约50 MB / s的速度写入磁盘。
  2. 能够将这些数据块导出到MATLAB(HDF5)中。
  3. 每天一次或两次查询此数据以进行分析
  4. 另一个不是硬性要求的好处是:

    1. 这些盒子中将有4个独立运行,如果可能的话,最好查询所有这些盒子并组合数据。我应该提到所有这4个盒子都位于物理上不同的位置,因此共享数据会有一些开销。
    2. 第二个是由于遗留应用程序而无法改变的东西,但我认为第一个更重要。我可能想要导出到matlab中的查询类型类似于“在时间Y和Z之间拉取度量X”,因此最终必须采用HDF5格式。如果需要,我可以使用一个名为MatIO的外部库来编写matlab文件,但如果没有翻译步骤会更好。我已经阅读了上面提到的整个主题,并且有许多选项似乎脱颖而出:kdb +,Cassandra,PyTables和OpenTSDB。所有这些似乎都是我想要的,但我无法弄清楚将它变成MATLAB HDF5格式是多么容易,如果其中任何一种都比其他格式更难。

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

1 个答案:

答案 0 :(得分:1)

KDB + tickerplant当然能够以该速率捕获数据,但是您需要确定很多事情(无论您选择何种解决方案)

  • 捕获数据的机器是否有足够的内核?最好是taskset一个自动售货机,例如,一个没有其他任何东西可以与之竞争的核心
  • 与磁盘 - SSD类似,请确保总线上没有争用
  • 分离工作负载 - 可以将不同类型的数据(可能是数据包可以被源或流分配)写入不同的cpus / disks / tickerplant进程。

基本上有很多方法可以减少这个。我可以说,虽然适当的硬件KDB +可以完成这项工作。但是,如果您想要HDF5,那么可以通过简单的过程捕获数据并在运行中写入/转换为磁盘。