0

我有一个连续的数据流。我想实时对数据进行少量处理(主要是压缩,最后滚动一些数据,无论需要做什么),然后存储数据。估计没问题。HDF5 文件格式应该很棒!OOC数据,没问题。Pytables。

现在麻烦了。有时,作为一个完全独立的过程以便仍在收集数据,我想执行一个涉及数据的耗时计算(订单分钟)。这涉及读取我正在编写的同一个文件。

人们如何做到这一点?

当然,阅读您当前正在编写的文件应该是具有挑战性的,但它似乎在过去已经出现了足够多的情况,以至于人们已经考虑了某种巧妙的解决方案——或者至少是一种自然的解决方法。

部分解决方案:

  1. 似乎 HDF5-1.10.0 具有 SWMR 能力 - 单写,多读。这似乎正是我想要的。我找不到这个最新版本的 python 包装器,或者如果它存在,我无法让 Python 与正确版本的 hdf5 对话。这里的任何提示都会受到欢迎。我正在使用 Conda 包管理器。

  2. 我可以想象写入缓冲区,该缓冲区偶尔会被刷新并添加到大型数据库中。如何确保在执行此操作时不会丢失经过的数据?

这似乎也可能在计算上很昂贵,但也许无法解决这个问题。

  1. 收集更少的数据。这有什么好玩的?
4

1 回答 1

0

我建议您看看添加Apache Kafka到您的管道,它可以充当数据缓冲区并帮助您分离对您收集的数据完成的不同任务。

管道示例:

原始数据 ===> kafka 主题(raw_data)===> 小处理 ====> kafak 主题(light_processing)===> 从light_processing主题读取并写入数据库或文件的进程

同时,您可以使用另一个进程读取来自light_processing topic或任何其他主题的相同数据,并进行繁重的处理等等。

如果 thelight processingheavy processingconnect to kafka topic 都具有相同的 groupId,则数据将被复制并且两个进程将获得相同的流

希望它有所帮助。

于 2016-05-08T06:59:11.500 回答