我有连续的数据流。我想对数据进行实时的少量处理(主要是压缩,最后滚动一些数据,无论需要做什么),然后存储数据。大概没问题。 HDF5文件格式应该做得很棒! OOC数据,没问题。 Pytables。
现在麻烦了。有时,作为一个完全独立的过程,以便仍然收集数据,我想执行涉及数据的耗时计算(订单分钟)。这涉及阅读我正在写的同一个文件。人们如何做到这一点?
当然,阅读你正在撰写的文件应该具有挑战性,但似乎过去一定要考虑到某种光滑的解决方案 - 或者至少是自然的工作 - 周围。
部分解决方案:
似乎HDF5-1.10.0具有SWMR功能 - 单写,多读。这似乎正是我想要的。我找不到这个最新版本的python包装器,或者如果它存在,我无法让Python与正确版本的hdf5对话。这里的任何提示都会受到欢迎。我正在使用Conda包管理器。
我可以想象写入缓冲区,偶尔会刷新并添加到大型数据库中。我如何确保在执行此操作时不会遗漏数据?
这似乎也可能在计算上很昂贵,但也许没有解决这个问题。
答案 0 :(得分:0)
我建议你看一下将Apache Kafka
添加到你的管道,它可以充当数据缓冲区,并帮助你分离对你收集的数据所做的不同任务。
管道示例:
原始数据===&gt; kafka主题(raw_data)===&gt;小型处理====&gt; kafak主题(light_processing)===&gt;从type=master&ver=1.0&sig=< thebase64(hash) >
主题读取并写入db或file
与此同时,您可以使用其他流程阅读{
"code": "Unauthorized",
"message": "The input authorization token can't serve the request. Please check that the expected payload is built as per the protocol, and check the key being used. Server used the following payload to sign: 'get\ncolls\ndbs/toto/colls/testtoto\nsun, 08 may 2016 06:43:05 gmt\n\n'\r\nActivityId: fadbfc0b-e298-418a-b56c-8114699fff91"
}
或任何其他主题中的相同数据,并执行繁重的处理等等。
如果light_processing
和light_processing topic
都连接到具有相同groupId的kafka主题,则数据将被复制,并且两个进程将获得相同的流