【问题标题】:Real-time data collection and 'offline' processing实时数据收集和“离线”处理
【发布时间】:2016-05-08 16:11:10
【问题描述】:

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

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

人们如何做到这一点?

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

部分解决方案:

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

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

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

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

【问题讨论】:

    标签: python read-write data-stream


    【解决方案1】:

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

    管道示例:

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

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

    如果light processingheavy processing 都使用相同的 groupId 连接到 kafka 主题,则数据将被复制并且两个进程将获得相同的流

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2010-12-23
      • 2017-01-12
      • 2011-09-30
      • 2018-04-05
      • 1970-01-01
      相关资源
      最近更新 更多