从流中复制



我们有一个不断向我们发送数据的外部服务。为了简单起见,假设此数据有三个以制表符分隔的字符串。

datapointA datapointB datapointC

这些数据由我们的一个服务器接收,然后转发到一个处理引擎,在那里对这个数据集进行一些有意义的处理。

处理引擎的要求之一是处理引擎不会处理重复的结果。例如,在第1天,处理引擎收到A B C,并且在第243天,服务器接收到相同的A B C。在这种特殊情况下,处理引擎将发出警告,"记录已处理",而不处理该特定记录。

可能有几种方法可以解决这个问题:

  • 将传入数据存储在内存中的HashSet中,并设置exclusion将指示特定记录的处理状态。当我们使用零运行此服务时会出现问题停机时间,并且根据数据的激增,此收集可以超过内存的界限。此外,在系统中断的情况下数据需要保存在某个地方。

  • 将传入数据存储在数据库中,下一组数据将只有在数据库中不存在数据时才进行处理。这
    在发生灾难时有助于历史的持久性但维护适当的索引和激进的
    会带来开销在性能相关问题的情况下进行分片。

或一些其他技术

有人能指出一些案例研究或既定的模式或实践来解决这个特定的问题吗?

感谢

无论解决方案如何,您都需要某种支持存储以实现持久性。因此,无论需要执行多少工作。但它不必是一个sql数据库,就可以实现如此简单的功能——可以持久保存到磁盘的memcached的替代方案

除此之外,您还可以考虑使用bloom过滤器来减少内存占用。这些可能会产生误报,因此您需要回到第二层(较慢但可靠)(可能是磁盘存储)。

最后,在消息传递/企业系统中,对幂等行为的需求非常普遍,所以这样的搜索会发现更多的论文/想法(不确定你是否知道"幂等"是一个有用的搜索词)。

您可以创建数据的哈希,并将其存储在比实际数据小的后备存储中(前提是您的数据不小于哈希)

相关内容

  • 没有找到相关文章

最新更新